先把当时的情况摆出来。两块盘组成的卷组上跑着业务数据,其中一块物理盘报 I/O error,卷组里部分逻辑卷直接读不了,状态里显示有成员缺失。
把日志和配置对完,能解释这个现象的基本就这几处。线性映射横跨两块盘,坏盘上的那段数据不可读。还有一种是没做镜像或者 RAID,LVM 本身并不提供冗余。
少数情况下是物理卷被标记缺失后,卷组进入部分可用状态。
第一件事是确认卷组和物理卷状态
vgs -o vg_name,pv_count,lv_count && pvs
接着检查残留的元数据
pvck /dev/vdb
再往下把可读的卷尽快导出
ddrescue /dev/vg0/data /data/rescue.img
剩下的就是换盘后清理缺失成员
vgreduce --removemissing vg0
别只看报错消失,验证要多做一步。可读逻辑卷的数据全部导出成功,卷组不再显示成员缺失,业务在新卷上正常启动。
这里还有个坑。LVM 不是冗余方案,要可用性就得上 RAID 或分布式存储;卷组里混不同大小的盘只会放大故障面。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。