必须先用命令交叉验证再拔盘:查看/proc/mdstat是否有(F)标记、mdadm --detail确认Device状态为faulty、journalctl查I/O error日志,三者一致才可执行--fail和--remove,顺序不可颠倒。

确认硬盘是否真故障,别凭灯闪就拔
很多运维看到某块盘的LED狂闪或不亮,直接上手拔——这是最危险的一步。软 RAID(如 mdadm)不会因为灯灭就自动标记失效,内核仍可能向它发 IO,强行拔盘极易触发阵列 panic 或元数据损坏。
必须先用命令交叉验证:
-
cat /proc/mdstat—— 看是否有(F)标记、failed或spare rebuilding等异常状态 -
mdadm --detail /dev/md0(把md0换成你的阵列名)—— 重点看 Device 状态列,只有显示faulty或failed才算被 RAID 层识别为坏盘 -
sudo journalctl -u mdadm.service | grep -i "fail\|error" | tail -20—— 查最近报错是否集中指向同一设备(如/dev/sdc1)
如果三者不一致,比如 /proc/mdstat 显示正常但日志里有大量 I/O error on /dev/sdc1,说明盘可能处于“半死”状态:还能读部分元数据,但写必失败。这时更要先 --fail,不能跳步。
热插拔前必须执行 --fail 和 --remove,顺序不能反
标记(--fail)不是可选项,是让内核停止向该设备下发新 IO 的强制闸门。没这步就拔盘,RAID 会认为是突发断连,可能触发错误重试风暴,甚至误判为双盘故障(尤其 RAID5/6)。
操作必须严格按顺序:
- 运行
mdadm --manage /dev/md0 --fail /dev/sdc1—— 立即看到/proc/mdstat变成degraded,但仍在active sync - 紧接着运行
mdadm --manage /dev/md0 --remove /dev/sdc1—— 再查--detail,该设备应从Active Devices中消失,Failed Devices归零 - 若
--remove报错Device or resource busy,说明还有进程在访问该设备(比如某个日志文件正在写入),需用lsof +D /mnt/xxx或fuser -v /dev/sdc1定位并终止
注意:--remove 成功后,设备节点(如 /dev/sdc1)仍存在,但已和阵列解绑。此时物理拔盘才安全。
新盘加入前必须分区并设为 Linux RAID auto 类型
直接 mdadm --add /dev/sdc(整盘)大概率失败,因为现代 mdadm 默认拒绝未分区的裸盘,且 BIOS/UEFI 启动场景下更要求分区表存在。
正确准备流程:
- 用
fdisk /dev/sdc(或gdisk)新建一个主分区(如/dev/sdc1) - 在
fdisk中输入t→fd(设为Linux RAID auto类型);若用gdisk,则t→fd00 - 保存退出后,必须运行
partprobe /dev/sdc或blockdev --rereadpt /dev/sdc,否则内核看不到新分区 - 最后执行
mdadm --manage /dev/md0 --add /dev/sdc1—— 此时/proc/mdstat会立刻出现recovery = 0.1%进度条
常见坑:fdisk -l /dev/sdc 能看到分区,但 lsblk 不显示 /dev/sdc1?基本就是没执行 partprobe。
重建期间严禁重复 add 或重启,NVMe 需额外确认 DPC 支持
重建耗时取决于阵列大小和负载,10TB RAID5 可能持续数小时。期间 /proc/mdstat 显示 recovery 是正常态,不要中断、不要重复 --add(会导致多份重建并发,IO 飙升甚至卡死)。
特别注意 NVMe 硬盘:
- 消费级 NVMe(如多数 PCIe 4.0 M.2 盘)不支持硬件热插拔,强行拔插可能烧毁控制器或主板 PCIe 通道
- 企业级 U.2/NVMe 卡必须确认 BIOS 中启用了
DPC (Downstream Port Containment),且禁用Hot Plug Surprise—— 否则系统可能无法识别新盘,或识别后报PCIe Bus Error - 插入新 NVMe 盘后,先运行
lspci -vv -s $(lspci | grep -i nvme | head -1 | awk '{print $1}')查看Capabilities: [100 v1] Advanced Error Reporting下是否有DPC字样
真正容易被忽略的点:重建完成不等于万事大吉。cat /proc/mdstat 显示 active sync 后,务必再跑一次 mdadm --detail /dev/md0,确认所有设备 State 是 clean,且 Events 计数比换盘前有增长 —— 这才是元数据真正同步完成的铁证。











