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

我在CentOS 5.5上运行Xen。 我有一个使用lvcreate创build逻辑卷的大卷组。 今天我有一个客户取消了她的账户,然后在一个小时后改变主意。 不幸的是,我已经移除了她的Xen映像所在的LVM。 (只使用标准的lvremove)。 从那时起,这个磁盘上就没有其他的LVM活动(没有其他的添加或删除了)。 是否有可能“撤销”lvremove,或恢复逻辑卷? 如果是的话,我该怎么办呢?

LVM将其元数据备份到/etc/lvm/backup/etc/lvm/archive 。 在每个文件的顶部,它会告诉你生成文件的时间/数据,这样你可能会得到一个旧元数据的副本,就像在你删除LV之前一样。 我相信,只要元数据发生变化,备份就会自动进行。

以下可能是危险破坏性的,所以要非常小心,如果可能的话有一个完整的备份。

恢复这些卷组元数据备份的命令是vgcfgrestore 。 确保使用带-f标志的vgcfgbackup命令为当前的工作configurationvgcfgbackup当前副本,以便为输出指定不同的文件,以便不更改/ etc / lvm / backup或/ etc / lvm / archive文件夹。 确保您将当前configuration与希望恢复的configuration进行比较,以validation您要应用的唯一更改是重新创build最近删除的LV。 对数据进行完整备份可能也不是一个坏主意。 如果你在支持合同之下,你可能还想考虑联系你的Linux供应商寻求支持/指导,因为我自己从来没有这样做过。

祝你好运。

“可以请你更具体的从备份文件寻找EFROM和ETO?所有的lv有一个从我的备份文件0”start_extend“,所以我有点失落:)谢谢! :06“

好吧,我将非常具体…用最简单的方法来恢复逻辑卷。

例:

1 – 我已经删除了我的逻辑卷!

 $ sudo lvremove /dev/vg1/debian.root 

2 – 首先要做的是在/etc/lvm/archive/vg1_(xxxxx).vgfind档案文件。 我可以做到这一点,只是看看我已经删除了逻辑卷的date!

 $ sudo ls -l /etc/lvm/archive |more 

我发现了!

 -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** 

date,我做了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 – 恢复之前进行testing!

 $ 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 -ay /dev/vg1/debian.root 

这是全部

我希望这可以帮助其他人正在寻找这个解决scheme!

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

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

a)LV所在的区域(EFROM,ETO)
b)你的LV驻留在哪个PV上,哪个PV正在使用(PFROM,PTO)

获得这些信息后,您可以在完全相同的PV范围内创build一个完全相同尺寸的新LV, 而不需要擦除 LV 的第一个8kB

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

我也有类似的情况。 我有所有的PV包含所需的LV,但我的VG显示缺lessPV和0 LV。 我恢复了以下几点:

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

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

  8. 当这个工作,我没有 – testing选项重新运行。

我用PVs sdg和sdh扩展了VG,从而实现了我的特殊情况。 然后我创build了一个新的LV,在命令行上指定/dev/sdg /dev/sdh ,以便我知道新的LV在这些驱动器上。 然后我把这些驱动器移动到一台新机器上。 旧机器对于缺less的驱动器感到非常不安,当我强行移除它们时,它也移除了所有的LV。 游民。

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

(早些时候由thermoman回答)easys重新创build一个被删除的LVM卷的方法是通过创build它与lvcreate 没有归零 ,并确保它将在磁盘上的相同位置。 (热罗曼的回答命令不起作用。)

通过读取/ etc / lvm / archive中的文件来检查删除之前删除的逻辑卷的大小和位置。 卷的大小在segment1 extent_count (或者segment*/extent_count值的总和,如果它有几个范围的话)。 位置在物理卷别名(例如pv0 )之后的stripes部分。

例如,卷部分可能如下所示:

  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.要重新创build以下卷的问题:

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