恢复损坏的 LVM 分区

恢复损坏的 LVM 分区

我似乎已经损坏了包含根分区和交换分区的主 LVM 分区 [1]。

$ sudo fdisk -l /dev/sdb
Disk /dev/sdb: 223.6 GiB, 240057409536 bytes, 468862128 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00025e8d

Device     Boot    Start       End   Sectors  Size Id Type
/dev/sdb1  *        2048   2099199   2097152    1G 83 Linux
/dev/sdb2       39051264 468862127 429810864  205G  5 Extended
/dev/sdb5       39053312 468860927 429807616  205G 8e Linux LVM

gparted 对 /dev/sdb5 有如下说明:

Unable to detect file system! Possible reasons are:
- The file system is damaged
- The file system is unknown to GParted
- There is no file system available (unformatted)
- The device entry /dev/sdb5 is missing

系统似乎根本找不到 LVM 分区:

$ sudo vgchange -ay ubuntu-vg
  Volume group "ubuntu-vg" not found
  Cannot process volume group ubuntu-vg
$ sudo lvscan -av
    Using logical volume(s) on command line.
    No volume groups found.

我该如何修复 /dev/sdb5?

我目前正在 /dev/sdb 上运行 gpart 以查看是否有帮助。fsck不起作用:

$ sudo fsck /dev/sdb5
fsck from util-linux 2.27.1
e2fsck 1.42.13 (17-May-2015)
ext2fs_open2: Bad magic number in super-block
fsck.ext2: Superblock invalid, trying backup blocks...
fsck.ext2: Bad magic number in super-block while trying to open /dev/sdb5

The superblock could not be read or does not describe a valid ext2/ext3/ext4
filesystem.  If the device is valid and it really contains an ext2/ext3/ext4
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:
    e2fsck -b 8193 <device>
 or
    e2fsck -b 32768 <device>

我相信 /dev/sdb5 上的原始文件系统是“lvm2 pv”,并且我可以选择通过 gparted 将 /dev/sdb5 格式化为该文件系统,但在我让事情变得更糟之前,我想在这里问一下。

[1]:当我损坏它时,我正在向启动分区添加额外的空间。我按照说明操作。这里这里, 和这里这是我做事的大致顺序(就我的记忆而言)

  • 我将 ubuntu-vg/root 减少了几 GB,以释放一些空间
  • 我尝试了pvmoveubuntu-vg/swap,但它抱怨空间不足
  • 我又减少了 ubuntu-vg/root
  • p4move使用 ubuntu-vg/swap 将未分配的空间推送到 /dev/sdb2 的末尾
  • 我使用 KDE 分区管理器将 /dev/sdb5 移动到 /dev/sdb2 的末尾,以便未分配的空间位于 /dev/sdb2 的开头
    • 我尝试让 KDE 分区管理器缩小 /dev/sdb2 以释放 /dev/sdb1 的未分配空间,但该操作出错。我打开 gparted,它告诉我重新启动,所以我照做了。
  • 我打开 gparted,缩小了 /dev/sdb2,扩大了 /dev/sdb1。这时我注意到 /dev/sdb5 上有一个错误

答案1

这有点老套了,但让我说说我的看法。我的逻辑卷已经损坏了好几次,现在我又遇到了这种情况。我不知道为什么会发生这种情况,但我猜是当我进行备份时,会创建一个临时快照卷以在备份过程中保持数据的完整性,而备份脚本由于某些(我举手)错误而崩溃。这导致快照卷挂在 LVM 空间中,我猜这会损坏我正在备份的逻辑卷。

幸运的是,多年来我学会了每天备份,所以我总是有一份最新的备份。问题是损坏何时发生,因为系统似乎仍然运行良好,只是偶尔会出现一些小故障,因为损坏会越来越严重,直到操作系统甚至无法启动,这可能需要几天甚至一周以上(也许?)。

我看到 LVM 软件包中有一个 lvmreport 工具,但我还没有用过。我必须研究一下,也许可以把它作为我标准备份程序的一部分。

幸运的是,多年来我已经学会在系统中的多个硬盘上安装多个版本的 Linux,因此如果一个硬盘坏了,或者整个硬盘坏了,我可以启动另一个硬盘,然后尝试恢复有问题的安装。如果没有这个,你总是可以从实时 CD、DVD 或拇指驱动器启动。

正如我所说,我一开始并不知道 lvm 是问题所在,所以我将进行恢复,最好使用映像文件(我使用 fsarchiver 进行映像备份),但也可以同时使用 tar 备份。如果恢复的安装仍然有问题,我知道逻辑卷已损坏,我需要删除逻辑卷并重新创建它们。我可能还必须删除卷组并重新创建它。如果卷组中还有其他逻辑卷,则可能会怀疑它们是否已损坏,以及是否可以将数据传输到另一个组或物理分区中的另一个干净卷。做你认为必要的事情。

因此,如果需要,请删除卷组,或者仅删除逻辑卷,重新创建卷组和/或逻辑卷,然后从备份重新安装。

您还需要运行 chroot 来更新新逻辑卷的启动文件夹。您可以在此处找到相关信息如何恢复启动文件夹?

哦,顺便说一句,gparted 无法查看逻辑卷,也与创建或重构逻辑卷无关。您需要 LVM 或 KVPM 来实现这一点,我看到您确实使用了它们。此外,在硬盘驱动器以及 LVM 物理卷和卷组中留出未使用的空间是一种很好的做法(请注意),这样当您处于这种危急情况下时,您就有空间移动东西。

答案2

我知道这是一种老方法,但它仍然得到很多的关注,所以我想我会发布一个有用的答案:

这个问题是最难修复的,因为根驱动器是 lvm 的一部分,因此您没有可用于恢复的备份 lvm 配置。

看来您能够启动 ubuntu 的工作版本。因此我建议您安装 testdisk。

testdisk 可以搜索和恢复分区。如果您遇到这种情况,请不要移动分区或对驱动器进行任何操作,除非迫不得已。分区表是一个索引,如果您丢失了分区表,可以“相当容易地”恢复它,但是如果您移动分区和/或将数据复制到驱动器,那么您的数据可能会被覆盖,因为驱动器的控制器不知道扇区中已经存储了数据。如果您的数据被覆盖,那么您将无法恢复数据,这是不可能的。

testdisk 可以通过 apt 安装。有关如何使用 testdisk 的文档可在此处找到https://www.cgsecurity.org/testdisk.pdf该文档还包括许多修复不同类型文件系统的有用提示。

相关内容