如何恢复使用 lvremove 删除的逻辑卷

如何恢复使用 lvremove 删除的逻辑卷

我在 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。我通过执行以下操作恢复:

  1. 成为 root
  2. 运行pvs以收集所有驱动器的 UUID。
  3. 检查 /etc/lvm/archive 中的文件,直到找到一个列出所有相同 UUID 的文件。
  4. 创建存档配置文件的工作副本,并开始编辑。
  5. physical_volumes部分中,设置行device =以匹配报告的当前设备/UUID pvs,清除所有"MISSING"标志,并删除任何pvN实际缺失的部分。
  6. 在该部分中,删除所有在不再存在的部分logical_volumes上有条纹的列表。pvN
  7. 就是这样,然后我就跑了

    vgcfgrestore --test vg -f /root/dangerously_edited.vg

  8. 当它起作用时,我重新运行,但没有--test选择该选项。

我通过使用 PV sdg 和 sdh 扩展 VG 来解决我的情况。然后我创建了一个新的 LV,/dev/sdg /dev/sdh在命令行上指定,以便我知道新 LV 在这些驱动器上。然后我将这些驱动器移动到一台新机器上。旧机器对丢失的驱动器非常不满,当我强制删除它们时,它也删除了所有 LV。真糟糕。

当然,下次我会创建一个新的 VG 来避免这个问题。

相关内容