昨天我使用Windows的磁盘分区工具只是为了读取磁盘布局(没有触及任何东西,只是打开它)。看起来卷组的一部分被覆盖,至少在名称方面(标签和 UUID); lv 工具总是提示有关丢失分区的错误,“pNvsomething-something”。
根据/etc/lvm/archive
、/dev/sdb
和 /dev/sdd1
都用在卷组中。
physical_volumes {
pv0 {
id = "pNv7bl-5uND-rHH1-B3kK-Jcud-rxCm-7nJcKb"
device = "/dev/sdb" # Hint only
status = ["ALLOCATABLE"]
flags = []
dev_size = 1953525168 # 931,513 Gigabytes
pe_start = 2048
pe_count = 238467 # 931,512 Gigabytes
}
pv1 {
id = "983nT1-PMwL-21Fz-tGw4-1ynZ-4JP9-s5OmGv"
device = "/dev/sdd1" # Hint only
status = ["ALLOCATABLE"]
flags = []
dev_size = 1562500000 # 745,058 Gigabytes
pe_start = 2048
pe_count = 190734 # 745,055 Gigabytes
}
}
这是以下的输出blkid /dev/sdb
:
/dev/sdb: PTUUID="2539097c-4f75-41e4-86c2-7e60f1f561ee" PTTYPE="gpt"
和/dev/sdb1
:
/dev/sdb1: PARTLABEL="Microsoft reserved partition" PARTUUID="ce5feefa-d5ab-4ae4-8147-d06a81fe32d3"
我不知道那些 130mb 的“Microsoft 保留分区”来自哪里,但我想这很好,因为 lvm 存档中显示的大小与 lsblk 显示的大小相同。
sdb 有不同的 UUID 和分区类型,但似乎完全相同。我猜 130mb 的分区是被盗来自通过调整 lv 分区大小而产生的未分配空间。我应该怎么办?mkfs
然后将lvm指向新的UUID?不应该有任何数据被覆盖。
更新
我已经环顾了一段时间,mkfs 的想法是一个愚蠢的想法,因为看起来我应该使用 lvm 工具。
我可以恢复/etc/lvm/backup/nameOfVG
uuid 并将其指向正确的设备。
pvcreate --restorefile /etc/lvm/backup/datavg/ --uuid pNv-something /dev/sdb
现在的问题是pvcreate等工具无法访问/dev/sdb:
Device /dev/sdX not found (or ignored by filtering).
一些链接:
谷歌还向我提供了一些红帽解决方案的链接,描述了一个非常相似的问题,但它们是付费墙后面的。
答案1
第一:如果您想从不完整的 LV 中拯救数据,请较新运行 fsck(或 mkfs 或写入 FS/分区的任何内容)。您始终需要首先将 PV 恢复到原始状态,并进行尽可能少的修改!
第二:如果可能的话,首先进行备份 - 您可能需要一些数据救援软件,无论如何,最好在数据副本上运行它,并保持原始数据完好无损。
lsblk 显示什么?还有黑子?还有 sgdisk -p /dev/sdb 吗?什么是 LV
lvs --segments -a -o+pe_ranges
:?这 130MB 很可能是从 /dev/sdb 开始处获取的,因此如果对其进行格式化,前 130MB 很可能已损坏。现在您可以使用
wipefs
删除 GPT 签名,然后您应该能够运行上述pvcreate
命令。或者,如果您想要更多控制,则仅覆盖第一个扇区(不确定这是否足够)-dd if=/dev/zero of=/dev/sdb bs=4k count=1
。无论如何,我宁愿抓住机会将数据移动到分区内。如果该磁盘有可能被 Windows 机器使用,强烈建议使用分区表,这样 LVM 不感知的系统不会将其视为未使用的磁盘。