根本原因是bitmap未启用或配置不当及speed_limit_min/max过于保守;需创建时启用internal bitmap并调高限速值至50MB/s以上,同时排查硬盘温度、RAID级别、I/O调度器和后台任务等瓶颈。
为什么 mdadm RAID 重建(rebuild)卡在几 MB/s?
根本原因通常是 bitmap 未启用或配置不当,导致整个阵列全盘校验;另外内核默认的 speed_limit_min 和 speed_limit_max 过于保守(常为 1000–2000 KB/s),尤其在 SSD 或 NVMe 背后的 RAID 中完全无法发挥硬件能力。
启用并调优 bitmap 是提速前提
bitmap 不是“可选优化”,而是 rebuild/reshape 场景下的必要机制——它记录哪些区域已同步,断电或中断后只需续跑未完成部分,而非重头扫全盘。
- 创建时启用:
mdadm --create /dev/md0 --bitmap=internal ...(internal最常用;external适合跨主机但需额外存储) - 已有阵列补加 bitmap(需先停止写入):
mdadm --grow /dev/md0 --bitmap=internal - 检查是否生效:
cat /proc/mdstat输出中应含bitmap: internal - 注意:bitmap 本身有开销,小文件随机写密集场景可能略降性能;但对 rebuild 来说,利远大于弊
speed_limit_min 和 speed_limit_max 怎么设才有效?
这两个参数控制内核对 RAID 同步线程的带宽限制,单位是 KB/s,路径为 /sys/block/mdX/md/speed_limit_{min,max}。默认值往往严重低估现代磁盘吞吐能力。