最快速可靠的软件raid重建进度查看方式是直接读取/proc/mdstat,重点关注recovery/resync百分比、finish剩余时间和speed吞吐量;mdadm --detail仅提供快照式状态,需配合watch实时观察,且不反映物理盘真实健康——后者须用smartctl检测smart指标。

直接看 /proc/mdstat 里的百分比和剩余时间
这是最快速、最可靠的软件 RAID 重建进度查看方式。内核实时更新这个文件,不需要额外工具或权限(除非你用非 root 用户读取某些字段)。
执行 cat /proc/mdstat 后,重点找含 recovery、resync 或 check 的行,例如:
md0 : active raid1 nvme2n1p1[0] nvme3n1p1[1]
1000071488 blocks super 1.2 [2/1] [_U]
[=>...................] recovery = 29.4% (295123456/1000071488) finish=122.5min speed=96524K/sec
注意三个关键字段:
-
recovery = 29.4%:当前完成百分比 -
finish=122.5min:预估剩余时间(但会随 I/O 负载动态变化,不准是常态) -
speed=96524K/sec:当前重建吞吐,可用于判断是否被其他 I/O 压制
如果只看到 [2/1] [_U] 但没 recovery 行,说明重建尚未启动——可能因新盘未 add、阵列未激活,或内核未触发同步。
mdadm --detail /dev/mdX 显示状态字段和重建计数器
当 /proc/mdstat 输出模糊(比如只写 recovery 没百分比),或你想确认是否真在重建而非校验(check),就用这个命令。
输出中重点关注:
-
State :行是否含rebuilding(不是所有内核版本都显示这个词,但degraded, recovering是明确信号) -
Rebuild Status :行(部分 mdadm 版本有),直接给出百分比,如Rebuild Status : 42% complete -
Active Devices :数值是否小于预期(比如 RAID5 三盘却只显示 2),结合Failed Devices : 0可排除硬件故障,确认是重建中
注意:mdadm --detail 不刷新实时进度,它读的是快照;想持续观察,得配合 watch -n2 'mdadm --detail /dev/md0'。
硬件 RAID(LSI/Broadcom)用 MegaCli64 查物理盘重建进度
软件 RAID 的 /proc/mdstat 对硬件 RAID 完全无效——控制器自己管理重建,操作系统只看到一个“黑盒”块设备。
对于 LSI/Broadcom 卡,必须用 MegaCli64 查具体某块盘的重建状态:
- 先查哪块盘在重建:
sudo /opt/MegaRAID/MegaCli/MegaCli64 -PDList -aAll | grep -A5 -B5 "Rebuild" - 再查进度:
sudo /opt/MegaRAID/MegaCli/MegaCli64 -PDRbld -ShowProg -PhysDrv [E:S] -aAll(把[E:S]替换为实际槽位,如[252:1])
输出类似:Rebuild Progress: 65% complete.。注意硬件重建不报剩余时间,且 speed 字段不可见——控制器内部调度,用户无法干预。
别用 -LDInfo 查逻辑盘状态来反推重建进度:它只显示 Optimal 或 Degraded,不反映底层物理盘是否还在 rebuild。
重建慢?先排除这三类干扰
进度卡住、速度掉到几 MB/s,大概率不是磁盘坏了,而是被其他因素压制:
-
ionice -c2 -n7和renice 19默认 applied 到重建线程,但高负载时仍会被抢占——检查iostat -x 1的%util和await,若前者接近 100% 且后者 >100ms,说明磁盘已饱和 - 后台任务如
logrotate、updatedb、备份脚本正在扫盘,用lsof +D /mnt/raid看谁在读写 - RAID 级别影响显著:RAID6 重建天然比 RAID5 慢 30–50%,尤其小文件多时;RAID1 重建快但受限于最慢那块 NVMe 的写入延迟
真正容易被忽略的是:重建期间 /sys/block/mdX/md/start_ro 若为 1(只读模式),会强制暂停重建——检查并写 0 解锁,否则进度永远停在 99.9%。











