必须先通过/proc/mdstat、mdadm --detail和journalctl三处日志确认同一设备故障,再执行--fail后--remove,确保阵列降级但在线;热备盘会自动重建,勿手动add。

确认哪块盘真坏了,别靠猜
直接拔盘是高危操作,mdadm 不会自动识别“物理断开”为故障,反而可能触发写入冲突或元数据损坏。必须先用系统状态说话:
- 运行
cat /proc/mdstat—— 看有没有(F)标记、faulty或failed字样; - 执行
mdadm --detail /dev/md0(把md0换成你的阵列名)—— 重点看State列,确认某设备(如/dev/sdc1)明确标为failed或Faulty; - 补查日志:
sudo journalctl -u mdadm.service | grep -i "fail\|error"—— 确认报错时间、设备名是否与上两步一致。
如果三处指向同一设备,才可进入下一步。否则别动。
必须先 --fail 再 --remove,顺序不能反
--fail 是让内核停止向该盘下发写请求的关键动作,不是可选步骤。跳过它直接 --remove,阵列可能仍在尝试写入已失效的盘,导致 I/O hang 或元数据不一致。
- 执行
mdadm --manage /dev/md0 --fail /dev/sdc1—— 成功后,State会从clean变为degraded,但阵列仍在线; - 紧接着执行
mdadm --manage /dev/md0 --remove /dev/sdc1—— 此时该设备应从Active Devices中消失,Failed Devices计数归零; - 再跑一次
mdadm --detail /dev/md0,确认该设备显示为removed,且其余盘状态仍是active sync。
注意:--remove 对 RAID5/6/10 是安全的(单盘失效允许),但 RAID1 必须确保另一镜像盘健康,否则移除后将无读写能力。
拔盘前检查阵列是否还在正常服务
拔掉物理硬盘前,务必验证业务是否真的没受影响:
- 观察
cat /proc/mdstat—— 应持续显示active sync(RAID1/10)或degraded(RAID5/6),**不能出现recovery、resync或卡在某个百分比不动**; - 快速测试 I/O:
dd if=/dev/zero of=/RAID/test bs=1M count=100 oflag=direct(假设挂载点是/RAID),看是否能完成; - 检查 dmesg:
dmesg | tail -20—— 确认没有新的ata、sd或md相关错误。
只要以上都通过,就可以关机或热插拔(取决于背板支持)——但记住:--remove 后设备已逻辑脱离,物理拔盘只是清理残余硬件连接。
拔完盘别急着换新,先看备用盘有没有自动顶上
如果你的阵列建的时候加了热备盘(-x 1 或更多),--fail + --remove 后,mdadm 通常会在几秒内自动启动重建,把热备盘拉进阵列。此时:
- 运行
cat /proc/mdstat—— 若看到recovery或spare rebuilding,说明热备已启用,**不用手动--add新盘**; - 等重建完成(
active sync回归,无recovery字样)后再物理更换坏盘; - 换好新盘后,只需分区设为
Linux RAID auto(fdisk里t→fd),然后mdadm --manage /dev/md0 --add /dev/sdc1加入——它会自动变成下一块热备。
最容易被忽略的一点:热备盘重建期间,/proc/mdstat 的进度条是实时的,但实际速度受磁盘性能和系统负载影响极大;小阵列可能几分钟,几十TB的 RAID5 可能跑几天。别中断,也别重复加盘。











