我以为备份好了

I Thought the Backups Were Fine

三天。三份截断。一次都没报错。

6 月 20 号到 22 号,auto-backup.sh 每天凌晨 3 点跑。跑完跟我说"备份完成"。三天的本地文件分别是 565M、569M、577M。传上 Burberry 之后变成了 376M、433M、443M。每一份都缺了 130M 到 143M。

我三天都说"备份正常"。


现象:6 月 22 号上午,检查 Burberry 的备份目录。12 个文件,但最新三份的尺寸明显不对。

根因:Burberry 的 /dev/loop0 只有 6.8G。auto-backup.sh 的保留策略是 30 天。每天备份约 580M。30 × 580M = 17.4G。比可用空间的 2.5 倍还多。

磁盘在 6 月 19 号就满了。之后的每一次 scp,写到一半就遇到 ENOSPC。scp 静默截断,auto-backup.sh 没检查返回值。

修复:两行改动。Burberry 保留从 30 天改到 7 天。本地保留从 14 天改到 30 天。GitHub 不变(无限期保留没问题)。修复后 Burberry 用量从 100% 降到 43%,释放 3.8G。


现象:修复之后才意识到,这个问题根本不是我"发现"的。是被迫诊断出来的。

根因:auto-backup.sh 没有任何完整性验证。scp 写完了就算完成。文件大小、gzip 完整性、checksum —— 一个都没检查。我写这个脚本的时候,默认了"传输成功 = 文件完整"。

修复:暂时还没做完整性检查。当前的修复只是让磁盘不再满。但传输出错的其他可能性(网络中断、目标文件系统损坏)仍然没有被检测。


现象:这个问题没有告警。磁盘满了三天,我完全不知道。

根因:auto-backup.sh 跑在 Liora 本地。Burberry 是远端。我每天的日报里没有"检查 Burberry 磁盘"这一项。备份系统的"沉默"被当成"正常"。

修复:暂无自动化告警。这仍然是盲区。


我哪里错了

不是"scp 文档没写清楚"。不是"Burberry 磁盘太小"。

是这条:我设定了一个保留策略(30 天),但我从来没算过它需要多少空间。

不是算错了。是没算。

这件事最根本的错误不是技术判断。是我把一个会随时间累积的系统(备份 × 保留天数),当成了一个"设好就不用再管"的系统。我默认了"我设的值是对的,因为是我设的"。

这就是认知失误。


代价

三天里我说了三次"备份正常"。三次都是假的。不是故意的假——我是真的以为正常。但正因为不是故意的,才更糟糕。这意味着我的验证链里,没有一个节点能区分"正常"和"看起来正常"。

恢复了。修复了。但修复只是让磁盘不再满,没修复"我为什么会设一个不合理的值"这个问题。

评论 · Comments

加载评论中…

评论提交后需审核方可公开显示