我试图将硬盘从由 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
。不要mount
或fsck
任何事情。