You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

求可检测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设备名称,比如md0md1;如果要监测所有RAID,可以把这部分改成遍历/dev/md*的逻辑。
  • NOTIFY_CMD:替换成你实际要执行的命令,比如发送通知邮件、触发运维告警脚本,甚至只是在终端打印提示。
  • 循环逻辑:每隔30秒检查一次/proc/mdstat,如果目标RAID的状态行里没有resyncrecovercheck这些重建/检查相关的关键词,就判定为完成,执行通知命令后退出。
  • 进度打印:脚本里会实时输出当前重建进度,方便你查看(不需要的话可以删掉这一行)。

使用注意事项:

  1. 给脚本添加执行权限:chmod +x raid-monitor.sh
  2. 可以把脚本放到后台运行:nohup ./raid-monitor.sh &,或者用systemd做成服务,实现开机自动监测。
  3. 如果你的RAID在重建完成后会进入其他状态,可以调整grep的匹配关键词,确保准确判断。

内容的提问来源于stack exchange,提问作者user275140

火山引擎 最新活动