我正在尝试调整我的 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
。然后vgcfgrestore
LVM 元数据使用该备份,希望它能恢复正常工作。
如果您的 中没有此类文件/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 文件。