磁盘阵列日常维护脚本保障站点数据安全存储
你的服务器可能正在使用磁盘阵列(RAID)来组合多块硬盘,保障站点数据的安全与读写性能。
但阵列本身也会出问题——某块硬盘红灯、阵列降级、甚至崩溃。
如果全靠人工每天登录检查,既累又容易忘。
本文从零开始教你编写一个磁盘阵列日常维护脚本,让它自动检查阵列状态、在发现异常时第一时间通知你,把站点数据安全存储的主动权握在手里。
写脚本之前要准备什么?
你只需要确认两件事:
- 服务器上已经配置了 RAID(软 RAID 或硬 RAID 均可)。
- 系统能运行 shell 脚本(Linux 通常自带 bash)。
对于软 RAID,常用 mdadm 管理;
对于硬 RAID,则依赖厂商工具如 MegaRAID 的 storcli 或 hpssacli。
本文以最普遍的软 RAID 为例,硬 RAID 用户可参考同样的思路替换命令。
确认是否安装 mdadm:
which mdadm
如果没找到,用包管理器安装(CentOS:yum install mdadm;
Ubuntu:apt install mdadm)。
编写脚本:自动检查 + 告警
新建一个文件,比如 raid_check.sh:
#!/bin/bash
# 磁盘阵列日常维护脚本 - 检查RAID状态并通知
RAID_DEVICE="/dev/md0" # 你的RAID设备路径
EMAIL="admin@example.com" # 接收告警的邮箱
LOG_FILE="/var/log/raid_check.log"
# 读取mdstat信息
STATUS=$(cat /proc/mdstat | grep -A 1 $RAID_DEVICE | grep -oP '\b(clean|active|degraded|resync|recovery)\b' | head -1)
# 检查是否为正常状态
if [[ "$STATUS" == "clean" || "$STATUS" == "active" ]]; then
echo "$(date) - RAID 状态正常" >> $LOG_FILE
else
# 异常:降级、恢复中或未知
echo "$(date) - RAID 状态异常: $STATUS" >> $LOG_FILE
# 发送邮件告警(需要系统配置好mail命令)
echo "RAID $RAID_DEVICE 状态异常:$STATUS,请立即检查服务器!" | mail -s "RAID告警 - 站点数据安全存储风险" $EMAIL
# 也可加上发送短信、企业微信等通知方式
fi
解释关键点:
/proc/mdstat是 Linux 内核提供的实时 RAID 状态文件。grep -oP提取关键词,如果出现degraded表示磁盘故障,recovery表示正在修复。- 正常状态下脚本只写日志,异常状态才发邮件,避免骚扰。
保存后赋予执行权限:
chmod +x raid_check.sh
先手动运行一次测试:
./raid_check.sh
如果收到邮件或看到日志更新,说明基础功能正常。
设置定时任务:每天自动运行
使用 cron 让脚本每天定时执行,比如每天早上 8 点检查一次:
crontab -e
添加一行:
0 8 * * * /root/raid_check.sh
保存后重启 cron 服务(多数系统自动生效):
systemctl restart crond
这样你的磁盘阵列日常维护脚本就开始自动工作了,站点数据安全存储又多了一道自动化防线。
避坑指南:几个容易翻车的地方
- 邮件服务没配好:
mail命令需要依赖 sendmail 或 postfix。如果没配置,告警会发不出去。建议先手动发一封邮件测试:echo "test" | mail -s "test" you@domain.com。 - RAID 设备路径不对:如果你的阵列是
/dev/md127或/dev/md/name,第一行变量要改对,否则脚本永远查不到状态。 - 运行频率别太高:
/proc/mdstat读取本身很轻,但邮件告警如果每 5 分钟发一次,会非常烦人。每天一次或每小时一次就够。 - 硬 RAID 用户的替代命令示例:
- 使用
storcli /c0 /vall show status获取状态 - 使用
hpssacli ctrl slot=0 pd all show status检查硬盘
如何验证脚本真的生效?
验证分三步:
- 强制日志写入检查:手动执行一次脚本,确认日志文件
/var/log/raid_check.log有最新记录。 - 模拟降级状态(仅测试环境):如果你有备用的闲置磁盘,可以热拔出其中一块(不要在生产环境直接拔!),然后立即运行脚本,看它是否检测到
degraded并发出告警邮件。 - 查看 cron 执行记录:使用
grep CRON /var/log/syslog或journalctl -u cron确认定时任务按时触发了。
另外,不要把脚本存一份就忘了。
每当你更换 RAID 卡、重装系统或迁移站点时,记得重新检查一遍脚本中的设备路径和通知方式。
常见问题
Q:我的服务器用的是硬 RAID,还能用这个脚本吗?
A:可以,只需把脚本中读取 /proc/mdstat 的部分,替换为硬 RAID 管理工具的输出命令。
不同厂商命令不同,但逻辑一样——提取状态关键字,判断是否正常。
Q:脚本运行正常,但收不到邮件怎么办?
A:先确认邮件服务和网络连通性。
本地测试 echo "test" | mail -s test root 能否收到。
如果 root 收不到,查看 /var/log/maillog 定位原因。
Q:站点数据安全存储除了阵列维护,还需要注意什么?
A:阵列维护只是基础。
建议同时做好定期冷热备份、UPS 供电保护和异地容灾。
如果你在配置 RAID 或运行脚本时遇到其他报错,欢迎留言交流。
先把这份磁盘阵列日常维护脚本部署下去,让你的站点数据多一重自动守护。