13.13. LVM RAID 故障排除
您可以对 LVM RAID 设备中的多个问题进行故障排除,修正数据错误、恢复设备或者替换失败的设备。
13.13.1. 检查 RAID 逻辑卷中数据的一致性 复制链接链接已复制到粘贴板!
LVM 提供对 RAID 逻辑卷的清理支持。RAID 清理是读取阵列中的所有数据和奇偶校验块的过程,并检查它们是否是分配的。lvchange --syncaction repair 命令对阵列启动后台同步操作。
流程
可选:通过设置以下选项之一来控制 RAID 逻辑卷初始化的速度:
-
--maxrecoveryrate Rate[bBsSkKmMgG]为 RAID 逻辑卷设置最大恢复率,使其不会驱逐正常的 I/O 操作。 --minrecoveryrate Rate[bBsSkKmMgG]设置 RAID 逻辑卷的最小恢复率,以确保 sync 操作的 I/O 达到最小吞吐量,即使存在大量标准 I/O 时# lvchange --maxrecoveryrate 4K my_vg/my_lv Logical volume _my_vg/my_lv_changed.使用恢复率值替换 4K,它是阵列中每个设备的每秒的量。如果没有后缀,选项会假定为 kiB/每秒/每个设备。
# lvchange --syncaction repair my_vg/my_lv当您执行 RAID 清理操作时,
sync操作所需的后台 I/O 可能会排挤 LVM 设备的其它 I/O,如对卷组元数据的更新。这可能导致其它 LVM 操作速度下降。注意您还可以在创建 RAID 设备时使用这些最大和最小 I/O 速率。例如,
lvcreate --type raid10 -i 2 -m 1 -L 10G --maxrecoveryrate 128 -n my_lv my_vg创建一个双向 RAID10 阵列 my_lv,它在卷组 my_vg 中,有大小为 10G,最大恢复率为 128 kiB/sec/device 的 3 个条带。
-
显示阵列中未修复的差异的数量,没有修复它们:
# lvchange --syncaction check my_vg/my_lv此命令对阵列启动后台同步操作。
-
可选:查看
var/log/syslog文件中的内核消息。 修正阵列中的差异:
# lvchange --syncaction repair my_vg/my_lv这个命令修复或者替换 RAID 逻辑卷中失败的设备。您可以在执行此命令后,在
var/log/syslog文件查看内核消息。
验证
显示有关清理操作的信息:
# lvs -o +raid_sync_action,raid_mismatch_count my_vg/my_lv LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert SyncAction Mismatches my_lv my_vg rwi-a-r--- 500.00m 100.00 idle 0
13.13.2. 在逻辑卷中替换失败的 RAID 设备 复制链接链接已复制到粘贴板!
RAID 与传统的 LVM 镜像不同。如果是 LVM 镜像,请删除失败的设备。否则,当 RAID 阵列继续使用失败的设备运行时,镜像逻辑卷将挂起。对于 RAID1 以外的 RAID 级别,删除设备意味着转换到较低 RAID 级别,例如从 RAID6 转换到 RAID5,或者从 RAID4 或 RAID5 转换到 RAID0。
您可以使用 lvconvert 命令的 --repair 参数替换 RAID 逻辑卷中作为物理卷的故障设备,而不是删除失败的设备并分配一个替换品。
先决条件
卷组包含一个物理卷,它有足够的可用容量替换失败的设备。
如果卷组中没有有足够可用扩展的物理卷,请使用
vgextend程序添加一个新的、足够大的物理卷。
流程
查看 RAID 逻辑卷:
# lvs --all --options name,copy_percent,devices my_vg LV Cpy%Sync Devices my_lv 100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0) [my_lv_rimage_0] /dev/sde1(1) [my_lv_rimage_1] /dev/sdc1(1) [my_lv_rimage_2] /dev/sdd1(1) [my_lv_rmeta_0] /dev/sde1(0) [my_lv_rmeta_1] /dev/sdc1(0) [my_lv_rmeta_2] /dev/sdd1(0)在 /dev/sdc 设备失败后查看 RAID 逻辑卷:
# lvs --all --options name,copy_percent,devices my_vg /dev/sdc: open failed: No such device or address Couldn't find device with uuid A4kRl2-vIzA-uyCb-cci7-bOod-H5tX-IzH4Ee. WARNING: Couldn't find all devices for LV my_vg/my_lv_rimage_1 while checking used and assumed devices. WARNING: Couldn't find all devices for LV my_vg/my_lv_rmeta_1 while checking used and assumed devices. LV Cpy%Sync Devices my_lv 100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0) [my_lv_rimage_0] /dev/sde1(1) [my_lv_rimage_1] [unknown](1) [my_lv_rimage_2] /dev/sdd1(1) [my_lv_rmeta_0] /dev/sde1(0) [my_lv_rmeta_1] [unknown](0) [my_lv_rmeta_2] /dev/sdd1(0)替换失败的设备:
# lvconvert --repair my_vg/my_lv /dev/sdc: open failed: No such device or address Couldn't find device with uuid A4kRl2-vIzA-uyCb-cci7-bOod-H5tX-IzH4Ee. WARNING: Couldn't find all devices for LV my_vg/my_lv_rimage_1 while checking used and assumed devices. WARNING: Couldn't find all devices for LV my_vg/my_lv_rmeta_1 while checking used and assumed devices. Attempt to replace failed RAID images (requires full device resync)? [y/n]: y Faulty devices in my_vg/my_lv successfully replaced.可选:手动指定替换失败设备的物理卷:
# lvconvert --repair my_vg/my_lv replacement_pv使用替换检查逻辑卷:
# lvs --all --options name,copy_percent,devices my_vg /dev/sdc: open failed: No such device or address /dev/sdc1: open failed: No such device or address Couldn't find device with uuid A4kRl2-vIzA-uyCb-cci7-bOod-H5tX-IzH4Ee. LV Cpy%Sync Devices my_lv 43.79 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0) [my_lv_rimage_0] /dev/sde1(1) [my_lv_rimage_1] /dev/sdb1(1) [my_lv_rimage_2] /dev/sdd1(1) [my_lv_rmeta_0] /dev/sde1(0) [my_lv_rmeta_1] /dev/sdb1(0) [my_lv_rmeta_2] /dev/sdd1(0)在您从卷组中删除失败的设备前,LVM 工具仍然指示 LVM 无法找到失败的设备。
从卷组中删除失败的设备:
# vgreduce --removemissing my_vg
验证
删除失败的设备后查看可用的物理卷:
# pvscan PV /dev/sde1 VG rhel_virt-506 lvm2 [<7.00 GiB / 0 free] PV /dev/sdb1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free] PV /dev/sdd1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free] PV /dev/sdd1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free]替换失败的设备后检查逻辑卷:
# lvs --all --options name,copy_percent,devices my_vg my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0) [my_lv_rimage_0] /dev/sde1(1) [my_lv_rimage_1] /dev/sdb1(1) [my_lv_rimage_2] /dev/sdd1(1) [my_lv_rmeta_0] /dev/sde1(0) [my_lv_rmeta_1] /dev/sdb1(0) [my_lv_rmeta_2] /dev/sdd1(0)