lvreduce 太多了。我可以恢复它吗?

lvreduce 太多了。我可以恢复它吗?

我试图将硬盘从由 5 个驱动器组成的大型 LVM 组中取出。它有一个 5.5 TB 的文件系统 (ext4)。LV 为 7.5 TB。我想将 LV 减少 1.82TiB,这样我就可以缩小 VG 并将驱动器从组中 pvmove 出来。

我做了以下事情:
fsck -f (passed)
lvreduce -L 1.82T /dev/mapper/my_storage_vg-storage_lv

这会产生警告:

将大小四舍五入为完整物理范围 1.82 TiB
  警告:将活动逻辑卷减少至 1.82 TiB
  这可能会破坏您的数据(文件系统等)
您确实要减少 storage_lv 吗?[y/n]:

这正是我所期望的,所以我答应了,因为我有足够的空间。

但是,您可能已经注意到我忘记了 1.82T 上的减号,因此我没有将其减少 1.82T,而是将其减少到 1.82T!!
我的下一个命令是 fsck,它失败了,我拒绝进行任何修复,立即看到了错误。
我尝试的下一个命令是:
lvextend -l +100%FREE /dev/mapper/my_storage_vg-storage_lv

这恢复了 LV 的大小。

然后我尝试了一下
fsck- f
,但是这一次 fsck 在遇到块位图差异时就失败了。

我怀疑 lvextend 命令将块放回去,但其顺序与删除时的顺序不同,本质上扰乱了文件系统。

这听起来正确吗?如果正确,我该怎么做才能解开 ext4 文件系统?什么都可以做吗?

非常感谢所有的帮助...


附录:我pvscan在这个过程的早期阶段做过以下事情:

PV /dev/sdf1   VG my_storage_vg   lvm2 [1.82 TiB / 0    free]
PV /dev/sda1   VG my_storage_vg   lvm2 [1.82 TiB / 0    free]
PV /dev/sde1   VG my_storage_vg   lvm2 [1.82 TiB / 0    free]
PV /dev/sdc1   VG my_storage_vg   lvm2 [1.36 TiB / 0    free]
PV /dev/sdd1   VG my_storage_vg   lvm2 [698.63 GiB / 698.63 GiB free]

我怀疑这是驱动器最初添加到 vg 的顺序(可能,不确定)。我正在考虑将 LV 和 VG 大小缩小到 0,然后一次添加一个驱动器

vgextend /dev/sda1
lvextend sda1
vg extend sde1
lvextend sde1
etc...

有一个更好的方法吗?


更好的是:

lvreduce -l 0 /dev/mapper/my_storage_vg-storage_lv
lvextend /dev/mapper/my_storage_vg-storage_lv /dev/sdf1
lvextend /dev/mapper/my_storage_vg-storage_lv /dev/sda1
lvextend /dev/mapper/my_storage_vg-storage_lv /dev/sde1
lvextend /dev/mapper/my_storage_vg-storage_lv /dev/sdc1
fsck -f /dev/mapper/my_storage_vg-storage_lv

答案1

您不能随意扩展 LV 并希望获得正确的布局。使用vgcfgrestore(我会让你阅读手册)恢复之前的配置lvreduce。不要mountfsck任何事情。

相关内容