一次逻辑卷恢复过程记录

一、背景

1、Long long ago,制作了一个CentOS7.6的虚机模板,该模板在创建分区的时候,选择了自动分区。系统自动将第一个分区vda1挂载了/boot目录,将第二个分区vda2使用了逻辑卷管理。系统创建的卷组名为“cl”,创建了两个逻辑卷,一个挂载根目录,一个作为SWAP分区,磁盘情况如下:
# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda           252:0    0   40G  0 disk
├─vda1        252:1    0    1G  0 part /boot
└─vda2        252:2    0   39G  0 part
  ├─cl-root   253:0    0 35.1G  0 lvm  /
  └─cl-swap   253:1    0  3.9G  0 lvm  [SWAP]
2、使用该虚机模板创建了三台虚机给某部门使用。某天,重启三台虚机后,两台虚机无法正常引导进入系统,有告警提示:/dev/cl/boot和/dev/cl/swap不存在。

3、 检查发现:这两台虚机只能识别到vda2分区,vda2分区上的逻辑卷却无法识别,另外那一台正常的虚机上LVM能够正常识别并访问。随即,将两台故障虚机关机,将其中一台的磁盘文件拷贝了一份,挂载到另外一个ubuntu16.04的虚机上做恢复测试。ubuntu将挂载的盘识别为vdc,识别的磁盘情况如下:
# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vdc             253:32   0   40G  0 disk
├─vdc1          253:33   0    1G  0 part 
└─vdc2          253:34   0   39G  0 part

二、恢复过程记录

棘手的是,该逻辑卷挂载了根目录,现在磁盘上的逻辑卷header信息丢失,导致根目录没法访问,因此系统自动备份的逻辑卷配置信息文件/etc/lvm/backup/cl文件也无法访问了。做了一些尝试,最终恢复了磁盘上的逻辑卷信息,也找到了原因。思路与过程如下:
因为三台虚机使用同一个模板部署,且未对分区做过调整,因此考虑使用正常的那个虚机的/etc/lvm/backup/cl文件尝试重建逻辑卷。

1、由于当前的vdc2类型不是物理卷(pv),因此首先将vdc2创建为物理卷: pvcreate /dev/vdc2
2、创建物理卷后,vdc2的uuid会改变,查看vdc2的新uuid:

# blkid
/dev/vdc2: UUID="0U1NpX-jkXy-WX5j-64UB-Fu2h-F7OV-eYwQPc" TYPE="LVM2_member" PARTUUID="000a4ff0-02"

3、从正常虚机中复制出/etc/lvm/backup/cl文件内容,在ubuntu系统重建该文件(相同路径和文件名)。
4、修改ubuntu上的/etc/lvm/backup/cl文件,将pv0项目中的id改为新的uuid,将device从"/dev/vda2"(原系统的分区名)改为"/dev/vdc2"(ubuntu中挂载的分区名)
5、使用vgcfgrestore命令恢复逻辑卷:vgcfgrestore命令的作用是可以从一个文件备份中恢复卷组的元数据。默认会读取/etc/lvm/backup/cl文件,也也可以用-f参数指定文件:

# vgcfgrestore cl
  Restored volume group cl

6、此时可以使用 vgscan、lvscan命令查看到cl卷组和root、swap两个lv,但没有激活,没法挂载到目录里:

# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "cl" using metadata type lvm2
# lvscan
  inactive          '/dev/cl/swap' [3.88 GiB] inherit
  inactive          '/dev/cl/root' [35.12 GiB] inherit

7、使用vgchange命令激活cl卷组,lvm恢复成功,可以正常识别、挂载:

# vgchange -ay cl
  2 logical volume(s) in volume group "cl" now active

# lsblk
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vdb             253:16   0   40G  0 disk
├─vdc1          253:17   0    1G  0 part
└─vdc2          253:18   0   39G  0 part
  ├─cl-swap     252:1    0  3.9G  0 lvm
  └─cl-root     252:2    0 35.1G  0 lvm

8、重新将恢复后的磁盘文件挂载回原CentOS7.6虚机,系统能够正常引导。

检查系统历史命令发现,原来有运维人员误操作,使用sgdisk命令误将/dev/vda2分区的头部信息删除了,导致逻辑卷的header信息丢失。因为系统一直没有重启过,所以该问题一直没有暴露。

三、备份(待完成)

通过这次事件,认识到对分区信息和逻辑卷信息做自动备份是很重要的,并且,备份文件应该存储在不同的分区甚至是不同磁盘、不同服务器。需要备份的信息主要为

1、分区信息

  lsblk
  df -T
  fdisk -l
  parted -l

备份MBR分区表
# dd if=/dev/sda of=sda.mbr bs=512 count=1

备份GPT分区表
# dd if=/dev/sda of=sda.gpt bs=512 count=34

2、逻辑卷信息的备份:

# tar -zcf lvmbak.tgz /etc/lvm/

# vgcfgbackup -f lvmcfg_%s.txt
  Volume group "VGdata" successfully backed up.
  Volume group "cl" successfully backed up.

# ll -h
-rw-r--r--. 1 root root  28K 8月   5 16:07 lvmbak.tgz
-rw-------. 1 root root 1.8K 8月   5 15:38 lvmcfg_cl.txt
-rw-------. 1 root root 1.4K 8月   5 15:38 lvmcfg_VGdata.txt
posted @ 2020-08-05 16:49  会游泳的鱼·bytefish  阅读(553)  评论(0编辑  收藏  举报