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

Joh*_*n P 13 lvm

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

小智 18

“你能否更具体地从备份文件中找到 EFROM 和 ETO?所有 lv 在我的备份文件中都有一个从 0 开始的“start_extend”,所以我有点迷失了 :) 谢谢! – user186975 2013 年 8 月 24 日 17 点:06"

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

例子:

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

$ sudo lvremove /dev/vg1/debian.root
Run Code Online (Sandbox Code Playgroud)

2 - 首先要做的是,在 /etc/lvm/archive/vg1_(xxxxx).vg 中查找存档文件。我可以做到这一点,只需查看我删除逻辑卷的日期!

$ sudo ls -l /etc/lvm/archive |more
Run Code Online (Sandbox Code Playgroud)

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**
Run Code Online (Sandbox Code Playgroud)

我执行 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*
Run Code Online (Sandbox Code Playgroud)

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**
Run Code Online (Sandbox Code Playgroud)

6 - 好的,现在重复命令行,没有 (--test)

$ sudo vgcfgrestore vg1 -f /etc/lvm/archive/vg1_00227-2048533959.vg
**Restored volume group vg1**
Run Code Online (Sandbox Code Playgroud)

7 - 检查它!

$ sudo lvscan |grep debian
ACTIVE            '/dev/vg1/debian.root' [7,81 GiB] inherit
Run Code Online (Sandbox Code Playgroud)

8 - 如果逻辑不活跃,那就去做吧!

$ sudo lvchange -a y /dev/vg1/debian.root 
Run Code Online (Sandbox Code Playgroud)

这就是全部

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


3di*_*nce 14

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

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

恢复这些卷组元数据备份的命令是vgcfgrestore. 确保使用vgcfgbackup带有 -f 标志的命令制作现有工作配置的当前副本,为输出指定不同的文件,这样就不会更改 /etc/lvm/backup 或 /etc 中的任何文件/lvm/archive 文件夹。确保将当前配置与要恢复的配置进行比较,以验证您将要应用的唯一更改是重新创建最近删除的 LV。对数据进行完整备份也可能不是一个坏主意。如果您签订了支持合同,您可能还需要考虑联系您的 Linux 供应商以获取支持/指导,然后再继续操作,因为我自己从来没有这样做过。

祝你好运。


小智 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
Run Code Online (Sandbox Code Playgroud)