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


12

我在CentOS 5.5上运行Xen。我有一个大卷组,可以使用lvcreate创建逻辑卷。今天,我有一个客户取消了她的帐户,然后大约一个小时后改变了主意。不幸的是,我已经删除了Xen映像所在的LVM。(仅使用标准lvremove)。从那以后,此磁盘上没有其他LVM活动(没有添加或删除任何东西)。是否可以“撤消” lvremove或恢复逻辑卷?如果是这样,我将如何处理?

Answers:


13

LVM会将其元数据备份到/etc/lvm/backup/etc/lvm/archive。在每个文件的顶部,它将告诉您生成文件的时间/数据,因此您很可能会拥有删除LV之前的旧元数据的副本。我相信只要元数据发生更改,备份都是自动的。

以下内容可能很危险具有破坏性,因此请务必小心,如果可能,请进行完整备份。

恢复这些卷组元数据备份的命令为vgcfgrestore。确保使用vgcfgbackup带有-f标志的命令为现有工作配置创建当前副本,以为输出指定其他文件,以免更改/ etc / lvm / backup或/ etc中的任何文件/ lvm /存档文件夹。确保将当前配置与要还原的配置进行了比较,以确认要应用的唯一更改是重新创建最近删除的LV。完整备份数据也不是一个坏主意。如果您已经签订了支持合同,则在进行下一步操作之前,您可能还需要考虑与Linux供应商联系以寻求支持/指导,因为我从来不需要自己做。

祝好运。


1
深入阅读vgcfgrestore,看来我需要在尝试执行该操作之前关闭该框中的每个VM,否则可能会损坏整个阵列。看来您的指示会奏效,所以我接受答案,但是数据不值得冒险。谢谢
John P

@John P是的,我有点想知道虚拟机,而在这样的环境中,这将是一件困难的事情。我想可以得出这样的结论:在将来,删除帐户的过程可能需要30天的无删除期。
3dinfluence 2011年

18

“您能否更具体地从备份文件中查找EFROM和ETO?所有lv在备份文件中都从0开始有一个“ start_extend”,所以我有点迷失了:)谢谢!– 2013年8月24日,user186975在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 

全部

我希望这可以帮助正在寻找此解决方案的其他人!


5

从lvremove中恢复最简单的方法是(假设您没有写LV所处的范围):

只需在/ etc / lvm / archive中找到元数据的备份并找出

a)LV所在的范围(EFROM,ETO)
b)您的LV所在的PV以及正在使用的PV的扩展范围(PFROM,PTO)

获得此信息后,您将在完全相同的PV扩展上创建大小完全相同的新LV,而无需擦除 LV 的前8kB

lvcreate --extents EFROM-ETO --zero n --name customer007 YOUR-VG-NAME /dev/yourpv:PFROM-PTO

1
您能否更具体一点,但要从备份文件中找到EFROM和ETO?所有的lv在备份文件中都有一个从0开始的“ start_extend”,所以我有点迷失了:)谢谢!

3

(正如之前的Thermoman回答的那样)重新创建已删除的LVM卷的简便方法是使用lvcreate对其进行创建而不将其置,并确保它在磁盘上的相同位置。(来自温度计的答案的命令无效。)

通过读取/ etc / lvm / archive中的文件,检查已删除逻辑卷的大小和位置(与删除前一样)。卷的大小是在extent_countsegment1(或求和的segment*/extent_count值,如果它有几个区段)。位置在stripes物理卷别名(例如pv0)之后的部分中。

例如,音量部分可能如下所示:

    physical_volumes {
            pv0 {
                    device = "/dev/somedisk" # Hint only
                    ...
            }
    }

    logical_volumes {
            ...
            example {
                    ...
                    segment_count = 1

                    segment1 {
                            start_extent = 0
                            extent_count = 1024     # 4 Gigabytes

                            type = "striped"
                            stripe_count = 1        # linear

                            stripes = [
                                    "pv0", 30720
                            ]
                    }
            }
            ...
    }

example卷的大小为1024,并且从扩展区30720开始位于/ dev / somedisk上。

将最后一个扩展区计算为开始+大小-1 = 30720 + 1024-1 =31743。要重新创建该卷,请执行以下操作:

lvcreate --extents 1024 --zero n --name example vgname /dev/somedisk:30720-31743

这个答案昨天挽救了我的夜晚!我的XenServer损坏了,由于API错误而删除了错误的LV ...:o
Elektordi

2

我也有类似情况。我的所有PV都包含所需的LV,但我的VG显示缺少PV和0 LV。我通过执行以下操作恢复了:

  1. 成为根
  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。mm

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.