/proc/mdstat 是首选,因它由内核动态维护、实时显示同步(resync)、重建(recovery)、校验(check)、重构(reshape)等后台任务的百分比与剩余时间,且无需额外工具或权限。

直接看 /proc/mdstat,它实时显示同步、重建、校验等进度,不需要额外工具或权限。
为什么 /proc/mdstat 是首选
这个文件由内核动态维护,是软件 RAID(mdadm)状态的“第一手快照”。只要阵列处于 active 状态,任何后台任务——比如新建阵列后的初始化(resync)、换盘后的重建(recovery)、手动触发的一致性校验(check)——都会在这里以百分比和剩余时间形式持续刷新。
常见进度字段含义:
-
resync = 62.4%:新阵列首次同步,或扩容后 reshape 同步 -
recovery = 18.7%:某块盘被标记为faulty后,替换新盘并重建数据 -
check = 91.2%:执行了mdadm --check /dev/md0的一致性校验 -
reshape = 5.3%:正在改变 RAID 级别或增加磁盘数(如 RAID5 → RAID6)
注意:resync 和 recovery 在输出里可能混用,但都表示“正在写入数据到目标设备”,本质相同。只要看到这类字段,就说明有后台 IO 在跑,且进度可信。
mdadm --detail 只能确认状态,不显示实时进度
mdadm --detail /dev/md0 输出的是元数据快照,比如 State : clean, degraded 或 Active Devices : 3,但它不会显示百分比或剩余时间。唯一能间接推断进度的地方是 Rebuild Status : 字段——但该字段只在部分内核版本中存在,且内容常为 not started 或空,不可靠。
所以别指望它告诉你“还剩多久”,它只回答“是不是在重建”,而 /proc/mdstat 才回答“重建到哪了”。
容易踩的坑:误读状态字符和忽略 IO 干扰
常见错误现象:
- 看到
[UU_]就以为阵列坏了 —— 其实只是第三块盘没参与(比如 RAID5 三盘中一盘是 spare),State : clean才说明运行正常 - 执行
mdadm --detail后发现Events : 0—— 这通常是因为没用 root 权限,导致无法读取 superblock 时间戳,不是真没事件 - 在
/proc/mdstat中看到进度卡住(比如停在 99.9% 很久)—— 多半是遇到坏块或底层磁盘响应慢,此时应配合smartctl -a /dev/sdX查物理盘健康 - 一边跑
rsync或数据库导入,一边看重建进度 —— 大量用户 IO 会显著拖慢resync速度,内核会自动降速以保障前台响应,这不是故障
真正关键的细节藏在 /proc/mdstat 最末尾那行:如果写着 used=123456789,说明该阵列已启用 bitmap(写意图日志),重建时只同步变更区域,大幅缩短时间;若无此字段,则是 full resync,耗时更长也更重 IO。这个信息,mdadm --detail 虽然也能查到,但不如直接扫一眼 /proc/mdstat 来得快。











