问题出现得很突然,日志倒是留得挺全。Ubuntu 22.04 上两块数据盘是从旧机器拆过来的,mdadm --assemble /dev/md0 /dev/vdb /dev/vdc 报 no devices listed in the config file or on the command line,lsblk 里两块盘都在但看不到 md0。

刚开始盯着「阵列曾被强制停止,成员盘的 events 计数不一致被判定为不同阵列」,折腾了半个多小时,排掉了。

把日志和配置对完,能解释这个现象的基本就这几处。旧机器用的是 1.0 元数据,新版 mdadm 默认按 1.2 去找超级块的位置,扫不到。也可能是硬盘被插到了另一台机器的 HBA 上,设备名从 sdb 变成了 vdb。

少数情况下是盘上有残留的文件系统签名,udev 抢先按分区规则做了处理。

先把每块盘属于哪个阵列读出来

mdadm --examine /dev/vdb | grep -E 'Array UUID|Events|Version'

接着按 UUID 扫描并自动组装

mdadm --assemble --scan --uuid=$(mdadm --examine /dev/vdb | awk '/Array UUID/{print $NF}')

然后确认降级状态和成员是否齐

cat /proc/mdstat && mdadm --detail /dev/md0 | tail -20

等前面都确认过,再把阵列信息写回配置文件,避免重启丢

mdadm --detail --scan >> /etc/mdadm/mdadm.conf && update-initramfs -u

改完先别撤,确认这几项。mdadm --detail 里 State 显示 clean 而不是 degraded,Raid Devices 与 Active Devices 数量一致,挂载后读写正常。

别用 --create 强行重建,那会覆盖成员盘的元数据;先 --examine 把每块盘的 UUID 和 events 记下来,后面比对全靠它。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189