本文介绍了如何使用LVM自带命令进行灾难恢复。
操作场景
LVM(Logical Volume Manager)是逻辑卷管理的简写。在应对由人为因素导致的灾难时,LVM提供了一套完整的数据备份和配置信息备份的工具集。这些工具能够有效地用于创建备份,以便在发生物理卷、逻辑卷或卷组损坏的情况下,通过备份来恢复数据,最大限度地减少因灾难造成的数据丢失。
名词解释:
PV:物理卷(Physical Volume,简称PV)是LVM的基本存储单元,它可以是硬盘分区、整个硬盘或者回环文件;
VG:卷组(Volume Group,简称VG)是一个或多个物理卷的集合,它用于组合多个物理卷的存储空间,以形成一个连续的可用存储空间;
LV:逻辑卷(Logical Volume,简称LV)是建立在卷组之上的逻辑存储单元,它可以被格式化并挂载到文件系统中。
前提条件
本次教程示例步骤使用以下资源版本:
- 操作系统:BC-Linux for Euler 22.10 64位
- LVM:2.03.14-4.oe2203.x86_64
操作步骤
教程环境设置
本次教程使用LVM对三块云硬盘sdb(15G)、sdc(10G)和sdd(10G)进行操作。逻辑卷PV为/dev/sdb、/dev/sdc和/dev/sdd,卷组VG为test_vg(35G),逻辑卷LV为test_lv(30G),文件系统格式为ext4,挂载目录为/test。
在/test目录下使用dd命令随机生成3个二进制文件,记录其md5值,用于验证灾难恢复后数据是否有损坏或丢失。
案例1:LVM标签被删除,但分区表正常
使用dd 命令模拟sdb对应的lvm2的标签被擦除,但保留分区表的现象。
可以观察到,标识为sdb的物理卷已呈现为未知设备状态。但因为分区表未遭受损坏,导致文件系统仍可挂载并访问。
修复操作步骤如下:
1. 备份位于/test目录下的文件。
2. 从备份文件中获取物理卷的UUID,备份文件的路径为:/etc/lvm/backup/test_vg,从文件的physical_volumes中找到sdb对应的UUID。
3. 在本案例中,g9FQVj-S1jF-vatm-ffVa-KHQ1-OVXk-6rfTdm是物理卷sdb的UUID,使用它来恢复PV。
执行以下命令,恢复物理卷:
pvcreate -ff --uuid <物理卷uuid> --restorefile <备份文件位置> <物理卷位置>
恢复PV之前需要先取消挂载/test目录,并停用卷组,否则会出现Can't open /dev/sdb exclusively. Mounted filesystem? 的情况。
执行以下命令,停用卷组:
vgchange -a n <卷组名称>
4. 物理卷sdb成功被创建,并使用pvs命令查看。
5. 执行以下命令,恢复卷组。
vgcfgrestore -f <备份文件位置> <卷组名称>
6. 执行以下命令,激活卷组。
vgchange -ay <卷组名称>
7. 可见PV已恢复,VG和LV也恢复正常。
8. 使用md5sum验证数据,没有丢失或者损坏。
案例2:LVM标签、元数据和分区表都被删除
使用dd 命令清除sdd前400个扇区,模拟sdd对应的lvm2的标签、元数据和分区表被删除的现象。
此时sdd对应的PV已经变成了unknown未知设备,/test目录下的文件也都消失了。
修复操作步骤如下:
1. 在控制台新订购一块云硬盘,通过新的硬盘替换掉故障硬盘sdd。
2. 获取LVM备份文件/etc/lvm/backup/test_vg中sdd的UUID,通过pvcreate命令将sdd中的信息恢复到新硬盘sde中。在本案例中,sdd的UUID为PXl3vN-LJsy-mBbX-72ZV-Jyv6-0z4w-PTDGkj。执行以下命令,恢复物理卷。
pvcreate --restorefile <备份文件位置> --uuid <故障物理卷uuid> <新建硬盘位置>
3. 如下图所示,可见sde已经成功替换掉了sdd。
4. 恢复并激活VG。
5. 可见PV已恢复,VG和LV也恢复正常。
6. 使用md5sum验证数据,没有丢失或者损坏。