先把当时的情况摆出来。两块盘组成的卷组上跑着业务数据,其中一块物理盘报 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 或分布式存储;卷组里混不同大小的盘只会放大故障面。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189