首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LVM文件系统恢复

LVM文件系统恢复
EN

Unix & Linux用户
提问于 2015-08-14 09:15:25
回答 2查看 2.1K关注 0票数 3

我试着按照这个https://wiki.archlinux.org/index.php/Resizing_LVM-on LUKS调整我的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显示了以下内容

代码语言:javascript
复制
--- 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

我的备份显示

代码语言:javascript
复制
# 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
                ]
            }
        }
    }
}
EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2015-08-14 09:31:36

您不能通过将大小增加到原来的大小来修正LVM,除非您非常幸运,而且LV没有任何碎片,因为以前的大小。新LV有可能拥有原始文件系统的第一个20G,但是剩下的780G (或其他什么)是炒鸡蛋(错误的数据、错误的偏移量、错误的顺序)。

这是假设你在使用HDD媒体。如果是SSD,issue_discards=1在您的lvm.conf中,数据就会消失,这就是为什么我从不使用这个选项的原因。

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

代码语言:javascript
复制
description = "Created *before* executing 'lvremove HDD/mdtest1'"

你要找的是那个说Created before lvresize 850G不见的人。然后使用该备份的vgcfgrestore LVM元数据,希望它能够恢复正常运行。

如果您在/etc/lvm中没有这样的文件,或者是因为您是从丢失此数据的Live中这样做的,或者您的根LV上发生了损坏,那么事情就会变得更加复杂,因为您必须希望磁盘上的LVM元数据能够在其循环缓冲区中包含这一点历史。

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

代码语言:javascript
复制
dd if=/dev/pvdevice bs=1M count=1 | strings -w -n 16
票数 2
EN

Unix & Linux用户

发布于 2015-08-15 05:07:26

如果您没有使用旧的ext4,那么fsck可能会有一些希望来进行一些修复,并找到一些完整的目录结构。

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

代码语言:javascript
复制
e2fsck -b some-offset

只有当您的LV映射到与旧的字节相同的字节( Frostschultz在他的回答中提到过)时,这才适用。

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

最重要是实现这一目的的工具。它声称找到jpg,gif,png,bmp,avi,exe,mpg,wav,riff,wmv,mov,pdf,ole,doc,zip,rar,htm和cpp文件。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/223177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档