我在 CentOS 5.5 上运行 Xen。我有一个大型卷组,我使用 lvcreate 在该卷组上创建逻辑卷。今天,一位客户取消了她的帐户,大约一小时后又改变了主意。不幸的是,我已经删除了她的 Xen 映像所在的 LVM。(仅使用标准 lvremove )。从那时起,此磁盘上没有其他 LVM 活动(没有添加或删除任何其他内容)。是否可以“撤消” lvremove 或恢复逻辑卷?如果可以,我该怎么做?
答案1
LVM 会将其元数据备份到/etc/lvm/backup
和/etc/lvm/archive
。在每个文件的顶部,它会告诉您生成文件的时间/日期,因此您很有可能拥有删除 LV 之前的旧元数据副本。我相信只要元数据发生变化,备份就会自动进行。
以下可以是危险的和破坏性的所以要非常小心,如果可能的话请进行完整的备份。
恢复这些卷组元数据备份的命令是vgcfgrestore
。请确保使用vgcfgbackup
带有 -f 标志的命令创建现有工作配置的当前副本,以便为输出指定不同的文件,这样您就不会更改 /etc/lvm/backup 或 /etc/lvm/archive 文件夹中的任何文件。请确保将当前配置与要恢复的配置进行比较,以验证您要应用的唯一更改是重新创建最近删除的 LV。对数据进行完整备份可能也不是一个坏主意。如果您签订了支持合同,您可能还想考虑在继续之前联系您的 Linux 供应商寻求支持/指导,因为我自己从来没有这样做过。
祝你好运。
答案2
“您能否更具体地说明如何从备份文件中查找 EFROM 和 ETO?在我的备份文件中,所有 lv 的“start_extend”都从 0 开始,所以我有点迷茫 :) 谢谢!– user186975 2013 年 8 月 24 日 17:06”
好的,我会非常具体地...用最简单的方法来恢复逻辑卷。
例子:
1——我已经删除了我的逻辑卷!
$ sudo lvremove /dev/vg1/debian.root
2 - 首先要做的是,查找 /etc/lvm/archive/vg1_(xxxxx).vg 中的存档文件。我可以这样做,只需查看我删除逻辑卷的日期!
$ sudo ls -l /etc/lvm/archive |more
3-我找到了!
-rw------- 1 root root 16255 Mar 20 14:29 vg1_00223-235991429.vg
-rw------- 1 root root 16665 Mar 20 16:49 vg1_00224-748876387.vg
-rw------- 1 root root 17074 Mar 20 16:49 vg1_00225-931666169.vg
-rw------- 1 root root 17482 Mar 20 16:50 vg1_00226-1238302012.vg
-rw------- 1 root root 18081 **Mar 20 21:57 vg1_00227-2048533959.vg**
我执行 lvremove 的日期!!!...是几分钟前..
4——让我们看看文件!
$ sudo head /etc/lvm/archive/vg1_00227-2048533959.vg
*# Generated by LVM2 version 2.02.95(2) (2012-03-06): Thu Mar 20 21:57:58 2014
contents = "Text Format Volume Group"
version = 1
description = **"Created *before* executing 'lvremove /dev/vg1/debian.root'"**
creation_host = "server" # Linux server 3.8.0-35-generic #50-Ubuntu SMP Tue Dec 3 01:24:59 UTC 2013 x86_64
creation_time = 1395363478 # Thu Mar 20 21:57:58 2014*
5-恢复之前进行测试!
$ sudo vgcfgrestore vg1 --test -f /etc/lvm/archive/vg1_00227-2048533959.vg
Test mode: Metadata will NOT be updated and volumes will not be
(de)activated. **Restored volume group vg1**
6 – 好的,现在重复命令行,不带(--test)
$ sudo vgcfgrestore vg1 -f /etc/lvm/archive/vg1_00227-2048533959.vg
**Restored volume group vg1**
7——检查!
$ sudo lvscan |grep debian
ACTIVE '/dev/vg1/debian.root' [7,81 GiB] inherit
8 – 如果逻辑没有被激活,就执行它!
$ sudo lvchange -a y /dev/vg1/debian.root
一切皆如此
我希望这可以帮助其他正在寻找此解决方案的人!
答案3
从 lvremove 中恢复的最简单的事情(假设您没有写入 LV 所在的范围)是:
只需在 /etc/lvm/archive 中找到元数据的备份并找出答案
a) LV 驻留在哪个扩展区中(EFROM、ETO)
b) LV 驻留在哪个 PV 上以及它正在使用的 PV 上的哪个扩展区(PFROM、PTO)
获得此信息后,您可以在完全相同的 PV 扩展上创建一个完全相同大小的新 LV无需擦除前 8kBLV 的:
lvcreate --extents EFROM-ETO --zero n --name customer007 YOUR-VG-NAME /dev/yourpv:PFROM-PTO
答案4
我遇到过类似的情况。我拥有包含所需 LV 的所有 PV,但我的 VG 显示缺少 PV 且 LV 为 0。我通过执行以下操作恢复:
- 成为 root
- 运行
pvs
以收集所有驱动器的 UUID。 - 检查 /etc/lvm/archive 中的文件,直到找到一个列出所有相同 UUID 的文件。
- 创建存档配置文件的工作副本,并开始编辑。
- 在
physical_volumes
部分中,设置行device =
以匹配报告的当前设备/UUIDpvs
,清除所有"MISSING"
标志,并删除任何pvN
实际缺失的部分。 - 在该部分中,删除所有在不再存在的部分
logical_volumes
上有条纹的列表。pvN
就是这样,然后我就跑了
vgcfgrestore --test vg -f /root/dangerously_edited.vg
- 当它起作用时,我重新运行,但没有
--test
选择该选项。
我通过使用 PV sdg 和 sdh 扩展 VG 来解决我的情况。然后我创建了一个新的 LV,/dev/sdg /dev/sdh
在命令行上指定,以便我知道新 LV 在这些驱动器上。然后我将这些驱动器移动到一台新机器上。旧机器对丢失的驱动器非常不满,当我强制删除它们时,它也删除了所有 LV。真糟糕。
当然,下次我会创建一个新的 VG 来避免这个问题。