用 cron + shell 脚本监控备份磁盘需聚焦关键挂载点(如 /backup),同步检查空间与 inode 使用率,排除已删未释放文件和 root 保留空间干扰,设置双阈值、去重告警及静默期,并在告警中提供目录分析与清理建议。

直接用 cron + shell 脚本就能实现,关键不是“有没有告警”,而是告警是否准、是否及时、是否能区分真假满——比如 inode 耗尽、已删文件未释放、root 保留空间干扰等,这些都会让 df -h 显示“还有空间”却实际写不进数据。
明确监控目标:只盯关键挂载点
备份磁盘通常有固定挂载路径,比如 /backup、/mnt/backup 或 /data/backup。不要全盘扫描,只检查这些真实承载备份数据的位置:
- 用
df -h /backup确认挂载点存在且可读 - 同步运行
df -i /backup查 inode 使用率,小文件备份场景下 inode 比空间更容易先耗尽 - 避免监控
/或/home等无关分区,减少误报
脚本要识别三类真实风险
单纯判断 “Use% > 90” 容易被瞬时日志刷爆或临时文件干扰。脚本里必须包含:
- 空间+inode 双阈值:比如空间超 85% 且 inode 超 90%,才触发警告
-
排除已删未释放文件:执行
lsof +L1 | grep /backup,若有输出说明有进程正占用已删除文件,需单独记录并通知运维介入 - 跳过 root 保留空间干扰:df 的 “Available” 值已扣除默认 5% 保留空间,但某些备份工具(如 rsync over ssh)以 root 运行,实际可用比显示值多约 5%,脚本中建议按 “Used%” 判断而非 “Available” 绝对值
定时任务设合理间隔与静默期
备份过程本身会引发短时写入高峰,不能一满就告警:
- 设为每 10 分钟 执行一次(
*/10 * * * *),兼顾及时性与系统负载 - 加入简单去重逻辑:若连续 3 次检测都超阈值,再发邮件;单次超标可能是 rsync 正在传大包
- 避免凌晨 2–4 点(常见自动备份窗口)频繁告警,可在脚本开头加时间判断:
hour=$(date +%H); [ $hour -ge 2 -a $hour -le 4 ] && exit 0
告警内容带可操作线索
邮件不能只写“/backup 已满 92%”,要附上下一步动作:
- 列出当前最大 3 个子目录:
du -sh /backup/* 2>/dev/null | sort -hr | head -3 - 标出最近 24 小时新增最多文件的目录:
find /backup -type f -newermt "$(date -d '24 hours ago' +%Y-%m-%d)' -print0 2>/dev/null | xargs -0 dirname | sort | uniq -c | sort -nr | head -1 - 附上清理建议:例如 “建议先清空 /backup/tmp 或归档 /backup/202606* 目录”


















