备份任务开始报 No space left on device,备份盘直接 100%,里面躺着三个月前每天一份的全量包,一个都没删掉,手动删了几个才跑起来。乍看像缓存或者权限的锅,追下去往往不是。

du -sh /backup/* | sort -rh | head -5
find /backup -name '*.tar.gz' -mtime +7 -print
df -h /backup

追下去是这么回事:保留策略写的是 find -mtime +7 -delete,路径多写了一层导致一个文件都匹配不到,删除命令一直安静地返回成功,谁也没发现,就这么过了三个月。

碰到「备份盘写满」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。

线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。

具体做法是,先把现有的备份包按时间排一遍,看保留是否符合预期;删除命令先改成只打印,确认文件列表对了再换成真删;加一条容量告警,用到 80% 就先提示,不要等写满才发。

验收就看一点,备份盘占用回到 50% 以下,旧包按策略删除,新任务连续三天成功。

作者 9823189