PowerEdge R940更换硬盘后查看Raid重建进度
- 存储&备份
- 2025-10-30
- 36热度
- 0评论
最近有台服务器的硬盘使用寿命即将耗尽,部分硬盘已经低于25%的使用寿命,需要更换整列中的硬盘。将我整个处理过程做个记录
目前的情况如下:
- 服务器型号:PowerEdge R940
- 阵列卡 1(Slot 1):PERC H740P(系统盘)
- 阵列卡 2(Slot 2):PERC H810(外接阵列或扩展柜)
- 问题卷:
DATA2(RAID 6),状态显示「降级」
也就是说,DATA2 所在的 PERC H810 Adapter 正在做 RAID 重建或等待重建。 现在需要查看这个 H810 控制器 的 rebuild 状态,但是在iDrac界面,只看到重建开始的日志,没有任何其他可供参考的重建进度日志或者界面。




以上是所有iDrac的阵列卡状态
那么如何在系统查看更换硬盘后的Raid重建进度呢?
使用 perccli 查看 PERC H810 上的重建进度(最直接)
如果你不确定控制器编号,可以先查看:
/opt/MegaRAID/perccli/perccli64 show

确认 H810 是哪个编号(例如 /c1),再用该编号执行查看命令。
请执行以下命令:
/opt/MegaRAID/perccli/perccli64 /c1 /vall show
在本案例中
- H740P 是 Slot 1 → 通常是 /c0
- H810 是 Slot 2 → 通常是 /c1
但是这条命令,只显示了H810这张Raid卡上的2个卷状态,并没有显示出重建进度。

查看所有虚拟磁盘(包括重建状态):
/opt/MegaRAID/perccli/perccli64 /c1 /vall show all

这条命令的输出已经非常清楚地显示出目前的 重建状态。我们来分析一下重点部分:
当前状态解读
控制器:
Controller = 1 → PERC H810 Adapter
虚拟磁盘:
/c1/v0 :0/0 RAID6 Dgrd RW Yes RWBD - OFF 13.969 TB DATA2
- RAID 类型:RAID6
- 状态:Dgrd (Degraded) → 表示阵列降级中
- 虚拟磁盘名称:DATA2
- 当前仍可读写(RW)
物理磁盘状态:
43:0 47 Rbld 0 3.492 TB SAS SSD ...
表示该盘(Enclosure ID: 43,Slot 0)正在执行 Rebuild(重建)
其它磁盘状态为:
43:1 Onln43:2 Onln43:4 Onln43:5 Onln
说明仅有 Slot 0 的 SSD 在执行重建,整个 RAID6 正在恢复冗余。
当前重建进度
perccli 输出中暂未显示 “Progress = XX%”,可以用以下命令看到实时进度:
/opt/MegaRAID/perccli/perccli64 /c1 /e43 /s0 show rebuild
/e43 /s0` 对应你上面列表中的 `EID:Slt = 43:0
输出示例:

可持续监控(实时刷新)
要实时监控重建进度(每 30 秒刷新一次),执行:
watch -n 30 "/opt/MegaRAID/perccli/perccli64 /c1 /e43 /s0 show rebuild"
或监控所有物理盘状态(适合同时有多块盘重建):
watch -n 30 "/opt/MegaRAID/perccli/perccli64 /c1 /eall /sall show rebuild"

创建自动检测脚本
那么我们来搞一个自动检测脚本,每隔10分钟自动反馈一次重建进度并写入日志文件:
脚本名称:check_rebuild_h810.sh
#!/bin/bash
# ------------------------------------------------------------------
# Script Name: check_rebuild_h810.sh
# Description: Monitor rebuild progress on Dell PERC H810 (Controller c1)
# Author: ChatGPT (for Terry)
# ------------------------------------------------------------------
CLI="/opt/MegaRAID/perccli/perccli64"
LOGFILE="/var/log/raid_rebuild.log"
CONTROLLER="1"
ENCLOSURE="43"
SLOT="0"
INTERVAL=60 # 检查间隔秒数
echo "===== RAID Rebuild Monitor Started at $(date '+%F %T') =====" | tee -a "$LOGFILE"
echo "Logging to: $LOGFILE"
echo "Press Ctrl + C to stop."
echo
while true; do
NOW=$(date '+%F %T')
# 获取重建信息
OUTPUT=$($CLI /c${CONTROLLER} /e${ENCLOSURE} /s${SLOT} show rebuild 2>/dev/null)
# 提取有效的进度行
LINE=$(echo "$OUTPUT" | grep "/c${CONTROLLER}/e${ENCLOSURE}/s${SLOT}")
if [[ -z "$LINE" ]]; then
echo "[$NOW] No rebuild in progress or disk not found." | tee -a "$LOGFILE"
else
PROGRESS=$(echo "$LINE" | awk '{print $2}')
STATUS=$(echo "$LINE" | awk '{print $3, $4}')
ETA=$(echo "$LINE" | awk '{print $5}')
echo "[$NOW] Drive ${ENCLOSURE}:${SLOT} - Progress: ${PROGRESS}% | Status: ${STATUS} | ETA: ${ETA}" | tee -a "$LOGFILE"
# 如果进度达到100%,退出循环
if [[ "$PROGRESS" == "100" ]]; then
echo "[$NOW] ✅ Rebuild completed for Drive ${ENCLOSURE}:${SLOT}." | tee -a "$LOGFILE"
break
fi
fi
sleep $INTERVAL
done
使用方法
- 创建脚本文件nano /usr/local/bin/check_rebuild_h810.sh
- 粘贴上面内容,保存并退出(
Ctrl+O,Ctrl+X)。 - 赋予执行权限chmod +x /usr/local/bin/check_rebuild_h810.sh
- 运行脚本/usr/local/bin/check_rebuild_h810.sh
- 控制台将显示类似:
- ===== RAID Rebuild Monitor Started at 2025-10-30 14:55:33 =====Logging to: /var/log/raid_rebuild.logPress Ctrl + C to stop. [2025-10-30 14:56:33] Drive 43:0 - Progress: 27% | Status: In progress | ETA: -[2025-10-30 14:57:33] Drive 43:0 - Progress: 28% | Status: In progress | ETA: -...[2025-10-30 17:25:33] Rebuild completed for Drive 43:0.
- 停止监控
- 按
Ctrl + C即可中止。
- 按
- 查看日志tail -f /var/log/raid_rebuild.log
以下是自动脚本的实时监控重建状态日志


