热备盘必须用mdadm /dev/md0 --add /dev/sdf显式添加,不能自动识别;需确保磁盘干净(无superblock、LVM、文件系统),加入后显示(S)标识,Spare Devices计数为1,仅故障时自动顶替。

热备盘不是“插进去就生效”,必须用 mdadm --add 显式加入阵列
很多人误以为把新硬盘物理接上、分区设为 fd 类型后,RAID 就会自动识别为热备盘——不会。Linux 软 RAID 不做自动发现,mdadm 必须明确被告知哪块设备是 spare。
正确做法是先确认阵列状态和目标设备名:
-
cat /proc/mdstat查看当前阵列(如/dev/md0)是否处于 clean 状态,避免在降级或重建中操作 -
lsblk或fdisk -l确认新硬盘设备路径(如/dev/sdf),并确保它未被挂载、无文件系统、无 LVM 卷 - 若该盘曾参与过其他 RAID,务必先清理残留元数据:
mdadm --zero-superblock /dev/sdf
然后执行添加命令:
mdadm /dev/md0 --add /dev/sdf
注意:这里不能写成 mdadm --add /dev/md0 /dev/sdf(参数顺序错误会导致报错 unrecognised option '--add')
新硬盘必须是“干净裸盘”,否则 mdadm 会拒绝添加
常见拒绝原因不是权限或路径错,而是磁盘上有残留的 RAID superblock、LVM PV 标签、或 ext4/xfs 文件系统签名。哪怕只是曾经格式化过,mdadm 都可能报:
mdadm: Cannot add <code>/dev/sdf</code>: Device or resource busy
或更隐晦的:
mdadm: failed to add <code>/dev/sdf</code> to <code>/dev/md0</code>: Invalid argument
此时要逐项检查:
- 运行
mdadm -E /dev/sdf—— 若输出显示mdadm: No md superblock detected是干净的;若有输出,说明残留 superblock,必须mdadm --zero-superblock /dev/sdf - 运行
pvs和lvscan,确认没被 LVM 占用 - 运行
file -s /dev/sdf,若返回类似/dev/sdf: Linux rev 1.0 ext4 filesystem data,说明有文件系统,需dd if=/dev/zero of=/dev/sdf bs=1M count=100清头部
热备盘加入后不立即参与工作,只待故障时自动激活
执行 mdadm /dev/md0 --add /dev/sdf 后,/proc/mdstat 中你会看到类似:
md0 : active raid5 sdb1[0] sdc1[1] sdd1[2] sdf[4](S)
末尾的 (S) 表示该设备是 spare,它不会出现在编号序列(如 [0][1][2])里,也不参与条带读写。只有当某块活动盘(比如 sdb1)被标记为 faulty 后,sdf 才会自动顶替,并变成 [3] 编号,开始同步重建。
验证是否成功加入,可用:
mdadm -D /dev/md0 | grep -A2 "Spare Devices"
输出应为:
Spare Devices : 1 Active Devices : 3 Working Devices : 3
注意:Active Devices 数量不变,Spare Devices 应为 1。
RAID5 加热备盘后,mdadm --detail 显示的设备顺序不代表物理顺序
很多用户看到 mdadm -D /dev/md0 输出里设备排列是 sdb1[0], sdc1[1], sdd1[2], sdf[4](S),就以为 sdf 是第 4 块盘、编号 4 意味着它排在最后——其实编号只是内核分配的 slot ID,和物理位置、添加先后无关。热备盘的 slot ID 通常跳号(如这里是 4),是为了和活动盘区分开。
真正影响性能的是底层 chunk 大小、读写策略和盘本身性能。热备盘只要容量 ≥ 最小活动盘,就能正常接管;但若容量小,mdadm 会在添加时报错:Device <code>/dev/sdf not large enough to join array。
另外,RAID5 的热备盘不提供额外容错能力(仍只容忍 1 块故障),但它能显著缩短 MTTR(平均修复时间),避免人为干预延迟导致二次故障——这才是加热备盘最实际的价值。


















