![lvreduce 后 LVM 逻辑卷分区损坏](https://linux22.com/image/597332/lvreduce%20%E5%90%8E%20LVM%20%E9%80%BB%E8%BE%91%E5%8D%B7%E5%88%86%E5%8C%BA%E6%8D%9F%E5%9D%8F.png)
当我尝试缩小一个逻辑卷时遇到了问题。我采取了以下步骤:
# unmount /home
# lvreduce --size -100G /dev/vg_dev/lv_home
# lvdisplay /dev/vg_dev/lv_home
--- Logical volume ---
LV Path /dev/vg_dev/lv_home
LV Name lv_home
VG Name vg_dev
LV UUID QOxrP3-nS36-nZTG-yL7e-sDi0-Wl9z-LXp4pJ
LV Write Access read/write
LV Creation host, time ,
LV Status available
# open 1
LV Size 197.98 GiB
Current LE 50683
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:4
# e2fsck -f /dev/vg_dev/lv_home
e2fsck 1.41.12 (17-May-2010)
The filesystem size (according to the superblock) is 78113792 blocks
The physical size of the device is 51899392 blocks
Either the superblock or the partition table is likely to be corrupt!
Abort<y>?
# resize2fs /dev/vg_dev/lv_home
resize2fs 1.41.12 (17-May-2010)
Please run 'e2fsck -f /dev/vg_dev/lv_home' first.
我根本无法挂载逻辑卷,有人可以帮我解决这个问题吗?
答案1
听起来您试图以错误的顺序调整卷和文件系统的大小。
什么时候萎缩,你应该按照这个顺序执行操作
- 调整文件系统大小
- 调整逻辑卷大小
什么时候生长,你应该按照这个顺序执行操作
- 调整逻辑卷大小
- 调整文件系统大小
对于您的问题
我要做的第一件事是将整个驱动器克隆dd
到备用驱动器,然后对其进行恢复。
如果您很幸运,没有使用任何 LV 可用扩展区,因此磁盘上的块没有改变,您可能能够将 LV 的大小调整回以前的大小,然后尝试fsck
对文件系统执行。如果fsck
成功,您可以调整文件系统的大小。
如果仍然出现错误,fsck
您可能已经造成了无法挽回的损失。
注意:
lvresize
现在支持在传递附加参数时调整文件系统大小-r|--resizefs
,从而减轻了按特定顺序调整大小的需要,并大大降低了出现错误的可能性。
答案2
我调整了逻辑磁盘的大小,/dev/mapper
但出现错误:
超级块或分区表可能已损坏!
解决方案是使用损坏的分区进行以下排序:
[root@localhost]# mke2fs /dev/mapper/VolGroup-lv_home && fsck /dev/mapper/VolGroup-lv_home
就这样。
答案3
一个可能的解决方案是将文件系统扩展 100GB,但可能会丢失一些数据。请备份所需的文件系统。
# lvextend -L +100G /dev/vg_dev/lv_home
# resize2fs /dev/vg_dev/lv_home
然后您就可以挂载文件系统。
希望这可以解决您的问题。
答案4
在开始之前备份您将要执行操作的所有文件系统。
我在 debian 11 上犯了同样的错误,并使用 Ben Lessani 的提示修复了它
vserver-lv-home 文件系统最初为 429.3G
原始错误...
> lvs
检查 /home 上的使用情况
> du -d 1 /home
备份
> cd /;tar cfzv /root/home.tgz /home
> umount /home
> e2fsck /dev/mapper/vserver-lv-home
> lvresize --size -129.3G /dev/mapper/vserver-lv-home
文件系统无法卸载,只能重新启动到单用户模式。另外,我忘记我到底减少了多少,所以运行了
...修复...
> lvresize --size +128G /dev/mapper/vserver-lv-home
然后告诉我我还有可用空间或现存空间?
> lvresize --size +1G /dev/mapper/vserver-lv-home
> lvresize --size +0.1G /dev/mapper/vserver-lv-home
...等等 您也可以尝试 --size +100M,但继续以较小的增量进行,直到没有更多可用空间,0 现存空间?
> mount /home
或
> mount /dev/mapper/vserver-lv-home
它安装时没有任何错误,重新启动并回到桌面登录
然后按照正确的顺序缩小使用绝对 300G 大小
> umount /dev/mapper/vserver-lv-home
> e2fsck /dev/mapper/vserver-lv-home
> resize2fs /dev/mapper/vserver-lv-home 300G
> lvresize --size 300G /dev/mapper/vserver-lv-home
这是一个在其他文件系统上运行 e2fsck 的黑客行为,因为我无法 umount -var 因为它有活动进程并且当然无法轻松 umount -root。 正确的方法是从安装程序启动并卸载驱动器并执行所需的操作。 我已经备份了我的项目,所以我没有使用 umount 和 e2fsck 就继续了。
再次备份您的 -var 和 -root 文件系统,然后再继续。
> tune2fs -c 1 /dev/mapper/vserver-lv-var
> tune2fs -c 1 /dev/mapper/vserver-lv-root
> shutdown -r now
它在启动时运行了 e2fsck,事实上我在所有文件系统上运行了 tune2fs -c。同样,这应该从安装/恢复闪存驱动器启动。
然后我使用从 /home 中获取的释放空间。
> lvresize --size 64G /dev/mapper/vserver-lv-var
> resize2fs /dev/mapper/vserver-lv-var 64G
对 -root 重复相同的操作,其余 64G 从 /home 中释放。
> lvresize --size 64G /dev/mapper/vserver-lv-root
> resize2fs /dev/mapper/vserver-lv-root 64G
> 重新启动并让它运行 efsck
将重新启动计数设置回默认值并重新启动
> tune2fs -c -1 /dev/mapper/vserver-lv-var
> tune2fs -c -1 /dev/mapper/vserver-lv-root
> shutdown -r now
我无法调整 tmp 的大小以使用额外的 1.3G,但如果我找到方法,我会再次发帖,可能只需要释放整整 1G 或更多,因为该命令似乎没有采用更小的增量。
https://man7.org/linux/man-pages/man8/lvresize.8.html
https://manpages.debian.org/bullseye/e2fsprogs/resize2fs.8.en.html
https://www.linuxfordevices.com/tutorials/linux/tune2fs-command