使用LVM 2创建软RAID
LVM 2是支持软RAID的实现的,但是,当然,RAID LV不支持动态缩小大小,不过在实际场景中,缩小大小似乎也是一个可有可无的需求吧。
使用LVM 2的RAID可以减少一层存储技术栈,降低复杂度,相当方便。
RAID 0
lvcreate [--type raid0] -i|--stripes 2 [-I|--stripesize 64K] -n RAIDLV名 -l|-L 大小 VG名
创建RAID 0 LV,-i
表示RAID 0中的总磁盘数量,需要VG中至少包含两个PV。
除此之外没什么好说的,危险的行为。
RAID 1
lvcreate [--type raid1] -m|--mirrors 1 [--nosync] -n RAIDLV名 -l|-L 大小 VG名
创建RAID 1 LV,-m
表示用于镜像的磁盘数量,需要VG中至少包含镜像数量+1个PV,--nosync
表示并不同步磁盘中已存在的数据。
如果出现错误,LVM会自动尝试进行修复,但是如果出现硬损伤,对应的RAID LV会停止工作,此时需要将对应的磁盘进损坏行更换,然后执行vgreduce --removemissing VG名
移除失效设备,再执行vgextend VG名 /dev/设备
重新填充设备,然后执行lvconvert --repair [-b|--background] /dev/VG名/RAIDLV名
进行修复。
RAID 1 LV和Mirror LV是略有不同的,但是在这里不细讲了。
RAID 10
lvcreate --type raid10 -m|--mirrors 1 [--nosync] -i|--stripes 2 -n RAIDLV名 -L|--size 大小 VG名
创建RAID 10 LV,需要VG中至少包含四个PV
LVM的RAID 10只能有一组备份,也就是说-m
的参数只能为1
。-i
选项决定了每个存储组中的条带磁盘数量,互为备份的两组是对称的,换句话说,总磁盘数量为条带磁盘数量 * 2
。
RAID 10的恢复和RAID 1一致。
RAID 5
lvcreate --type raid5 -n RAIDLV名 -l|-L 大小 VG名
创建RAID5 LV,需要VG中至少包含三个PV
修复RAID 5数据时,也需要先更换磁盘,执行vgreduce --removemissing VG名
移除失效设备,执行vgextend VG名 /dev/设备
重新填充设备,然后执行lvconvert --repair [-b|--background] /dev/VG名/RAIDLV名
进行修复。
必要的情况下,可以强制启动存在损坏的RAID 5,执行vgchange -ay --partial VG名
,不过此时处于降级模式,性能有所下降,并且不可能承受下一次损坏。
也可以从RAID 5中动态切换或卸载磁盘,执行lvconvert --replace /dev/旧设备名 /dev/VG名/RAIDLV名 [/dev/新设备名]
。
RAID 6
lvcreate --type raid6 -n RAIDLV名 -l|-L 大小 VG名
创建RAID6 LV,需要VG中至少包含五个PV
RAID 6的恢复和RAID 5一致。
查看RAID状态,使用lvs -a VG名
。