磁盘阵列日常维护脚本保障站点数据安全

为什么要写磁盘阵列日常维护脚本

服务器上的磁盘阵列(RAID)虽然能提供冗余或性能提升,但如果某个磁盘出现故障而未及时发现,可能逐步演变为数据丢失。
手动每天登录服务器检查状态既不现实也容易遗漏。
编写一个磁盘阵列日常维护脚本,让它自动扫描RAID状态、磁盘SMART信息以及磁盘空间,一旦异常立即发出通知,可以大幅降低因磁盘问题导致站点数据安全风险的概率。

准备工作:确认环境与工具

在开始写脚本前,请先确认你的服务器已安装以下基础工具:

  • mdadm:管理Linux软件RAID。大多数系统已自带,若未安装可用 sudo apt install mdadmyum install mdadm
  • smartmontools:读取磁盘SMART健康数据。安装命令 sudo apt install smartmontoolsyum install smartmontools
  • mailutils 或 curl:用于发送报警通知。这里以简单的邮件发送为例(需要配置本地邮件服务),或使用curl调用企业微信/钉钉机器人。

确认命令是否可用:

mdadm --version
smartctl --version

编写核心检测脚本

创建一个脚本文件,例如 /root/raid_check.sh,内容如下(请根据实际RAID设备编号和磁盘名称修改):

#!/bin/bash
# 磁盘阵列日常维护脚本 - 检查RAID状态、磁盘SMART及空间

# 配置变量
RAID_DEVICE="/dev/md0"
DISKS="/dev/sda /dev/sdb /dev/sdc"
THRESHOLD_SPACE=90   # 磁盘使用率告警阈值(百分比)
ADMIN_EMAIL="admin@example.com"

# 1. 检查RAID阵列状态
RAID_STATUS=$(mdadm --detail $RAID_DEVICE | grep "State :" | awk '{print $3}')
if [ "$RAID_STATUS" != "clean" ]; then
    echo "RAID状态异常:$RAID_STATUS"
    mail -s "RAID告警:服务器磁盘阵列故障" $ADMIN_EMAIL <<< "当前RAID $RAID_DEVICE 状态:$RAID_STATUS,请立即检查。"
fi

# 2. 检查每块磁盘的SMART健康状态
for disk in $DISKS; do
    SMART_HEALTH=$(smartctl -H $disk | grep "SMART overall-health" | awk '{print $6}')
    if [ "$SMART_HEALTH" != "PASSED" ]; then
        echo "磁盘 $disk SMART状态:$SMART_HEALTH"
        mail -s "磁盘告警:$disk 健康状态异常" $ADMIN_EMAIL <<< "磁盘 $disk 健康状态为 $SMART_HEALTH,可能存在物理故障风险。"
    fi
done

# 3. 检查磁盘挂载分区的使用率
df -h | grep -vE 'tmpfs|overlay' | while read line; do
    USAGE=$(echo $line | awk '{print $5}' | sed 's/%//')
    MOUNT=$(echo $line | awk '{print $6}')
    if [ "$USAGE" -ge "$THRESHOLD_SPACE" ]; then
        mail -s "磁盘空间告警:$MOUNT 使用率超过${THRESHOLD_SPACE}%" $ADMIN_EMAIL <<< "$MOUNT 当前使用率:$USAGE%,请及时清理。"
    fi
done

保存后赋予执行权限:

chmod +x /root/raid_check.sh

部署定时任务实现每日自动运行

使用 crontab 设定每日凌晨执行一次脚本:

crontab -e

加入以下行:

0 2 * * * /root/raid_check.sh >/dev/null 2>&1

这样每天凌晨2点会自动运行脚本,若有异常会发送报警邮件到你指定的邮箱。
若要测试邮件发送功能,可以先手动执行脚本观察输出:

bash /root/raid_check.sh

避坑指南与常见问题

  • SMART 命令无权限:部分磁盘需要root权限才能读取SMART信息,脚本使用root运行无需担心。若使用普通用户,请使用sudo。
  • RAID名称不一致:不同服务器的软RAID设备可能是 /dev/md127/dev/md1,先用 cat /proc/mdstat 查看实际名称。
  • 邮件发送失败:检查本地 MTA(如postfix)是否正常。也可改用 curl 调用 webhook 发送到企业微信或钉钉。
  • 脚本没有输出:默认正常时不发送任何通知,只有异常时才发邮件。如果想观察正常状态日志,可以在脚本末尾追加记录到文件的功能。

验证脚本是否正常工作

  1. 手动模拟一个错误场景(注意切勿在生产环境真正破坏数据):你可以临时停掉一块磁盘的SMART检测(不推荐)或者直接拔线测试(谨慎)。
  2. 更安全的做法:先修改脚本中的告警阈值(如将空间阈值设为1%),观察是否能收到触发邮件。
  3. 查看 crontab 执行日志:grep raid_check /var/log/syslogjournalctl -u cron | grep raid_check,确认定时任务执行成功。

完成以上步骤后,你的磁盘阵列日常维护脚本就已经开始自动守护服务器数据安全了。
之后只需留意邮箱报警,并定期查看 RAID 和磁盘真实状态(例如每月手动执行一次 mdadm --detail /dev/md0 确认一致性)。

分享到:
上一篇
TLS协议升级仅保留TLS1.2/1.3兼容浏览器
下一篇
NewAPI副业Token售卖完整落地运营流程
1
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意