Ctrl-D 提示,块设备收缩后未事先收缩文件系统,无法启动 Linux 系统

Ctrl-D 提示,块设备收缩后未事先收缩文件系统,无法启动 Linux 系统

我想缩小文件系统,不幸的是我错过了一步:

我之前没有调整文件系统的大小,而是减少了逻辑卷。

结果是系统不再启动,并向我显示文件系统已损坏的消息。

[root@node2 ~]# mount -a
   mount: wrong fs type, bad option, bad superblock on /dev/mapper/vgprod-prod,
   missing codepage or helper program, or other error

   In some cases useful info is found in syslog - try
   dmesg | tail or so.

[root@node2 ~]# e2fsck -f /dev/mapper/vgprod-prod
   e2fsck 1.42.9 (28-Dec-2013)
   Error reading block 65536 (Invalid argument).  Ignore error<y>? yes
   Force rewrite<y>? yes
   Superblock has an invalid journal (inode 8).
   Clear<y>? yes
   *** ext3 journal has been deleted - filesystem is now ext2 only ***

   Superblock has_journal flag is clear, but a journal inode is present.
   Clear<y>? yes
   The filesystem size (according to the superblock) is 115712 blocks
   The physical size of the device is 64512 blocks
   Either the superblock or the partition table is likely to be corrupt!
   Abort<y>? yes
   Error writing block 65536 (Invalid argument).  Ignore error<y>? yes

   /dev/mapper/vgprod-prod: ***** FILE SYSTEM WAS MODIFIED *****

请告诉我如何解决这些问题。

答案1

在进行任何可能导致大量损坏的更改之前,请按当前状态对物理卷(如:)进行逐扇区复制dd if=/dev/sdXY of=/path/to/safe/place.img,并将其存储在某个位置不变。用于pvdisplay了解要复制哪个分区。如果发生最坏的情况(文件系统损坏严重而无法理解其内容),您仍然可以使用测试盘(如果文件系统驻留在 LVM 分区上的一个连续块中):

  1. 跑步testdisk /path/to/image.img
  2. 选择“非分区媒体”:testdisk不知道如何写入LVM,但仍会从找到的分区中读取信息
  3. 使用“分析”来搜索您的分区;如果找不到您的文件系统,请使用“深度搜索”
  4. 使用 P 列出文件,然后使用:/a选择和c/C复制文件。

假设发生故障的 LVM 分区不托管您的 rootfs,/etc/lvm也请备份您的目录。如果该分区确实托管您的 rootfs,那么您以前的备份可能包含此目录?我们会需要它。如果所有其他方法都失败,仍然可以通过/etc/lvm/使用十六进制编辑器和字符串搜索来找到文件的内容description =(假设它们没有碎片),但这是一个非常漫长的过程。

如果您仍在 initramfs shell 中,并且没有足够的可用 HDD 空间来存储映像,幸运的话(initramfs 中存在 USB 存储和其他模块),您可以安装 USB-HDD:

  1. 插入驱动器,等待几秒钟让它旋转
  2. 内核消息可能会显示给您,否则运行:dmesg | tail
  3. 查找看起来像这样的行[ 8391.759613] sd 6:0:0:0: [sdX] 15826944 512-byte logical blocks: (8.10 GB/7.55 GiB)(比较大小以确保它sdX是您的 USB-HDD)和[ 8391.770279] sdX: sdX1(其中 sdX1 ... sdXn 是分区列表)
  4. 跑步:

    mkdir -p /mnt/usb-hdd # ensure existing mountpoint
    mount /dev/sdXN /mnt/usb-hdd # substitute X for the drive letter and N for the partition number from (3)
    
  5. 将备份映像写入和/或/etc/lvm从中复制恢复的备份/mnt/usb-hdd

  6. 完成后不要忘记卸载拇指驱动器:umount /mnt/usb-hdd

完成后,查看您的当前内容/etc/lvm/backup以及/etc/lvm/archive从 rootfs 或备份中获取的内容。在运行之前可能会创建备份元数据,lvresize从而导致所有损坏。在这些目录内的文件中查找以description =.尝试grep description .../etc/lvm/*/*列出描述;如果您仍在 initramfs shell 中,请使用lessmore、或者(如果失败)catShift+ PgUp/ Shift+PgDn查看文本文件。有一个文件吗Created *before* executing 'lvresize -l <something> /dev/vgprod/prod'?运行vgcfgrestore -f /etc/lvm/archive/<suitable archive file> vgprod以将元数据恢复到之前的值,然后尝试挂载/dev/vgprod/prod

fsck在这种情况下,您应该避免在成功复制文件并验证它们安全或制作您确信能够恢复的分区映像之前进行任何类型的操作。fsck在截断的文件系统上可能会让事情变得更糟。

相关内容