磁盘和文件系统

RAID 磁盘冗余阵列

描述:RAID (Redundant Array of Independent Disks)有软件和硬件两种方式,硬件需要有RAID阵列卡,这里主要记录RAID的类型,不记录配置,工作中的硬件服务器一般有带有RAID卡,配置也比较简单,就不做赘述。

在操作系统层面,RAID就是一个块设备(硬盘)

联想RAID描述,这里有图文描述,更直观和详细

基础RAID类型

基础类型RAID主要有RAID 0/1/5/6 ,RAID名字叫冗余,所以我记忆方式是1表示True,表示冗余

RAID0 (无冗余)

简介:将数据条带化,分散写入所有盘

要求:一块硬盘起步

容量:硬盘容量累加

优点:读写速度最快

缺点:数据不安全,坏盘就丢数据

RAID1(冗余)

简介:数据镜像化,一份数据写入到多个磁盘内

要求:2块硬盘

容量:1块硬盘容量

优点:安全,最多可坏1块盘,读取速度较快,坏盘替换后数据重建时间快

缺点:写入速度较慢,容量等于最小的那块盘

RAID5(一个校验位)

简介:将数据条带化,同时写入多块盘,相同位置一份数据做奇偶校验,保证数据安全

要求:4块盘起步

容量:N-1 块硬盘容量

优点:兼顾可靠性和容量,因为数据校验,最多可损失一块盘

缺点:容错只有一块硬盘,可以考虑增加热备盘;因为要校验,坏盘替换后的数据重建慢

RIAD6 (两个校验位)

简介:将数据条带化,同时写入多块盘,两份数据做奇偶校验,保证数据安全

要求:4块硬盘起步

容量:N-2 块硬盘容量

优点:兼顾可靠性和容量,因为数据校验,最多可损失两块盘

缺点:因为要校验,坏盘替换后的数据重建慢

组合RAID类型

RAID 10 (冗余、镜像)

简介:先镜像后条带,硬盘先组成RAID1的磁盘组,然后将RAID1盘组成RAID0组

要求:4块起步,偶数个硬盘

容量:容量是硬盘总数的一半

优点:读写速度,重建速度,可靠性都很好,如果不是同一组的RAID1一起坏,数据不会丢失

缺点:容量少一半如果一组RAID1坏了,数据丢失,所以当出现硬盘故障,需及时更换,或者增加热备盘

RAID选择建议

1)如果对数据写入速度有要求,但是不需要保证数据安全性,可以做RAID0

2)对数据读写和可靠性有要求,但是不关注容量,做RAID10

3)如果对可靠性和容量都有要求,做RAID5或者RAID6

4)目前工作中系统盘和数据盘隔离,系统盘做的RAID1


LVM(逻辑卷管理器)

一、基本概念

PV(物理卷):位于LVM的最底层,可以由物理盘、硬盘分区、磁盘阵列生成
VG (卷组):建于物理卷之上,一个卷组可以包含多个物理卷,可以动态添加物理卷
LV (逻辑卷):用卷组中的资源建立,可以扩容和缩容(缩容有危险
PE (基本单元):可以理解为LVM最小的存储单元

lvm 配置文件: /etc/lvm.conf

需要安装 lvm2 :Userland logical volume management tools

二、常用命令

具体的参数,需要通过man或者help看帮助手册

功能/命令 物理卷管理 卷组管理 逻辑卷管理
扫描 pvscan vgscan lvscan
建立 pvcreate vgcreate lvcreate
显示(-v 详情) pvdisplay / pvs vgdisplay / lvs  lvdisplay / lvs
删除 pvremove vgremove lvremove
扩展 pvresize vgextend lvextend / lvresize
重命名 vgrename lvrename
激活 vgchange lvchange
缩小 vgreduce lvreduce

三、创建流程

1、创建PV (可以是磁盘或者是分区,不要给分区格式化)
pvcreate /dev/sdb

2、创建VG 首次创建,如下方式可以跳过,直接执行第三步
vgcreate vg_name /dev/sdb

3、将PV加入到VG中 (这里注意是用创建PV的设备或者分区)
vgextend vg_name /dev/sdb

4、创建LV并分配空间 (-L 150M 就是创建150M,-l 25 就是创建25*4M,-l指定4M为单位的块数)
lvcreate -n lv_name -l 25 vg_name

分配全部vg容量
lvcreate -l 100%FREE -n lv_name vg_name

lvdisplay 查看逻辑卷信息,能看到逻辑卷路径

5、格式化LV (系统用什么格式就用什么格式,比如xfs)

mkfs.xfs /dev/vg_name/lv_name

6、挂载LV

mkdir /test_lv

mount /dev/vg_name/lv_name /test_lv

写入挂载文件

vi /etc/fstab
mount -a 

注意:变更/etc/fstab 一定要用mount -a测试一下,避免重启时挂载失败导致进入救援模式

四、扩容流程

1、检查VG是否有剩余资源 (如果没有,就按照上面流程给VG添加PV资源)
vgdisplay

可选:vg扩容

vgextend  vg_name /dev/sdc

可选:pv扩容

可能存在虚拟机的硬盘扩容,通过pvresize 来刷新pv容量

2、LV扩容
lvresize -L +2G /dev/vg_name/lv_name
或者下面的方式,将设备剩余容量全部加入LV
lvextend /dev/vg_name/lv_name /dev/sdb

3、刷新设备容量

先查看文件系统类型

df -Th 或者 查看 /etc/fstab

xfs 文件系统:

xfs_info /dev/vg_name/lv_name

xfs_growfs /dev/vg_name/lv_name

ext 文件系统:

resize2fs /dev/vg_name/lv_name

4、查看扩容结果

df -Th

五、缩容

xfs无法收缩,ext4可以,不建议做缩容操作,有数据丢失风险,不记录

六、删除操作

1、卸载挂载点 (注意清理/etc/fstab 以及其他挂载配置,避免系统重启失败)

umount /test_lv

2、删除逻辑卷 (谨慎操作)

lvremove /dev/vg_name/lv_name

 3、删除卷组 (使用卷组名,谨慎操作,删除前请确认是否有其他卷组在使用!!!)

vgremove storage

4、删除物理卷(谨慎操作)
pvremove /dev/sdb

七、其他操作

1、有次硬盘迁移后,系统识别不到文件系统,进入救援模式了

1)查看逻辑卷的情况

        ls /dev/mapper 

2)发现仅有control 文件,所有的逻辑卷都丢失了

3)尝试激活逻辑卷 如果是单用户,不用敲lvm

        lvm vgscan  扫描本机的卷组

        lvm vgchange -ay 卷组名 激活卷组下的逻辑卷

        ls /dev/mapper 此时可以看到逻辑卷恢复情况

4)尝试修复逻辑卷 要先确认文件系统是xfs     注意:swap 不是 xfs

        xfs_repair -v -L /dev/mapper/卷组路径

        -L 是强制修复,说是可能会清理log和元数据,目前测试数据没丢,强制日志清零

5)如果不确定就都修复一下,小分区10秒左右,如果无文件损坏的情况下

6)重启,正常进入系统

2、有次测试卷组迁移,然后还是重名卷组

vgs -v 查看卷组详情,每个卷组都有唯一的UUID

vgrename nOcFSI-6mnX-5fcE-uhjD-Rgh3-SB63-vYOdEc new_vg_name

刚特地测试了vg重命名,很快,貌似没啥影响


磁盘管理

一、常见文件系统类型

常用文件系统

  • xfs Centso预设文件系统
  • ext4 Linux 早期适用的文件系统类型
  • swap Linux交换分区,可提供虚拟内存,不过会影响IO速度
  • vfat 同时支持Linux和Windows
  • nfs 网络文件系统
  • cifs Windows的共享目录,挂载需要用户名和密码
mount -t cifs -o username=win-username,password=win-pasword,uid=linux-username,gid=linux-group  //win-ip/path  /mount_dir_path

不常用文件系统

  • devtmpfs 功用是在 Linux 核心 启动早期建立一个初步的 /dev,令一般启动程序不用等待 udev,缩短 GNU/Linux 的开机时间。
  • tmpfs 内存文件系统
  • ext2、etx3 Linux 早期适用的文件系统类型
  • btrfs 为了取代etx3的文件系统
  • cramfs 压缩式文件系统,在读取需要的文件位置时,就解压这部分内容到内存,通过内存读取数据
  • minix Linux最早使用的文件系统,Minix使用的文件系统
  • proc 伪文件系统,它为内核数据结构提供接口

二、EXT 和 XFS

以下内容,是鸟哥的Linux私房菜笔记

EXT 

EXT 文件系统特性:

  • superblock:记录文件系统整体信息,包括inode/block的总量、使用量、剩余量,以及文件系统的格式与相关信息等
  • inode:记录文件的属性,一个文件占用一个 inode,同时记录此文件的数据所在的 block 号码
  • block:实际记录文件的内容,若文件太大时,会占用多个 block 

FAT 系统每个 block 号码都记录在前一个 block 当中,只能链式的读取,需要碎片整理。

索引式文件系统(indexed allocation) ,inode 记录多个块,可以同时读取

ext2 格式化:Boot Sector + Block group

Block group:

  • data block:
  1. 放置文件内容数据,Ext2 文件系统中所支持的 block 大小有 1K, 2K 及4K 三种
  2. block 差异会导致文件系统能够支持的最大磁盘容量与最大单一文件容量并不相同
  3. 原则上,block 的大小与数量在格式化完就不能够再改变了(除非重新格式化)
  4. 每个 block 内最多只能够放置一个文件的数据,即使有剩余容量
  • inode table:
  1. inode 的内容在记录文件的属性以及该文件实际数据是放置在哪几号 block
  2. 每个文件都仅会占用一个 inode 
  3. 系统读取文件时需要先找到 inode,符合相关权限才能读取block
  4. 12 个直接,一个间接,一个双间接与一个三间接记录区来实现更多block的记录
  • super block:
  1. 记录整个 filesystem 相关信息的地方,没有超级块就没有文件系统
  2. block 与 inode 的总量;inode / block 大小和使用情况
  3. 文件系统挂载时间、最近一次写入数据的时间、最近一次检验磁盘 (fsck) 的时间等文件系统的相关信息
  4. 一个valid bit数值,若此文件系统已被挂载,则 valid bit 为0,若未被挂载,则valid bit为1
  5. 一般一个文件系统中仅有一个super block在第一个block group ,其他的是备份
  • Filesystem Description:描述每个 block group 的开始与结束的 block 号码,以及说明每个区段 (superblock,bitmap, inodemap, data block) 分别介于哪一个 block 号码之间
  • block bitmap:从 block bitmap 当中可以知道哪些 block 是空的,能够很快速的找到可使用的空间
  • inode bitmap:inode bitmap 则是记录使用与未使用的 inode 号码

目录:

  • inode 记录该目录的相关权限与属性,并可记录分配到的那块 block 号码
  • block 则是记录在这个目录下的文件名与该文件名占用的 inode 号码数据

文件:

  • 分配一个 inode 与相对于该文件大小的block 数量给该文件,inode 和block 的块大小决定系统支持的最大的文件
  • 如果block超过12个,将会用到间接、双间接或三间接记录区的block,会多出block

文件系统大小与磁盘读取效能:

  • 机械硬盘,如果文件系统分区过大,会出现block离散,导致读取效率会下降

EXT 意外断电:

  • 可能导致数据不一致,需要用e2fsck 做一致性检查和修复
  • 日志式文件系统(可以避免全分区检查)
  1. 当系统要写入一个文件时,会先在日志记录区块中纪录某个文件准备要写入的信息
  2. 开始写入文件的权限与数据;开始更新 metadata 的数据
  3. 完成数据与 metadata 的更新后,在日志记录区块当中完成该文件的纪录

缺点:格式化慢,修复速度慢

XFS

xfs 就是被开发来用于高容量磁盘以及高性能文件系统之用,日志式文件系统

组成:

  • 数据区 (data section)
  1. inode/data block/superblock 等数据,都放置在这个区块
  2. 分为多个储存区群组(allocation groups) 来分别放置文件系统所需要的数据
  3. inode 与 block 都是系统需要用到时,才动态配置产生
    • 每个储存区群组:(与block groups类似)
      1. 整个文件系统的 superblock
      2. 剩余空间的管理机制
      3. inode 的分配与追踪
  • 文件系统活动登录区 (log section)
  1. 用来纪录文件系统的变化,其实有点像是日志区
  2. 文件的变化会在这里纪录下来,直到该变化完整的写入到数据区后,该笔纪录才会被删除
  3. 可以指定外部的磁盘来作为 xfs 文件系统的日志区块
  • 实时运作区 (realtime section)
  1. 当有文件要被建立时,xfs 会在这个区段里面找一个到数个的 extent 区块,将文件放置在这个区块内,等到分配完毕后,再写入到 data section 的 inode 与 block 去
  2. 这个 extent 区块的大小得要在格式化的时候就先指定,最小值是 4K 最大可到 1G
  3. 一般非磁盘阵列的磁盘默认为 64K容量,而具有类似磁盘阵列的 stripe 情况下,则建议 extent 设定为与 stripe 一样大磁盘性能更好
  4. sunit 与 extent 会影响文件系统性能,可以不用额外指定

你可能感兴趣的:(知识系列,#,知识系列,Linux-基础知识,服务器,运维)