用 mdadm --fail 可安全模拟 RAID 成员盘故障,触发自动降级:状态变为 degraded,Active Devices 减 1,Failed Devices 加 1,/proc/mdstat 显示 U 形式标记,日志记录磁盘失效,阵列仍可读写。

在 Linux 中用 mdadm --fail 模拟硬盘故障,是验证 RAID5(或 RAID6、RAID1)自动降级逻辑最直接有效的方式。关键不在于“能不能停”,而在于系统能否识别故障、及时标记设备、维持阵列可读写,并准确反映状态变化。
确认当前阵列状态和设备信息
执行前先摸清底细,避免误操作:
- 查看所有 RAID 阵列运行概况:
cat /proc/mdstat - 获取详细信息,确认设备名、RAID 级别、成员盘及当前健康状态:
mdadm --detail /dev/md0(把/dev/md0替换为你的实际阵列设备) - 核对目标硬盘是否确实在该阵列中,例如输出里有类似
/dev/sdb1 active sync这样的行
用 mdadm --fail 主动触发降级
--fail 命令会向内核通知“该设备已不可用”,不涉及物理断电或拔盘,但效果等同于硬盘突然离线。这是模拟真实故障的核心步骤:
- 标记某块成员盘为故障状态(以
/dev/sdb1为例):mdadm /dev/md0 --fail /dev/sdb1 - 命令成功后无提示,但立即生效:该设备状态将变为
faulty,阵列进入降级(degraded)状态 - 注意:不能对正在重建中的设备执行
--fail;也不建议对只有一块盘的 RAID1 执行此操作(会导致完全失效)
观察降级后的状态反馈
降级不是静默发生的,系统会通过多个渠道清晰反馈:
- 再次运行
mdadm --detail /dev/md0,你会看到:-
State : clean, degraded(明确标识降级) -
Active Devices : N-1(比如原为 4,现在显示 3) Failed Devices : 1- 对应设备行显示
faulty或removed,如1 8:17 1 faulty /dev/sdb1
-
-
cat /proc/mdstat输出中,阵列名后会出现_U_U或_U_UU这类标记(_表示缺失/故障,U表示正常),直观体现冗余损失 - 系统日志也会记录:
dmesg | tail -10可看到类似md/raid:md0: Disk failure on sdb1, disabling device.的消息
后续操作与注意事项
模拟只是第一步,真正考验逻辑的是后续行为是否符合预期:
- 阵列仍可正常读写(RAID5 允许单盘故障),但性能下降、不再具备容错能力——此时再坏一块盘即全盘崩溃
- 若配置了热备盘(spare),
--fail后系统通常会在几秒内自动启动替换与重建,无需人工干预 - 如需手动移除故障盘(为更换做准备):
mdadm /dev/md0 --remove /dev/sdb1 - 恢复时重新添加同一块盘或新盘:
mdadm /dev/md0 --add /dev/sdb1,重建自动开始,可用watch cat /proc/mdstat实时查看进度 - 所有操作均不影响已挂载的文件系统,业务可继续运行(但建议避开高峰时段测试)











