lvreduce 后 LVM 逻辑卷分区损坏

lvreduce 后 LVM 逻辑卷分区损坏

当我尝试缩小一个逻辑卷时遇到了问题。我采取了以下步骤:

# 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

听起来您试图以错误的顺序调整卷和文件系统的大小。

什么时候萎缩,你应该按照这个顺序执行操作

  1. 调整文件系统大小
  2. 调整逻辑卷大小

什么时候生长,你应该按照这个顺序执行操作

  1. 调整逻辑卷大小
  2. 调整文件系统大小

对于您的问题

我要做的第一件事是将整个驱动器克隆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

相关内容