Answers:
LVM会将其元数据备份到/etc/lvm/backup
和/etc/lvm/archive
。在每个文件的顶部,它将告诉您生成文件的时间/数据,因此您很可能会拥有删除LV之前的旧元数据的副本。我相信只要元数据发生更改,备份都是自动的。
以下内容可能很危险且具有破坏性,因此请务必小心,如果可能,请进行完整备份。
恢复这些卷组元数据备份的命令为vgcfgrestore
。确保使用vgcfgbackup
带有-f标志的命令为现有工作配置创建当前副本,以为输出指定其他文件,以免更改/ etc / lvm / backup或/ etc中的任何文件/ lvm /存档文件夹。确保将当前配置与要还原的配置进行了比较,以确认要应用的唯一更改是重新创建最近删除的LV。完整备份数据也不是一个坏主意。如果您已经签订了支持合同,则在进行下一步操作之前,您可能还需要考虑与Linux供应商联系以寻求支持/指导,因为我从来不需要自己做。
祝好运。
“您能否更具体地从备份文件中查找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
全部
我希望这可以帮助正在寻找此解决方案的其他人!
从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
(正如之前的Thermoman回答的那样)重新创建已删除的LVM卷的简便方法是使用lvcreate对其进行创建而不将其置零,并确保它在磁盘上的相同位置。(来自温度计的答案的命令无效。)
通过读取/ etc / lvm / archive中的文件,检查已删除逻辑卷的大小和位置(与删除前一样)。卷的大小是在extent_count
的segment1
(或求和的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
我也有类似情况。我的所有PV都包含所需的LV,但我的VG显示缺少PV和0 LV。我通过执行以下操作恢复了:
pvs
以收集所有驱动器的UUID。physical_volumes
部分中,将device =
行设置为与所报告的当前设备/ UUID相匹配pvs
,清除所有"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。mm
当然,下一次,我将创建一个新的VG来避免此问题。