如何恢复存在两块故障设备的LVM RAID5逻辑卷
非常理解你不想花时间恢复备份、还想趁机学点东西的心态——毕竟几TB的数据恢复起来确实头疼,能救回来最好!
先给你明确:既然两块物理盘本身没问题,只是同时离线导致LVM RAID5标记它们为故障,是有机会强制让RAID重新识别这些盘并正常工作的,毕竟数据本身应该是完整的。下面是具体步骤,操作前一定要先给所有磁盘做个镜像备份,避免操作失误搞砸数据:
确认所有物理卷(PV)都已正常识别
先运行pvs命令,检查原来的PV是否都显示为active状态。你之前用了vgextend --restoremissing datavg /dev/mapper/<hdd_names>,这一步应该已经把缺失的PV重新加入VG了,但再确认下更稳妥。查看LVM RAID的详细状态
运行lvdisplay -v datavg/<你的LV名称>,找到对应RAID逻辑卷的信息,重点看每个RAID segment的状态,标记为failed的就是之前离线的磁盘。同时你也能看到对应的md设备路径(比如/dev/md127之类的)。清除磁盘的故障标记
针对每个被标记为故障的PV,用下面的命令清除故障状态:lvchange --setfaulty n datavg/<你的LV名称> /dev/mapper/<对应的PV路径>如果你不确定对应的PV路径,从
lvdisplay -v的输出里就能找到每个segment关联的PV。尝试修复并激活RAID逻辑卷
接下来用LVM的修复命令强制修复RAID:lvconvert --repair --force datavg/<你的LV名称>加上
--force是因为默认LVM RAID5只允许修复单盘故障,我们需要强制它忽略这个限制——既然你确认两块盘本身完好,数据一致,这个操作是安全的。激活逻辑卷
最后尝试激活LV:lvchange -ay datavg/<你的LV名称>如果一切顺利,现在应该就能正常挂载使用了。
如果上面的步骤还是报错,你可以试试直接操作底层的md设备:
- 先找到对应的md设备(从
lvdisplay里获取),然后运行:mdadm --manage /dev/mdX --clear-faulty mdadm --readwrite /dev/mdX - 之后再回到LVM层面执行
lvchange -ay datavg/<你的LV名称>尝试激活。
最后再啰嗦一遍:操作前一定要备份磁盘!虽然理论上没问题,但数据无价,小心驶得万年船。
备注:内容来源于stack exchange,提问作者RDX




