最直接、最轻量的RAID重建监控方式是cat /proc/mdstat,配合watch -n1实时刷新,可查看recovery或resync百分比及speed速率;RAID1/10显示recovery,RAID5/6多为resync,刚换盘时resync = 0.1%属正常延迟;需结合mdadm --detail确认成员盘状态(如spare rebuilding)、dmesg排查I/O错误,并通过journalctl查日志定位重建起止与中断。

cat /proc/mdstat 看实时百分比和速率
这是最直接、最轻量的方式,适合快速确认是否在重建、当前进度和速度。输出里只要看到 recovery = XX.X% 或 resync = XX.X%,就说明正在重建;speed = XXXK/sec 表示当前吞吐速率。
常见陷阱:
-
cat /proc/mdstat是快照,不是持续流——想盯进度得加watch -n1 'cat /proc/mdstat',否则可能错过关键变化 - RAID1/RAID10 重建时显示
recovery,RAID5/6 则多见resync,别因词不同误判状态 - 刚换盘后可能卡在
resync = 0.1%几分钟不动——这是校验头块的正常延迟,不是卡死
mdadm --detail /dev/mdX 查重建中的成员盘状态
mdadm --detail /dev/mdX 能告诉你哪块盘正在被写入、哪块是备用、哪块已标记为 faulty,尤其关键的是 Rebuild Status 行(部分版本显示为 Rebuild Status: XX% complete)。
注意点:
- 如果输出里某盘状态是
spare rebuilding,说明重建已启动;若仍是spare未动,可能是没触发或新盘分区类型/大小不匹配 -
Events:数值突然停滞不涨,往往意味着底层 I/O 错误(如坏道),需配合dmesg | tail -20查 SCSI timeout 或 UNC 错误 - RAID5 中一块盘
faulty后,Active Devices数会减 1,但Working Devices仍为总数——这是降级运行的正常表现,不代表重建失败
查系统日志确认重建起点和异常中断
重建不是黑盒操作,mdadm 每次状态变更都会记日志。用 journalctl -u mdmonitor --since "2 hours ago" | grep -i "md[0-9]\|rebuild\|resync" 可定位重建何时开始、是否被中断过。
典型线索:
- 出现
md: md0: recovery done表示上一次重建已结束(哪怕没在/proc/mdstat里看到 clean) - 有
md: md0: kicking non-fresh sdb1 from array说明某盘因事件序号(Event Count)落后被踢出,需先mdadm --examine /dev/sdb1确认元数据是否损坏 - 反复出现
md: md0: device sdc1 completed resync后又重来,大概率是磁盘响应超时,得检查 SMART:smartctl -a /dev/sdc
硬件 RAID 不能只看 /proc/mdstat
如果你的阵列由 LSI MegaRAID、Dell PERC 或 HP Smart Array 控制器管理,/proc/mdstat 通常为空或只显示 md 设备未激活——因为硬件 RAID 对系统暴露的是标准块设备(如 /dev/sda),而非 /dev/mdX。
必须用对应工具:
- LSI 卡:用
/opt/MegaRAID/MegaCli/MegaCli64 -PDRbld -ShowProg -PhysDrv [E:S] -aAll,其中E是背板号,S是槽位号(如[252:5]) - Dell 服务器:
storcli64 /c0 /e252 /s5 show rebuild,输出含Progress%和Estimated Time Left - HP Gen9+:
hpssacli ctrl slot=0 ld 1 show,关注Status字段是否为Rebuilding
真正容易被忽略的是:硬件 RAID 重建进度不经过内核路径,iotop 或 iostat -x 1 看不到重建 I/O——它走的是控制器固件通道,只能靠厂商工具读取。


















