mdadm --scan 仅扫描并输出已识别RAID成员的ARRAY行,不自动生成配置文件;需用 mdadm --detail --scan 输出追加至/etc/mdadm.conf(RHEL系)或/etc/mdadm/mdadm.conf(Debian系),再执行update-initramfs -u或dracut -f更新initramfs以实现开机自动组装。

mdadm --scan 是用于自动发现系统中所有已存在 RAID 成员设备(即带有有效 md 超级块的磁盘或分区),并输出符合 /etc/mdadm.conf(或 /etc/mdadm/mdadm.conf)语法的 ARRAY 行。它本身不创建阵列,也不修改任何设备,只做“读取+格式化输出”,是生成标准配置文件最安全、最推荐的方式。
确认前提:成员盘必须有有效超级块
只有执行过 mdadm --create、mdadm --assemble 或曾被纳入 RAID 的设备,才在磁盘开头/末尾写入了 md 超级块。若硬盘是全新未初始化的,或已被 mdadm --zero-superblock 清除,则 --scan 不会识别它们。
验证方法(以 /dev/sdb1 为例):
-
mdadm -E /dev/sdb1—— 若显示 Version、UUID、Raid Level 等信息,说明可被扫描到 -
file -s /dev/sdb1—— 可能提示 “Linux Software RAID” 相关字样
执行扫描并生成标准配置文件
直接运行以下命令即可覆盖写入标准配置(生产环境建议先备份):
-
mdadm --detail --scan > /etc/mdadm.conf—— 最常用,输出简洁 ARRAY 行(不含注释) -
mdadm --examine --scan > /etc/mdadm.conf—— 功能等价,语义更明确 - 如需追加而非覆盖:
mdadm --scan >> /etc/mdadm.conf
生成内容示例:
ARRAY /dev/md0 level=raid1 num-devices=2 UUID=e48e7f06:d574f908:a79bfff8:fecde120
该行已包含唯一标识(UUID)、级别、设备数,足够系统启动时自动装配。
配合 systemd 或 init 系统启用自动装配
仅写入配置文件还不够,需确保系统在启动阶段调用 mdadm --assemble --scan:
- 大多数现代发行版(RHEL/CentOS 7+, Debian 10+, Ubuntu 18.04+)默认启用
mdmonitor服务或通过initrd集成 mdadm 扫描逻辑 - 手动验证是否生效:
systemctl is-enabled mdmonitor或检查 initramfs 是否含 mdadm:lsinitrd | grep mdadm - 若未启用,运行:
systemctl enable mdmonitor(RHEL系)或update-initramfs -u(Debian/Ubuntu)
常见问题与处理建议
扫描结果为空?请检查:
- 是否所有成员盘都已连接且未被挂载(
lsblk确认状态) - 是否误用了裸盘(如
/dev/sdb)而非分区(如/dev/sdb1)—— 多数情况下 RAID 使用分区,且分区类型应为fd(Linux raid autodetect) - 是否因磁盘顺序变化导致 UUID 不一致?
mdadm -D /dev/md0查看当前阵列实际 UUID,并比对/proc/mdstat中列出的设备路径
配置写入后,建议重启前测试装配:mdadm -S /dev/md0 && mdadm --assemble --scan,观察是否成功重建阵列。











