LVM 文件系统恢复

LVM 文件系统恢复

我正在尝试调整我的 LUKS 地下室的大小https://wiki.archlinux.org/index.php/Resizing_LVM-on-LUKS我开始调整分区大小,并把事情严重搞砸了。我输入870了新尺寸,却忘记在末尾加上 G。它把我的分区缩小到870M我立即调整它的大小,870G但那时损坏已经造成了。幸运的是,我仍然可以解密 LUKS 密码,但我无法让逻辑卷在系统上拥有设备文件。 LVM 识别出该卷已存在,并显示其所附加的设备文件,但该文件不存在,并且显示没有文件系统。我这样做了vgscan --mknodes,它成功生成了设备文件,但testdisk仍然不会显示它。我重新创建了该卷并在其上放置了一个新的 ext4 文件系统,现在testdisk将显示驱动器,但扫描不会产生任何结果。我收到一大堆 ext4 条目,但它们要么说“无法打开文件系统”,要么说“找不到文件”。我是否可以恢复磁盘上的文件系统?在获取其中的内容之前,我不想向其中写入任何数据,除非这是不可能的。

编辑:在研究了真正需要帮助的事情之后,我需要帮助的是从以前的 ext4 文件系统恢复文件。我的驱动器上有一个 ext4 系统,此后已被新系统覆盖,但旧系统中的所有数据仍然存在,如 所示sudo dd if=/dev/Storage/Storage bs=1M | strings -fn 16。搞砸之后我做的唯一一件事就是安装了一个新的 ext4 FS,没有做任何其他事情,所以我的大部分数据可能仍然完好无损。我需要恢复该数据。

pvdisplay显示以下内容

--- Physical volume ---
PV Name               /dev/mapper/Storage
VG Name               Storage
PV Size               931.51 GiB / not usable 3.68 MiB
Allocatable           yes (but full)
PE Size               4.00 MiB
Total PE              238466
Free PE               0
Allocated PE          238466
PV UUID               CAueGx-Glzx-zCd0-H00m-R8d5-KTRc-9Ff7ay

--- Physical volume ---
PV Name               /dev/mapper/sda3_crypt
VG Name               mint-vg
PV Size               118.50 GiB / not usable 0   
Allocatable           yes 
PE Size               4.00 MiB
Total PE              30336
Free PE               10
Allocated PE          30326
PV UUID               UJJfu8-S2Ac-pEZl-PlPa-uUzJ-axEs-ckbDWG

我的备份显示

# Generated by LVM2 version 2.02.98(2) (2012-10-15): Thu Aug 13 20:45:52 2015

contents = "Text Format Volume Group"
version = 1

description = "Created *before* executing '/sbin/lvreduce --config log{command_names=0} -f -l 217600 /dev/Storage/Storage'"

creation_host = "desktop"   # Linux desktop 3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64
creation_time = 1439523952  # Thu Aug 13 20:45:52 2015

Storage {
     id = "lM3S9T-inH1-mKsq-5doN-H8hT-zO3F-LF9jDx"
    seqno = 2
    format = "lvm2" # informational
    status = ["RESIZEABLE", "READ", "WRITE"]
    flags = []
    extent_size = 8192      # 4 Megabytes
    max_lv = 256
    max_pv = 256
    metadata_copies = 0

    physical_volumes {

        pv0 {
            id = "nH1Axo-5nBo-WcyA-Xc4E-KwRt-K0Ib-ScK8Ch"
            device = "/dev/mapper/Storage"  # Hint only

            status = ["ALLOCATABLE"]
            flags = []
            dev_size = 1953520999   # 931.511 Gigabytes
            pe_start = 2048
            pe_count = 238466   # 931.508 Gigabytes
        }
    }

    logical_volumes {

        Storage {
            id = "Qb01kz-y1RG-PVQp-cGjB-sj77-xgnJ-w9kn3n"
            status = ["READ", "WRITE", "VISIBLE"]
            flags = []
            creation_host = "desktop"
            creation_time = 1436247513  # 2015-07-06 22:38:33 -0700
            segment_count = 1

            segment1 {
                start_extent = 0
                extent_count = 238466   # 931.508 Gigabytes

                type = "striped"
                stripe_count = 1    # linear

                stripes = [
                    "pv0", 0
                ]
            }
        }
    }
}

答案1

您无法通过将大小恢复到原始大小来修复 LVM,除非您非常幸运并且 LV 没有由于之前的大小调整而产生任何碎片。新的 LV 很可能会拥有20G原始文件系统的第一个左右,但其余的780G(或其他)都是炒鸡蛋(错误的数据、错误的偏移量、错误的顺序)。

假设您使用的是 HDD 介质。如果它是 SSD,在issue_discards=1您的 中lvm.conf,数据就会消失,这就是为什么我从不使用此选项。

您必须检查/etc/lvm/{archive,backup}/旧版本的元数据。那里的每个文件都说明了它的创建时间,例如:

description = "Created *before* executing 'lvremove HDD/mdtest1'"

你正在寻找那个说Created before lvresize 850失踪的人G。然后vgcfgrestoreLVM 元数据使用该备份,希望它能恢复正常工作。

如果您的 中没有此类文件/etc/lvm,要么是因为您从丢失了此数据的 Live CD 执行此操作,要么是您的根 LV 发生了损坏,那么事情会变得更加复杂,因为您必须希望磁盘上的 LVM 元数据能够恢复正常。在其循环缓冲区中包含这段历史记录。

看看里面可能有什么的粗略方法:

dd if=/dev/pvdevice bs=1M count=1 | strings -w -n 16

答案2

如果您没有扔掉旧的 ext4,可能还有希望fsck进行一些修复并找到一些完整的目录结构。

实际上,通过使用位于磁盘中您没有弄乱的部分的备用超级块,可能仍然有希望mkfs。或者,如果您的旧 FS 的备份超级块数量与当前的空 FS 不同,则可能有一些未被覆盖。

e2fsck -b some-offset

仅当您的 LV 映射到与旧的 LV 相同的字节时,这才适用(Frostschultz 在他的回答中谈到了这一点)。


您可以恢复从二进制流中选取的几种类型的文件。 (因为您没有将文件名映射到字节范围的元数据。)某些文件具有可识别的标头,并且可以判断文件结尾在哪里。只要您的文件是碎片化的,就有希望恢复一些无名文件。

最重要的是是执行此操作的工具。它声称可以找到 jpg、gif、png、bmp、avi、exe、mpg、wav、riff、wmv、mov、pdf、ole、doc、zip、rar、htm 和 cpp 文件。

相关内容