145
LVM之VG、PV误删除恢复方法

VG恢复

一、lvremove误删除vg卷组

lvremove  vgname  会删除vg下的所有pv,需要用archive记录的元数据日志去恢复lv

[root@centos7 archive]# ll /etc/lvm/archive 
total 40 
-rw------- 1 root root  879 Sep 28 14:51 vg01_00000-1599738857.vg 
-rw------- 1 root root  890 Sep 28 14:56 vg01_00001-1325802091.vg 
-rw------- 1 root root 1285 Sep 28 15:13 vg01_00002-1209567998.vg 
-rw------- 1 root root 1285 Sep 28 15:13 vg01_00003-2132380656.vg 
-rw------- 1 root root 1285 Sep 28 15:21 vg01_00004-1884729932.vg 
-rw------- 1 root root 1285 Sep 28 15:21 vg01_00005-762502250.vg 
-rw------- 1 root root 1285 Sep 28 16:00 vg01_00006-354891781.vg 
-rw------- 1 root root 1285 Sep 28 16:00 vg01_00007-1771763076.vg 
-rw------- 1 root root 1285 Sep 28 16:54 vg01_00008-1631127841.vg 
-rw------- 1 root root 1285 Sep 28 16:54 vg01_00009-1527369658.vg

二、通过vgcfgrestore结合元数据日志恢复vg

通过vgcfgrestore恢复vg下的lv

[root@centos7 archive]# vgcfgrestore -f /etc/lvm/archive/vg01_00009-1527369658.vg vg01 
  Restored volume group vg01 
[root@centos7 archive]# vgs 
  VG   #PV #LV #SN Attr   VSize  VFree   
  vg01   1   1   0 wz--n- <5.00g 508.00m 
[root@centos7 archive]# lvs 
  LV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert 
  lv01 vg01 -wi------- 4.50g                                                     
[root@centos7 archive]#

PV恢复

一、故障详情:在LVM环境中对PV进行parted mklabel,会破坏第二个扇区所记录的labelone、pv-uuid信息,导致PV处于loss状态。

二、模拟故障:
创建PV,记录原Pv信息:

[root@centos7 ~]# pvcreate /dev/vdb 
WARNING: dos signature detected on /dev/vdb at offset 510. Wipe it? [y/n]: y 
  Wiping dos signature on /dev/vdb. 
  Physical volume "/dev/vdb" successfully created 
[root@centos7 ~]# parted /dev/vdb u s p 
Error: /dev/vdb: unrecognised disk label 
Model: Virtio Block Device (virtblk)                                       
Disk /dev/vdb: 10485760s 
Sector size (logical/physical): 512B/512B 
Partition Table: unknown 
Disk Flags: 
[root@centos7 ~]# wipefs /dev/vdb 
offset               type 
---------------------------------------------------------------- 
0x218                LVM2_member   [raid] 
                     UUID:  sDXsbb-zyG4-9Jwg-whVY-zjse-vNS8-tldfT8 




[root@centos7 ~]# wipefs -a /dev/vdb 
/dev/vdb: 8 bytes were erased at offset 0x00000218 (LVM2_member): 4c 56 4d 32 20 30 30 31 
[root@centos7 ~]# pvdisplay 
  --- Physical volume --- 
  PV Name               /dev/vdb 
  VG Name               vg01 
  PV Size               5.00 GiB / not usable 4.00 MiB 
  Allocatable           yes 
  PE Size               4.00 MiB 
  Total PE              1279 
  Free PE               1279 
  Allocated PE          0 
  PV UUID               vrtyiU-hnNe-kGwX-Pij3-LxUK-IgiW-ifmFge 


[root@centos7 ~]# dd if=/dev/vdb bs=512 count=2|hexdump -C 
2+0 records in 
2+0 records out 
1024 bytes (1.0 kB) copied, 0.00969323 s, 106 kB/s 
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| 
* 
00000200  4c 41 42 45 4c 4f 4e 45  01 00 00 00 00 00 00 00  |LABELONE........| 
00000210  92 44 a7 57 20 00 00 00  4c 56 4d 32 20 30 30 31  |.D.W ...LVM2 001| 
00000220  76 72 74 79 69 55 68 6e  4e 65 6b 47 77 58 50 69  |vrtyiUhnNekGwXPi| 
00000230  6a 33 4c 78 55 4b 49 67  69 57 69 66 6d 46 67 65  |j3LxUKIgiWifmFge| 
00000240  00 00 00 40 01 00 00 00  00 00 10 00 00 00 00 00  |...@............| 
00000250  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| 
00000260  00 00 00 00 00 00 00 00  00 10 00 00 00 00 00 00  |................| 
00000270  00 f0 0f 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| 
00000280  00 00 00 00 00 00 00 00  02 00 00 00 01 00 00 00  |................| 
00000290  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| 
* 
00000400

模拟误操作:

[root@centos7 ~]# parted /dev/vdb 
GNU Parted 3.1 
Using /dev/vdb 
Welcome to GNU Parted! Type 'help' to view a list of commands. 
(parted) p                                                                 
Error: /dev/vdb: unrecognised disk label 
Model: Virtio Block Device (virtblk)                                       
Disk /dev/vdb: 5369MB 
Sector size (logical/physical): 512B/512B 
Partition Table: unknown 
Disk Flags: 
(parted) mklabel gpt                                                       
(parted) p                                                                 
Model: Virtio Block Device (virtblk) 
Disk /dev/vdb: 5369MB 
Sector size (logical/physical): 512B/512B 
Partition Table: gpt 
Disk Flags: 

Number  Start  End  Size  File system  Name  Flags 

(parted) q                                                                 
Information: You may need to update /etc/fstab.

查看被破坏后的磁盘头记录:

[root@centos7 ~]# dd if=/dev/vdb bs=512 count=2|hexdump -C 
2+0 records in 
2+0 records out 
1024 bytes (1.0 kB) copied, 0.0103813 s, 98.6 kB/s 
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| 
* 
000001c0  01 00 ee fe ff ff 01 00  00 00 ff ff 9f 00 00 00  |................| 
000001d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| 
* 
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.| 
00000200  45 46 49 20 50 41 52 54  00 00 01 00 5c 00 00 00  |EFI PART....\...| 
00000210  22 fb 34 f8 00 00 00 00  01 00 00 00 00 00 00 00  |".4.............| 
00000220  ff ff 9f 00 00 00 00 00  22 00 00 00 00 00 00 00  |........".......| 
00000230  de ff 9f 00 00 00 00 00  fc 86 1e b3 01 c2 6c 4a  |..............lJ| 
00000240  a2 38 60 20 22 3c d2 c6  02 00 00 00 00 00 00 00  |.8` "<..........| 
00000250  80 00 00 00 80 00 00 00  86 d2 54 ab 00 00 00 00  |..........T.....| 
00000260  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| 
* 
00000400

pv、vg、lv都处于丢失状态

[root@centos7 ~]# lvs 
[root@centos7 ~]# pvs 
[root@centos7 ~]# vgs 
[root@centos7 ~]#

三、pvcreate 恢复PV:

因磁盘第二扇区lvm信息丢失,直接用pvcreate恢复pv会报错,如下:

四、正确处理思路:

  1. 做好lvm原数据备份。(步骤2、3可尝试用dd if=/zero of=/dev/vdb bs=512 count=2 iflag=direct代替,有一定几率能成功修复,反之用2、3步骤。)
  2. 创建一个PV,指定原pv-uuid进行创建,在新的pv磁盘第二扇区会写入相关信息.
  3. dd前1024字节到原物理盘(通过新建的pv恢复原磁盘头lvm信息)
  4. pvcreate、vgcfgrestore恢复pv、vg、lv,详细步骤如下:

1.做好lvm元数据备份:cp -r /etc/lvm/ /etc/lvm.bak

2.新建PV并指定所需的pv-uuid

用一个新的块设备创建vg构造第二扇区信息:

[root@centos7 backup]# pvcreate -ff --uuid vrtyiU-hnNe-kGwX-Pij3-LxUK-IgiW-ifmFge --restorefile /etc/lvm//backup/vg01 /dev/vdc 
  Couldn't find device with uuid vrtyiU-hnNe-kGwX-Pij3-LxUK-IgiW-ifmFge. 
  Physical volume "/dev/vdc" successfully created. 
[root@centos7 backup]# dd if=/dev/vdc bs=512 count=2|hexdump -C 
2+0 records in 
2+0 records out 
1024 bytes (1.0 kB) copied, 0.0136249 s, 75.2 kB/s 
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| 
* 
00000200  4c 41 42 45 4c 4f 4e 45  01 00 00 00 00 00 00 00  |LABELONE........| 
00000210  7c b1 ee 56 20 00 00 00  4c 56 4d 32 20 30 30 31  ||..V ...LVM2 001| 
00000220  76 72 74 79 69 55 68 6e  4e 65 6b 47 77 58 50 69  |vrtyiUhnNekGwXPi| 
00000230  6a 33 4c 78 55 4b 49 67  69 57 69 66 6d 46 67 65  |j3LxUKIgiWifmFge| 
00000240  00 00 00 40 01 00 00 00  00 00 10 00 00 00 00 00  |...@............| 
00000250  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| 
00000260  00 00 00 00 00 00 00 00  00 10 00 00 00 00 00 00  |................| 
00000270  00 f0 0f 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| 
00000280  00 00 00 00 00 00 00 00  02 00 00 00 00 00 00 00  |................| 
00000290  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| 
* 
00000400 
[root@centos7 backup]#

3.把构造的信息输出到一个文件,检查无误后覆盖原磁盘丢失的信息

[root@centos7 backup]# dd if=/dev/vdc of=/opt/new_head_1024 bs=512 count=2 
2+0 records in 
2+0 records out 
1024 bytes (1.0 kB) copied, 0.0121184 s, 84.5 kB/s 
[root@centos7 backup]# hexdump -C /opt/new_head_1024 
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| 
* 
00000200  4c 41 42 45 4c 4f 4e 45  01 00 00 00 00 00 00 00  |LABELONE........| 
00000210  7c b1 ee 56 20 00 00 00  4c 56 4d 32 20 30 30 31  ||..V ...LVM2 001| 
00000220  76 72 74 79 69 55 68 6e  4e 65 6b 47 77 58 50 69  |vrtyiUhnNekGwXPi| 
00000230  6a 33 4c 78 55 4b 49 67  69 57 69 66 6d 46 67 65  |j3LxUKIgiWifmFge| 
00000240  00 00 00 40 01 00 00 00  00 00 10 00 00 00 00 00  |...@............| 
00000250  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| 
00000260  00 00 00 00 00 00 00 00  00 10 00 00 00 00 00 00  |................| 
00000270  00 f0 0f 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| 
00000280  00 00 00 00 00 00 00 00  02 00 00 00 00 00 00 00  |................| 
00000290  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| 
* 
00000400 
[root@centos7 backup]# dd if=/opt/new_head_1024 of=/dev/vdb bs=512 count=2 iflag=direct 
2+0 records in 
2+0 records out 
1024 bytes (1.0 kB) copied, 0.0394598 s, 26.0 kB/s 
[root@centos7 backup]#

验证原磁盘前两个扇区信息是否恢复

[root@centos7 backup]# dd if=/dev/vdb bs=512 count=2|hexdump -C 
2+0 records in 
2+0 records out 
1024 bytes (1.0 kB) copied, 0.00719154 s, 142 kB/s 
00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| 
* 
00000200  4c 41 42 45 4c 4f 4e 45  01 00 00 00 00 00 00 00  |LABELONE........| 
00000210  7c b1 ee 56 20 00 00 00  4c 56 4d 32 20 30 30 31  ||..V ...LVM2 001| 
00000220  76 72 74 79 69 55 68 6e  4e 65 6b 47 77 58 50 69  |vrtyiUhnNekGwXPi| 
00000230  6a 33 4c 78 55 4b 49 67  69 57 69 66 6d 46 67 65  |j3LxUKIgiWifmFge| 
00000240  00 00 00 40 01 00 00 00  00 00 10 00 00 00 00 00  |...@............| 
00000250  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| 
00000260  00 00 00 00 00 00 00 00  00 10 00 00 00 00 00 00  |................| 
00000270  00 f0 0f 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| 
00000280  00 00 00 00 00 00 00 00  02 00 00 00 00 00 00 00  |................| 
00000290  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| 
* 
00000400 
[root@centos7 backup]#

确定原磁盘信息恢复后,删除新建的pv,避免pv-uuid冲突。

恢复pv前要保证该节点上无客户端使用相关lv(SAN存储可选择其它空闲节点或者拷贝元数据文件到一台虚拟机上执行,本地存储需要取消所有lv挂载),否则会出现以下报错

4.然后进行pvcreate指定uuid和vg原数据进行恢复pv、vg和lv

[root@centos7 backup]# pvs 
  PV         VG Fmt  Attr PSize PFree 
  /dev/vdc      lvm2 ---  5.00g 5.00g 
[root@centos7 backup]# pvremove /dev/vdc 
  Labels on physical volume "/dev/vdc" successfully wiped. 
[root@centos7 backup]# pvs 
[root@centos7 backup]# pvcreate -ff --uuid vrtyiU-hnNe-kGwX-Pij3-LxUK-IgiW-ifmFge --restorefile /etc/lvm//ba^Cup/vg01 /dev/vdb 
  Couldn't find device with uuid vrtyiU-hnNe-kGwX-Pij3-LxUK-IgiW-ifmFge. 
  Physical volume "/dev/vdb" successfully created. 
[root@centos7 backup]# pvs 
  PV         VG Fmt  Attr PSize PFree 
  /dev/vdb      lvm2 ---  5.00g 5.00g 
[root@centos7 backup]# vgs 
[root@centos7 backup]#  
[root@centos7 backup]# vgcfgrestore -f /etc/lvm/backup/vg01 vg01 
  Restored volume group vg01 
[root@centos7 backup]# vgs 
  VG   #PV #LV #SN Attr   VSize  VFree   
  vg01   1   1   0 wz--n- <5.00g 508.00m 
[root@centos7 backup]# lvs 
  LV   VG   Attr       LSize Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert 
  lv01 vg01 -wi------- 4.50g

至此,pv已经恢复正常。


这条帮助是否解决了您的问题? 已解决 未解决

提交成功!非常感谢您的反馈,我们会继续努力做到更好! 很抱歉未能解决您的疑问。我们已收到您的反馈意见,同时会及时作出反馈处理!