重装后lvm数据恢复

重装后lvm数据恢复

我的电脑上有一个 SSD 和一个 HDD。 SSD用于系统,HDD用于存储数据。我将操作系统从 debian 更改为 ubuntu,但我忘记在 HDD 上备份 lvm。当然我丢失了我的数据。我尝试在其上重新创建一个具有相同大小的新逻辑卷。但是当我运行 xfs_repair 时,它显示“找不到有效的辅助超级块”。看来没啥用啊。由于我创建了一个新的逻辑卷,lvscan解决方案也没用。那么有没有办法可以恢复我的数据呢?

答案1

这很复杂,我们真的不知道发生了什么,而且您的尝试可能没有帮助。

默认情况下,当您重新创建逻辑卷时,它将擦除签名并将前 4KiB 数据清零。换句话说,它可以额外确保旧文件系统在新创建的 LV 上不可见。

   -W|--wipesignatures y|n
          Controls detection and subsequent wiping of signatures on new LVs.

   -Z|--zero y|n
          Controls zeroing of the first 4KiB of data in the new LV.

对于 SSD,如果您这样做lvremoveissue_discards = 1在 lvmconfig 中)或mkfs.

LVM 也可能使用不同的数据偏移量,在这种情况下,您尝试创建的所有 LV 也将处于错误的偏移量。如果 LVM 位于分区上,并且分区本身未在正确的偏移处重新创建,则情况相同。

逻辑卷也可以以任何一种方式分配(如果您有多个逻辑卷,或者调整它们的大小)。无法保证数据将在磁盘上的单个线性块(如分区)中可用。

因此,为了恢复丢失的 LV,您需要详细了解 LVM 元数据。因此,LVM 会保留其元数据的备份/etc/lvm/{archive,backup},但如果元数据已经被擦除、清零或丢弃,则无济于事,而且如果您也对根分区进行了格式化,则可能会缺少这些备份。不管怎样,还是检查一下,也许你很幸运。

物理卷本身也有元数据备份,但如果您对其进行 pvcreate/vgcreate,这些备份可能也已经消失了。不过,检查一下也没什么坏处:

$ strings -w /dev/disk | grep -A 1000 'Generated by LVM2'
# Generated by LVM2 version 2.02.103(2) (2013-10-04): Thu Oct 31 11:42:36 2013
...

在那里,您可能会找到可能有助于手动或恢复的分配信息片段vgcfgrestore。 (请注意时间戳,您正在寻找事故发生前的时间戳)。

那么有没有办法可以恢复我的数据呢?

如果 LV 位于单个磁盘上并且没有以任何方式碎片化,并且它仍然存在(未擦除),则testdisk也可以使用分区恢复工具(例如不带 LVM 的常规分区)来恢复它。

分区不支持逻辑寻址,因此您只能将 LV 映射到分区(如果物理上全部位于一个段中,而不是多个段映射在一起)。

如果文件系统本身无法恢复,只要数据没有加密,photorec就可能会发现一些单独的、未碎片的文件(仅内容,原始文件名和结构丢失)。

相关内容