我猜我已经删除了 LVM 分区。我在 vmware 中扩展了数据存储(从 70 GB 到 90 GB),然后运行echo 1> /sys/class/block/sdb/device/rescan
。
之后我运行fdisk /dev/sdb
。它显示我的 sdb 是 90 GB,但出现了以下警告:
The old LVM2_member signature will be removed by a write command.
我确实输入了 w,但我觉得这不是一个好主意。现在这些命令都没有显示任何内容:lvs, vgs, pvs
我blkid
看到我的 sdb UUID 已经改变:
/dev/sda1: UUID="b96e5429-d28e-4102-9085-4f303642a26e" TYPE="ext4" PARTUUID="0ab90198-01"
/dev/mapper/vg00-vol_db: UUID="4ed1927e-620a-4bf9-b656-c208f31e6ea3" TYPE="ext4"
/dev/sdb: PTUUID="d6c28699" PTTYPE="dos"
我运行的vgcfgrestore vg00 --test -f vg00_00001-2029869851.vg
是今天更改之前的最后一个文件。(这是我 2 个月前创建 LVM 时的文件)但它返回了
TEST MODE: Metadata will NOT be updated and volumes will not be (de)activated.
Couldn't find device with uuid 4deOKh-FeJz-8JqG-SAyX-KviL-UGu4-PtJ138.
Cannot restore Volume Group vg00 with 1 PVs marked as missing.
Restore failed.
我该如何挽回这一混乱局面?非常感谢
答案1
我知道这是一个老话题,但我认为它对其他人会很有用,因为我刚刚犯了同样的错误,但我设法让它(相当)轻松地工作。下载 gparted cd,启动它。打开终端并
sudo hexedit /dev/sda3
(其中 sda3 是损坏的分区)使用箭头滚动到 00000200
那里应该有类似这样的行:
00000200 4c 41 42 45 4c 4f 4e 45 01 00 00 00 00 00 00 00 |LABELONE........|
00000210 fe b5 f2 9a 20 00 00 00 00 00 00 00 00 00 00 00 |.... ...........|
00000220 42 32 42 4e 66 78 44 54 41 79 55 67 57 65 77 41 |B2BNfxDTAyUgWewA|
00000230 70 4e 32 42 57 4e 4f 64 52 36 6e 74 55 6f 44 4d |pN2BWNOdR6ntUoDM|
将第 210 行替换为以下代码:
00000210 fe b5 f2 9a 20 00 00 00 4c 56 4d 32 20 30 30 31 |.... ...LVM2 001|
按 F2 保存,按 CTRL + X 退出并重新启动。瞧!
答案2
开始记录您的终端会话以记录您所做的事情。
启动备份恢复程序以防数据丢失。请求磁带或存档存储。不要立即开始复制数据。
考虑对损坏的 PV 块设备进行映像处理,以防止修复后无法恢复。尤其是如果操作简单,例如使用存储阵列快照。
按照程序恢复 LVM 物理卷上的元数据。用损坏的 PV 填写命令,注意错误的值可能会丢失数据。特别是,仔细检查块设备是否是整个磁盘/dev/sdb
,或者是某个分区,如/dev/sdb1
。您没有打印分区表,所以我不能确定。
pvcreate --uuid 4deOKh-FeJz-8JqG-SAyX-KviL-UGu4-PtJ138 --restorefile vg00_00001-2029869851.vg blockdevice
vgcfgrestore vg00
lvchange --activate y
fsck
抽查数据令您满意。
在某种形式的行动后审查中,研究如何改进数据保护。
检查备份是否满足恢复时间目标。假设您有一项能够恢复到昨晚的策略。如果没有夜间备份,或者没有记录,请修复它。
考虑在整个磁盘上创建未来的 LVM PV。避免分区复杂化,跳过fdisk
步骤。Linux LVM 完全可以胜任 PV /dev/sdb
。