使用mdadm --assemble无法重建RAID5阵列,报错‘failed to RUN_ARRAY /dev/md0: Invalid argument’
看起来你遇到的是mdadm组装RAID阵列时的参数不匹配问题,我来帮你一步步排查和解决:
先检查RAID元数据一致性
首先用mdadm --examine /dev/sdb /dev/sdc /dev/sdd查看每个磁盘的RAID元数据,重点核对UUID、Chunk Size、Raid Level这几个字段——它们必须完全一致。如果某块磁盘的元数据和另外两块有差异,那大概率是这块盘的元数据损坏了,需要以正常磁盘的元数据为准来修复。尝试通过UUID指定组装
从上面的--examine输出里找到阵列的UUID,然后用命令:mdadm --assemble --force --run --verbose /dev/md0 --uuid=你的阵列UUID这样mdadm会严格匹配UUID对应的磁盘,避免磁盘顺序或元数据识别偏差导致的问题。
手动指定磁盘插槽顺序
你的输出显示sdb是slot0、sdc是slot2、sdd是slot1,虽然mdadm会自动识别插槽,但手动按顺序指定可能解决问题:mdadm --assemble --force --run --verbose /dev/md0 /dev/sdb /dev/sdd /dev/sdc忽略磁盘的"clean"状态标记
有时候磁盘元数据里的"clean"状态标记会干扰阵列启动,试试添加--ignore-clean参数:mdadm --assemble --force --run --ignore-clean --verbose /dev/md0 /dev/sdb /dev/sdc /dev/sdd查看系统日志找详细报错
直接看mdadm的输出信息不够细,你可以通过dmesg | grep md或者journalctl -u mdadm查看内核和mdadm的日志,里面会明确指出是哪个参数无效——比如是否是磁盘分区大小有细微差异(哪怕都是240G SSD,分区大小可能不一致),可以用fdisk -l /dev/sdb /dev/sdc /dev/sdd确认每个磁盘的RAID分区大小完全相同。谨慎尝试用--create重建阵列(保留数据)
如果上面的方法都无效,可以尝试用--create命令重建阵列,但一定要加上--assume-clean参数(这个参数会跳过磁盘初始化,保留原有数据):mdadm --create /dev/md0 --level=5 --raid-devices=3 --assume-clean /dev/sdb /dev/sdc /dev/sdd执行后用
mdadm --detail /dev/md0检查阵列状态,再尝试挂载看看数据是否正常。
注意:所有RAID操作前建议做好数据备份,虽然你说磁盘硬件没问题,但操作过程仍有风险。
备注:内容来源于stack exchange,提问作者StuartM

