向LVM现有的RAID5阵列中添加新的硬盘

除了用lvextend,还可以用lvconvert

提醒:在向已有的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一下即可。

称谓(*)
邮箱
留言(*)