LVM恢复技术案例一

LVM恢复技术案例一

1.1 背景

Lvm常见的故障主要是pv出现异常,有以下几种情况

  1. 一个是pv所在的磁盘发生了lvm的元数据损坏
  2. 一个是系统无法识别到pv所在的磁盘
  3. 一个是系统异常,断电等导致重启后盘符发生变化,也就是系统识别的磁盘uuid发生变化,但是wwid还是可以对应,所以要利用wwid对应磁盘
  4. 一种是磁盘物理坏,且系统可以识别,但是pv是无法使用

 

在这里演示第一种情况,pv所在的磁盘发生了元数据损坏。可能显示uknow或者无法找到pv。

1.2 设置测试环境

 

 

 

 

 

1.2.1 创建物理卷和卷组

pvcreate /dev/sdb

vgcreate test_vg /dev/sdb

 

 

 

 

 

 

1.2.2 创建逻辑卷并格式化

lvcreate -L 1G -n test_lv1 test_vg

在逻辑卷上创建文件系统

mkfs.ext4 /dev/mapper/test_vg-test_lv1

vgs -o+devices

lvs -o+devices

 

 

 

 

 

 

 

 

 

 

1.2.3 添加测试数据

mkdir /test

mount /dev/mapper/test_vg-test_lv1 /test/

touch /test/file

md5sum /test/file  #查看md5值

umount /test/

 

 

 

1.2.4 在Linux中手动删除LVM元数据

在Linux中手动删除LVM元数据

要在Linux中手动删除LVM元数据,您可以使用各种工具,例如wipefs, dd等等。

wipefs可以从指定的设备中删除文件系统、raid或分区表签名(魔术字符串),使签名对libblkid不可见。

wipefs不会擦除文件系统本身,也不会擦除设备中的任何其他数据.

使用wipefs从中删除LVM元数据/dev/sdb设备。因为有问题的设备/dev/sdb正被卷组使用,我们必须使用-f强制清除LVM元数据

wipefs --all --backup -f /dev/sdb

/dev/sdb: 8 bytes were erased at offset 0x00000218 (LVM2_member): 4c 56 4d 32 20 30 30 31

--backup以便在删除LVM元数据之前,wipefs将创建备份包含LVM元数据的ext4签名位于执行命令的用户的主文件夹下。

因为我们使用根用户,我们的LVM元数据备份存储在root用户的主文件夹下。

ls -l /root/wipefs-sdb-0x00000218.bak

为了从备份中恢复存储在文件系统签名中的lvm元数据,我们可以使用dd if=~/wipefs-sdb-0x00000218.bak of=/dev/sdb seek=$((0x00000218)) bs=1 conv=notrunc

 

接下来可以验证所有逻辑卷、卷组和物理卷部分/dev/sdb在Linux服务器中丢失

 

 

 

 

 

1.2.5 准备修复

步骤1:列出在Linux中恢复LVM元数据的备份文件

LVM元数据备份和归档是自动创建的每当卷组或逻辑卷的配置发生更改时,除非在中禁用了此功能lvm.conf文件。

默认情况下,元数据备份存储在/etc/lvm/backup文件和元数据档案存储在/etc/lvm/archive文件。

元数据存档在中存储多长时间/etc/lvm/archive文件被保留以及保留多少存档文件可以在lvm.conf文件配置。

每日系统备份应包括的内容/etc/lvm备份中的目录。

可以手动将LVM元数据备份到/etc/lvm/backup向提交文件vgcfgbackup命令。

可以使用恢复LVM元数据vgcfgrestore命令。

 

要列出LVM元数据的可用备份,请使用vgcfgrestore --list或者直接到/etc/lvm/archive查看

 

 

 

 

步骤2:在Linux中恢复PV(物理卷)

要恢复PV,需要使用相同的UUID创建新的PV否则在接下来的步骤中恢复VG和恢复LVM2分区将会失败。

可以从备份文件中获得物理卷的UUID   在/etc/lvm/backup/test_vg

下面是备份文件中physical_volumes的示例内容。如果有多个物理卷,那么需要搜索丢失的PV的UUID

恢复命令,注意可能会报错说磁盘被挂载,但实际未挂载,我们可以重启主机解决。

使用--test验证操作的模式。随着--test命令不会更新LVM元数据。这是通过禁用所有元数据写入,但仍然将成功返回给调用函数来实现的。

pvcreate --test --uuid "iKuMRs-39OD-JiCX-p4KT-bSXx-9Dka-jde7wJ"  --restorefile /etc/lvm/backup/test_vg /dev/sdb

 

 

 

现在就可以了,去掉test,恢复

 

 

 

步骤3:还原VG以恢复LVM2分区

恢复PV后,下一步是恢复VG,这将进一步恢复LVM2分区,还将恢复LVM元数据。

类似pvcreate,我们会使用以下命令执行vgcfgrestore--test方式检查恢复VC是成功还是失败。

此命令不会更新任何LVM元数据

vgcfgrestore --test -f  /etc/lvm/backup/test_vg test_vg

 

 

 

无问题直接恢复、去掉test,且激活卷组

 

 

 

步骤4:验证LVM2分区恢复后的数据丢失

重新挂载后检查md5,#若是挂载失败,尝试修复文件系统再次尝试。

 

 

 

 

 

到此结束恢复。

posted @ 2022-10-28 09:55  头发重要  阅读(2580)  评论(0)    收藏  举报