LVM 故障模拟与恢复命令大全
(涵盖物理卷、卷组、逻辑卷全场景)
一、物理卷(PV)故障模拟
-
模拟磁盘I/O错误
# 触发设备I/O错误 echo 1 > /sys/block/sdb/device/delete
效果:系统无法访问磁盘,LVM 报告 PV 丢失
-
软移除磁盘
pvchange -x n /dev/sdb # 禁止分配新空间
效果:PV 状态变为不可用
-
强制标记PV为丢失
pvdisplay --partial --verbose # 查看PV UUID pvchange --uuid <原UUID> --newuuid 00000000-0000-0000-0000-000000000000 /dev/sdb
效果:模拟元数据损坏
二、卷组(VG)故障模拟
-
破坏VG元数据
dd if=/dev/zero of=/dev/sdb bs=512 count=1 # 覆盖LVM元数据
效果:
vgdisplay
显示 “Cannot process volume group” -
模拟VG不一致
vgchange -an vg_test # 停用卷组 vgck --dump /etc/lvm/backup/vg_test.vg > corrupted.vg sed -i 's/consistent="1"/consistent="0"/' corrupted.vg cp corrupted.vg /etc/lvm/backup/vg_test.vg
效果:激活卷组时报错 “Inconsistent metadata”
三、逻辑卷(LV)故障模拟
-
注入文件系统错误
# 对XFS文件系统 xfs_db -x -c "blocktrash -n 100" /dev/vg_test/lv_data # 对ext4文件系统 debugfs -w /dev/vg_test/lv_data -R "ssv last_error_time 1"
效果:
fsck
检测到文件系统损坏 -
模拟LV数据损坏
# 随机破坏前1MB数据 dd if=/dev/urandom of=/dev/vg_test/lv_data bs=1M count=1 conv=notrunc
效果:挂载后出现文件读取错误
四、高级故障场景
-
模拟RAID/LVM混合故障
mdadm --fail /dev/md0 /dev/sdb1 # 软故障RAID成员盘 pvchange -x n /dev/md0 # 禁用PV分配
组合效果:多层存储故障
-
内核级故障注入
# 需要内核配置CONFIG_FAULT_INJECTION echo 1 > /sys/kernel/debug/fail_make_request/probability echo 100 > /sys/kernel/debug/fail_make_request/times
效果:随机磁盘I/O失败
五、恢复命令大全
场景 | 恢复命令 |
---|---|
PV丢失 | vgreduce --removemissing --force vg_test |
VG元数据损坏 | vgcfgrestore -f /etc/lvm/archive/vg_test_00001.vg vg_test |
LV文件系统损坏 | xfs_repair /dev/vg_test/lv_data 或 fsck.ext4 -y /dev/vg_test/lv_data |
激活部分丢失的VG | vgchange -ay --partial vg_test |
重建PV元数据 | pvcreate --restorefile /etc/lvm/backup/vg_test.vg /dev/sdb |
修复LVM缓存 | lvconvert --repair vg_test/lv_cache |
六、预防性命令
# 元数据备份
vgcfgbackup vg_test
# 启用LVM监控
lvmd --foreground --monitor &
# 定期一致性检查
lvconvert --checkconsistency vg_test/lv_data
# 创建快照用于安全测试
lvcreate -s -n lv_snapshot -L 1G /dev/vg_test/lv_data
操作原则:
- 生产环境操作前务必备份:
vgcfgbackup
+ 文件系统备份- 优先使用
--test
参数模拟命令效果- 复杂故障使用
dmsetup create
创建隔离测试环境- 关键操作记录审计日志:
lvm 2>&1 | tee /var/log/lvm_operation.log
此大全覆盖了LVM全栈故障模拟场景,建议在隔离环境中验证后应用于生产环境。