求可检测RAID重建完成后执行命令的Bash脚本
检测RAID重建完成并执行命令的脚本
当然有!我之前维护服务器的时候也碰到过这个需求,特意写了个轻量的脚本,完全基于/proc/mdstat来做状态检测,分享给你参考:
#!/bin/bash # 要检测的RAID设备,比如md0,如果你有多个可以改成循环遍历 RAID_DEV="md0" # 重建完成后要执行的命令,比如发送邮件通知、记录日志等 NOTIFY_CMD='echo "RAID $RAID_DEV 重建已完成!" | mail -s "RAID状态更新" your@email.com' # 循环检测状态 while true; do # 从/proc/mdstat中过滤目标RAID的状态行 RAID_STATUS=$(grep "^$RAID_DEV" /proc/mdstat) # 检查是否包含resync/recover这些重建相关的关键词 if ! echo "$RAID_STATUS" | grep -qE "(resync|recover|check)"; then echo "$(date): RAID $RAID_DEV 重建完成,执行通知命令..." # 执行自定义命令 eval "$NOTIFY_CMD" # 退出循环 exit 0 else # 打印当前进度(可选) PROGRESS=$(echo "$RAID_STATUS" | awk '{print $4}') echo "$(date): RAID $RAID_DEV 正在重建中,进度:$PROGRESS" # 每隔30秒检查一次,可根据需要调整 sleep 30 fi done
脚本说明:
- RAID_DEV:设置你要监测的RAID设备名称,比如
md0、md1;如果要监测所有RAID,可以把这部分改成遍历/dev/md*的逻辑。 - NOTIFY_CMD:替换成你实际要执行的命令,比如发送通知邮件、触发运维告警脚本,甚至只是在终端打印提示。
- 循环逻辑:每隔30秒检查一次
/proc/mdstat,如果目标RAID的状态行里没有resync、recover、check这些重建/检查相关的关键词,就判定为完成,执行通知命令后退出。 - 进度打印:脚本里会实时输出当前重建进度,方便你查看(不需要的话可以删掉这一行)。
使用注意事项:
- 给脚本添加执行权限:
chmod +x raid-monitor.sh - 可以把脚本放到后台运行:
nohup ./raid-monitor.sh &,或者用systemd做成服务,实现开机自动监测。 - 如果你的RAID在重建完成后会进入其他状态,可以调整
grep的匹配关键词,确保准确判断。
内容的提问来源于stack exchange,提问作者user275140




