磁盘阵列日常维护脚本保障站点数据安全
为什么要写磁盘阵列日常维护脚本
服务器上的磁盘阵列(RAID)虽然能提供冗余或性能提升,但如果某个磁盘出现故障而未及时发现,可能逐步演变为数据丢失。
手动每天登录服务器检查状态既不现实也容易遗漏。
编写一个磁盘阵列日常维护脚本,让它自动扫描RAID状态、磁盘SMART信息以及磁盘空间,一旦异常立即发出通知,可以大幅降低因磁盘问题导致站点数据安全风险的概率。
准备工作:确认环境与工具
在开始写脚本前,请先确认你的服务器已安装以下基础工具:
- mdadm:管理Linux软件RAID。大多数系统已自带,若未安装可用
sudo apt install mdadm或yum install mdadm。 - smartmontools:读取磁盘SMART健康数据。安装命令
sudo apt install smartmontools或yum 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 发送到企业微信或钉钉。
- 脚本没有输出:默认正常时不发送任何通知,只有异常时才发邮件。如果想观察正常状态日志,可以在脚本末尾追加记录到文件的功能。
验证脚本是否正常工作
- 手动模拟一个错误场景(注意切勿在生产环境真正破坏数据):你可以临时停掉一块磁盘的SMART检测(不推荐)或者直接拔线测试(谨慎)。
- 更安全的做法:先修改脚本中的告警阈值(如将空间阈值设为1%),观察是否能收到触发邮件。
- 查看 crontab 执行日志:
grep raid_check /var/log/syslog或journalctl -u cron | grep raid_check,确认定时任务执行成功。
完成以上步骤后,你的磁盘阵列日常维护脚本就已经开始自动守护服务器数据安全了。
之后只需留意邮箱报警,并定期查看 RAID 和磁盘真实状态(例如每月手动执行一次 mdadm --detail /dev/md0 确认一致性)。