我对 LVM 和分区还很陌生,所以我遇到了这种情况。
背景:
我意外覆盖了 Fedora 16 创建的 LVM 磁盘的 MBR。
现在,此磁盘上的其他所有内容都完好无损;只有 MBR 已损坏(而且,只有其 512 个字节中的前 446 个字节)。我因意外发出以下命令而损坏了 MBR:
$ dd if=/the/wrong/446-byte-file.txt of=/dev/sda
该磁盘(MBR 已损坏)最初/dev/sda在系统 A 中,现在插入到我当前的系统系统 B 中,作为辅助磁盘,/dev/sdb
,用于文件系统/数据恢复。目前无法在系统 B 中卸载。
以下是fdisk -l
系统 B 上的输出:
$ fdisk -l
Disk /dev/sda: 250.1 GB, 250059350016 bytes
255 heads, 63 sectors/track, 30401 cylinders, total 488397168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk identifier: 0x8e678e67
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 475813887 237905920 83 Linux
/dev/sda2 475813888 488396799 6291456 82 Linux swap / Solaris
Disk /dev/sdb: 80.0 GB, 80026361856 bytes
255 heads, 63 sectors/track, 9729 cylinders, total 156301488 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdb1 * 2048 1026047 512000 83 Linux
/dev/sdb2 1026048 156301311 77637632 8e Linux LVM
问题:和/dev/sda运行健康的、非 LVM 设置的 Fedora 16,如何手动挂载/dev/sdb(MBR 损坏)位于系统 B 内部的某个地方,以便能够从中恢复所有数据?(顺便说一下,数据存储在内部的 ext4 文件系统上。)
到目前为止我已经尝试过:
a) 我发出pvs
并得到了这个:
(请注意 VG 列是空的!)
$ pvs
PV VG Fmt Attr PSize PFree
/dev/sdb2 lvm2 a-- 74.04g 74.04g
b)我发布了pvscan
,我得到了这个:
$ pvscan
PV /dev/sdb2 lvm2 [74.04 GiB]
Total: 1 [74.04 GiB] / in use: 0 [0 ] / in no VG: 1 [74.04 GiB]
c) 我有早期备份中的内容/etc/lvm/backup/vg_XYZ
。但我不知道如何从此文件推断/构建卷名称和卷路径(请注意,在此文件中,/dev/sda2利益的划分现在已经变成了/dev/sdb2在当前系统中,即系统B):
# Generated by LVM2 version 2.02.84(2) (2011-02-09): Tue Oct 25 22:10:55 2011
contents = "Text Format Volume Group"
version = 1
description = "Created *after* executing 'vgchange -a y --sysinit'"
creation_host = "XYZ" # Linux XYZ 2.6.38.6-26.rc1.fc15.i686.PAE #1 SMP Mon May 9 20:36:50 UTC 2011 i686
creation_time = 1319560855 # Tue Oct 25 22:10:55 2011
vg_XYZ {
id = "WN8593-xRnx-dn29-rcpb-tRAm-Bs5R-93DGWw"
seqno = 3
status = ["RESIZEABLE", "READ", "WRITE"]
flags = []
extent_size = 65536 # 32 Megabytes
max_lv = 0
max_pv = 0
metadata_copies = 0
physical_volumes {
pv0 {
id = "voQHGq-9m5t-u39a-UBWP-1qKM-sS4M-t3EPYG"
device = "/dev/sda2" # Hint only
status = ["ALLOCATABLE"]
flags = []
dev_size = 155275264 # 74.041 Gigabytes
pe_start = 2048
pe_count = 2369 # 74.0312 Gigabytes
}
}
logical_volumes {
lv_swap {
id = "Osi18q-409G-iG1s-Mdb2-00Lt-wtQV-WpF2mN"
status = ["READ", "WRITE", "VISIBLE"]
flags = []
segment_count = 1
segment1 {
start_extent = 0
extent_count = 126 # 3.9375 Gigabytes
type = "striped"
stripe_count = 1 # linear
stripes = [
"pv0", 0
]
}
}
lv_root {
id = "Wc8qdx-sYKi-qFeM-Bv48-YvZC-ClGU-VrYl4W"
status = ["READ", "WRITE", "VISIBLE"]
flags = []
segment_count = 1
segment1 {
start_extent = 0
extent_count = 2243 # 70.0938 Gigabytes
type = "striped"
stripe_count = 1 # linear
stripes = [
"pv0", 126
]
}
}
}
}
如果我能及时帮助我,我将非常感激,否则我就真的有麻烦了!
提前谢谢了...
/HS
答案1
按顺序尝试以下步骤。
編輯 (由 Harry 刪除)
必须执行 才能
vgcfgrestore
使下面列出的其余命令(以 开头vgscan
)生效。vgcfgrestore vg_XYZ
还必须有一个
e2fsck -y /dev/vg_XYZ/lv_root
才能使安装成功。
详细信息请见此 comp.os.linux.setup 文章这里。
由于您已经完成pvscan
,请继续执行vgscan
:
vgscan --partial --mknodes --verbose
vg_XYZ
如果幸运的话,它应该会发现上的卷组/dev/sdb2
,并在中创建任何必要的设备节点/dev
。
接下来,使卷组可用:
vgchange -a y vg_XYZ
接下来是lvscan
:
lvscan --verbose
最后,使逻辑卷可用:
lvchange -a y vg_XYZ/lv_root
您现在应该能够挂载到lv_root
某个地方来访问其数据,例如
mkdir -p /mnt/rescue
mount -t ext4 -o ro /dev/vg_XYZ/lv_root /mnt/rescue
祝你好运!
答案2
这PartedMagicliveCD/USB 有各种各样的工具可以从该磁盘恢复 MBR。testdisk
是一个,我知道还有其他的。它曾多次拯救我免于输入错误命令,这是有原因的,它dd
被昵称为disk destroyer
。
答案3
您可能能够使用备份文件中的号码手动创建设备。
dmsetup create foo --table "0 146997248 linear /dev/sdb2 8259584"
mount -o ro /dev/mapper/foo /mnt
这些数字的计算方法如下:
146997248 = extent_count * extent_size = 2243 * 65536
8259584 = pe_start + 126 * extent_size = 2048 + 126 * 65536
这是未经测试的。如果备份不能提供当前配置的准确描述(或者我的计算有误 - 我通过类比本地配置来重现它们,而不是对 LVM 有足够深入的了解),那么它将无法工作。