提醒:在向已有的RAID阵列动刀子前,务必备份重要数据。
先前用lvm组了个3硬盘的raid5阵列,今天希望向现有阵列中添加2硬盘扩容。
起手式:用新添加的2个硬盘(我是/dev/sdb和/dev/sdd)创建pv。
sudo pvcreate /dev/sdb
sudo pvcreate /dev/sdd
将pv添加到目标vg(我是/dev/ssd-raid/ssd)中。
sudo vgextend /dev/ssd-raid/ssd /dev/sdb /dev/sdd
确保/dev/ssd-raid/ssd取消挂载(我是挂在/data上),执行文件系统检查。
sudo umount /data
sudo e2fsck -fy /dev/ssd-raid/ssd
随后,网上大部分资料让你通过lvextend来扩容lv,但是我丫的始终没有成功:
sudo lvextend -r -l +100%FREE /dev/ssd-raid/ssd
后面经过一番搜索,发现lvconvert也可以。
sudo lvconvert --type raid5 --stripes 4 /dev/ssd-raid/ssd
注意--stripes参数:用于指定扩容后的、存储数据的磁盘数量,且不包括raid5/6的奇偶校验盘。
因此:对于3盘raid5,stripes为2;对于5盘raid5,stripes为4。
确保lvconvert成功后,等待同步率100%。可通过
sudo lvs
查看同步率。最后执行resize2fs即可。
sudo resize2fs /dev/ssd-raid/ssd
很不幸的是,我第一次lvconvert也遇到了错误:
sudo lvconvert --type raid5 --stripes 4 /dev/ssd-raid/ssd
Using default stripesize 64.00 KiB.
WARNING: Adding stripes to active logical volume ssd-raid/ssd will grow it from 976754 to 1953508 extents!
Run "lvresize -l976754 ssd-raid/ssd" to shrink it or use the additional capacity.
Are you sure you want to add 2 images to raid5 LV ssd-raid/ssd? [y/n]: y
Insufficient free space: 5 extents needed, but only 0 available
Failed to allocate out-of-place reshape space for ssd-raid/ssd.
Insufficient free space: 5 extents needed, but only 0 available
Failed to allocate out-of-place reshape space for ssd-raid/ssd.
Reshape request failed on LV ssd-raid/ssd.
推测是因为新加的2个硬盘和原来的硬盘容量不是严格相等的缘故。不清楚这是不是我直接lvextend总是失败的原因?
lvconvert出错后,需要手动把stripes调回原来的值(坑)。否则,可以看到lv的容量虽然已经上来了,但是raid5迟迟不给你同步,并且resize2fs也会一直出错。
因为我原先是3硬盘的raid5,所以原来的stripes为2:
sudo lvconvert --type raid5 --stripes 2 /dev/ssd-raid/ssd
由于推测错误是硬盘容量不一致导致的,所以对现有vg小规模缩容到3700G:
sudo lvreduce -r -L 3700G /dev/ssd-raid/ssd
然后重新执行lvconvert。
sudo lvconvert --type raid5 --stripes 4 /dev/ssd-raid/ssd
这次终于成功:
sudo lvconvert --type raid5 --stripes 4 /dev/ssd-raid/ssd
Using default stripesize 64.00 KiB.
WARNING: Adding stripes to active logical volume ssd-raid/ssd will grow it from 947200 to 1894400 extents!
Run "lvresize -l947200 ssd-raid/ssd" to shrink it or use the additional capacity.
Are you sure you want to add 2 images to raid5 LV ssd-raid/ssd? [y/n]: y
Logical volume ssd-raid/ssd successfully converted.
缓慢等待同步率100%,最后再resize2fs一下即可。