raid 10 必须用偶数块盘,因其底层由镜像对(每2盘一组)组成条带,3盘不满足最小结构要求,mdadm会报错;4盘为最小可行配置,支持2个镜像对。

mdadm 创建 RAID 10 时为什么必须用偶数块盘
RAID 10 是镜像 + 条带的组合,底层逻辑上每份数据要写两份(镜像),同时还要跨至少两个设备条带化(striping)。所以最小单元是「2 块盘做镜像对」,再把多个镜像对组成条带。如果只给 3 块盘,mdadm 会直接报错:mdadm: layout requires even number of devices。
- 4 块盘是最小可行配置,可建 2 个镜像对 → 1 个 RAID 10 阵列
- 6 块盘 = 3 个镜像对,性能比 4 盘略高,但容错仍只允许每对中坏 1 块(即最多坏 3 块,但不能是同一镜像对里坏两块)
- 别用
--layout=n2强行绕过校验——它不生效,mdadm会静默降级为 RAID 0+1 行为,故障恢复逻辑完全不同
RAID 同步过程中系统变卡,怎么调低 IO 影响
新建或扩容 RAID 时,md 子系统默认以最高优先级跑 resync,会抢光磁盘带宽。这不是 bug,是设计如此:内核认为“阵列完整性”优先于响应延迟。但实际运维中,你得主动干预。
- 运行中临时限速:
echo 10000 > /proc/sys/dev/raid/speed_limit_min(单位 KB/s,设 10MB/s 以上基本不影响业务) - 永久生效需在
/etc/default/grub里加raid.speed_limit_min=5000,然后update-grub && reboot - 别设
speed_limit_max——它控制上限,但同步几乎从不跑满;真正压性能的是下限值太低导致任务被切片太碎、上下文切换爆炸
mdadm --stop 后设备节点还在,/dev/md* 没消失
mdadm --stop 只停阵列逻辑,不清理内核的 md 设备注册信息。下次 mdadm --assemble 或系统重启后,/dev/md0 这类节点可能自动重建,甚至和旧配置冲突。
- 停阵列后立刻执行:
mdadm --zero-superblock /dev/sdX(对每块成员盘运行一次) - 如果只是临时测试,用
--force和--run组阵列时加--auto=no,避免 udev 自动创建节点 - 检查残留:用
cat /proc/mdstat看是否还有 active 状态;用ls -l /sys/block/ | grep md看内核是否还挂着设备
RAID 5 在大容量 SATA 盘上重建失败率高,该换 RAID 6 吗
不是“该不该换”,而是“不换大概率扛不住”。RAID 5 单盘重建时,整个阵列处于降级状态,所有读操作都要实时校验+计算,遇到一个 UNC(uncorrectable sector)就直接失败。8TB+ 的 SATA 盘 UBER(不可修复错误率)通常是 10−15,意味着每读 12TB 就可能遇到一个坏扇区——而重建 8TB 盘常要读 15TB+ 数据。
- RAID 6 多存一份校验,能容忍两个盘同时故障,且重建时遇到单个 UNC 可跳过并用双校验恢复,成功率显著提升
- 代价是写性能下降约 20–30%,尤其小随机写;CPU 开销略增(但现代 CPU 几乎无感)
- 别迷信“我盘好”,企业级 SATA 盘也逃不开物理介质缺陷规律;SSD 做 RAID 5 更危险——FTL 层隐藏的写放大会让重建过程触发更多后台错误
重建失败不是小概率事件,是大容量机械盘的常态。预留 spare 盘没用,关键在初始架构选型。










