mdadm --run 仅用于启动已组装但停止的阵列(如 /dev/md0),不能激活单个成员盘;成员盘无“激活”状态,需先用 cat /proc/mdstat 和 mdadm --examine 确认真实状态。

不能用 mdadm --run 启动处于非激活状态(inactive)的成员盘来“恢复阵列数据”。这个操作本身不成立——mdadm --run 仅用于启动**已组装但当前停止(stopped)的阵列设备**(如 /dev/md0),而非单独启动某块物理盘。成员盘(如 /dev/sdb1)是底层块设备,不是 md 阵列,不存在“激活/非激活”状态;它们只有是否被识别、分区表是否可读、是否有硬件故障等实际状态。
先确认阵列真实状态
运行以下命令查看当前系统中 md 阵列和成员盘的实际情况:
-
cat /proc/mdstat—— 查看哪些阵列正在运行、哪些已停止、哪些处于降级/错误状态 -
mdadm --detail --scan—— 显示系统已知的阵列配置(来自mdadm.conf或内核) -
mdadm --examine /dev/sdX1(逐个检查每块疑似成员盘)—— 确认该分区是否含有 md 元数据、属于哪个阵列、状态是否 clean/active/faulty -
lsblk -f或fdisk -l—— 检查磁盘是否被系统识别、分区是否存在、文件系统类型是否可识别
如果阵列已停止但成员盘完好
这是 mdadm --run 的典型适用场景:阵列已组装(mdadm --assemble 成功过),但被手动停止或因异常卸载而处于 stopped 状态。
- 先尝试自动组装:
mdadm --assemble --scan - 若失败,手动指定成员盘组装:
mdadm --assemble /dev/md0 /dev/sdb1 /dev/sdc1 /dev/sdd1 - 组装成功后,若显示
inactive(罕见),可用:mdadm --run /dev/md0 - 注意:
--run不会修复损坏元数据,也不跳过一致性检查;若阵列元数据异常,此命令会直接报错
如果成员盘未被识别或显示为 missing/faulty
这说明问题不在“启动”,而在硬件连接、分区损坏、元数据丢失或磁盘离线。此时需针对性处理:
- 检查物理连接与
dmesg | tail -30,确认磁盘是否被内核识别(有无 I/O 错误、reset、timeout) - 用
smartctl -a /dev/sdX检查 SMART 健康状态,重点关注Reallocated_Sector_Ct、Current_Pending_Sector、UDMA_CRC_Error_Count - 若某盘元数据损坏但数据区尚可读,可尝试强制组装:
mdadm --assemble --force /dev/md0 /dev/sdb1 /dev/sdc1 /dev/sdd1(风险高,仅限只读恢复) - 重要:所有恢复操作前,建议先对关键盘做 dd 镜像:
dd if=/dev/sdb1 of=/backup/sdb1.img bs=4M conv=noerror,sync
安全恢复数据的实用路径
不要依赖 --run “唤醒”硬盘。真正可行的数据恢复流程是:
- 确认所有成员盘能被系统稳定识别(无频繁掉盘、无大量 I/O 错误)
- 使用
mdadm --examine找出每个盘的Event Count,优先选择事件计数最高且一致的盘组合装 - 若阵列是 RAID5/6 且仅缺一块盘,可尝试
--force组装并立即挂载为只读:mount -o ro,noload /dev/md0 /mnt/recover - 若无法组装,改用专业工具如
testdisk(找分区)、photorec(文件 carving)、或ddrescue+mdadm --build(需精确知道 RAID 参数) - 涉及业务数据时,强烈建议在只读环境下操作,避免二次覆盖


















