![重装后lvm数据恢复](https://linux22.com/image/155084/%E9%87%8D%E8%A3%85%E5%90%8Elvm%E6%95%B0%E6%8D%AE%E6%81%A2%E5%A4%8D.png)
我的电脑上有一个 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,如果您这样做lvremove
(issue_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
就可能会发现一些单独的、未碎片的文件(仅内容,原始文件名和结构丢失)。