RAID(独立冗余磁盘阵列)

通过把多个硬盘设备组合成一个容量更大、安全性更好的磁盘阵列,并把数据切割成多个区段后分别存放在各个不同的物理硬盘设备上,然后利用分散读写技术来提升磁盘阵列整体的性能,同时把多个重要数据的副本同步到不同的物理硬盘设备上

RAID 0

能够有效的提升硬盘数据的吞吐速度,但是不具备数据备份和错误修复能力,数据会被分开写入到不同的硬盘设备中

RAID 1

在写入数据时,将数据同时写入到多块硬盘设备上,当其中一块硬盘出错时,会自动替换

RAID 5

把硬盘设备的数据奇偶校验信息保存到其他硬盘设备中,这样任何一个设备损坏后不至于出现致命缺陷

RAID 10

RAID 0和RAID 1的组合体,继承了RAID 0的高读写速度和RAID 1的数据安全性,在不考虑成本的情况下RAID 10的性能都超过了RAID 5

mdadm

管理Linux 系统中的软件RAID硬盘阵列

参数 作用
-a 检测设备名称
-n 指定设备数量
-l 指定RAID界别
-C 创建
-v 显示过程
-f 模拟设备损坏
-r 移除设备
-Q 查看摘要信息
-D 查看详细信息
-S 停止RAID磁盘阵列
-x 备份盘数量

使用4块硬盘来部署RAID 10,并挂载硬盘,最后将挂载信息写入到配置文件中

# mdadm -Cv /dev/md0 -a yes -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde
# mkfs.ext4 /dev/md0
# mkdir /RAID
# mount /dev/md0 /RAID
# df -h
etc...
/dev/md0  40G  49M 38G 1% /RAID
# echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab

损坏硬盘阵列及修复

这里模拟一下RAID 磁盘阵列损坏后的处理方法

使用madadm命令将坏掉的硬盘移除,然后查看RAID磁盘阵列的状态,这时可以发现状态已经改变,再模拟一个新的硬盘,重启系统,接着把新的硬盘添加到RAID磁盘阵列中

# mdadm /dev/md0 -f /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
# mdadm -D /dev/md0
etc...
0 8 16 - faulty    /dev/sdb
# umount /RAID
# mdadm /dev/md0 -a /dev/sdb
# mdadm -D /dev/md0
etc...
Number Major Minor RaidDevice State
4 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
2 8 48 2 active sync /dev/sdd
3 8 64 3 active sync /dev/sde
# mount -a

磁盘阵列+备份盘

RAID 10 最多允许50%的硬盘设备发生故障,但是存在一些极端情况,这时我们需要用到备份盘

这里的例子是RAID 5,一共使用4块硬盘,其中一个是用来备份,用 -x 来表示数量,当硬盘出现问题时,备份盘会自动顶替出问题的硬盘,并回复数据

# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde
etc...
# mdadm -D /dev/md0
etc...
Number Major Minor RaidDevice State
0      8     16    0          active sync /dev/sdb
1      8     32    1          active sync /dev/sdc
4      8     48    2          active sync /dev/sdd
3      8     64    -          spare       /dev/sde
# mkfs.ext4 /dev/md0
etc...
# echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab
# mkdir /RAID
# mount -a

LVM(逻辑卷管理器)

在硬盘分区或者部署为RAID磁盘阵列后,用户想要调整硬盘分区的大小时,需要用到LVM技术,该技术可以允许用户对硬盘资源进行动态调整

部署逻辑卷

功能/命令 物理卷管理 卷组管理 逻辑卷管理
扫描 pvscan vgscan lvscan
建立 pvcreate  vgcreate lvcreate
显示 pvdisplay vgdisplay lvdisplay
删除 pvremove vgremove lvremove
扩展 vgextend lvextend
缩小 vgreduce lvreduce

部署:
1. 让添加的设备支持LVM技术
2. 将两块硬盘设备加入到storage卷组中
3. 切割出一个150MB的逻辑卷设备
4. 把生成好的逻辑卷格式化,挂载使用
5. 写入配置文件

# pvcreate /dev/sdb /dev/sdc
etc...
# vgcreate storage /dev/sdb /dev/sdc
etc...
# vgdisplay
etc...
Alloc PE / Size 0 / 0 Free PE / Size 10238 / 39.99 GiB
etc...
# lvcreate -n vo -l 37 storage
etc...
# lvdisplay
etc...
LV Size 148.00MiB
etc...
# mkfs.ext4 /dev/storage/vo
etc...
# mkdir /lvm
# mount /dev/storage/vo /lvm
# df -h
etc...
/dev/mapper/storage-vo 145M 7.6M 138M 6% /lvm
# echo "/dev/storage/vo /lvm ext4 defaults 0 0" >> /etc/fstab

扩容逻辑卷

扩容:
1. 把逻辑卷vo扩展至290MB
2. 检查硬盘完整性,并重置硬盘容量
3. 重新挂载硬盘设备并查看挂载状态

# umount /lvm
# lvextend -L 290M /dev/storage/vo
etc...
# e2fsck -f /dev/storage/vo
etc...
# resize2fs /dev/storage/vo
# mount -a
# df -h
etc...
/dev/mapper/storage-vo 279M 2.1M 259M 1% /lvm

缩小逻辑卷

缩小:
1. 检查文件系统的完整性
2. 把逻辑卷的容量减小到120MB
3. 重新挂载文件系统并查看系统状态

# umount /lvm
# e2fsck -f /dev/storage/vo
etc...
# resize2fs /dev/storage/vo 120M
etc...
# lvreduce -L 120M /dev/storage/vo
etc...
# mount -a
# df -h
etc...
/dev/mapper/storage-vo 113M 1.6M 103M 2% /lvm

逻辑卷快照

快照:
1. 使用-s参数生成一个快照卷,使用-L参数指定切割的大小
2. 在逻辑卷所挂载的目录中创建一个100MB的垃圾文件,然后再看快照卷的状态可以发现存储空间占用的量上升了
3. 校验SNAP快照卷的效果,需要对逻辑卷进行快照还原操作
4. 快照卷会被自动删除掉

# vgdisplay
etc...
Alloc PE / Size 30 / 120.00 MiB Free PE / Size 10208 / 39.88 GiB
etc..
# lvcreate -L 120M -s -n SNAP /dev/storage/vo
etc...
# lvdisplay
etc...
# dd if=/dev/zero of=/lvm/files count=1 bs=100M
etc..
# lvdisplay
etc...
Allocated to snapshot 83.71%
etc...
# umount /lvm
# lvconvert --merge /dev/storage/SNAP
etc...
# mount -a
# ls /lvm/

What doesn’t kill you makes you stronger.