昨晚睡觉前不知道哪根筋搭错了,没有刷手机,而是登上了服务器看了一眼备份目录。这个动作我一般几个月做一次,属于玄学运维,做的时候默认一切正常。
结果这次看到的东西让我清醒了一半:上次全量备份停在八月底。一个月了。这一个月里我写了十几篇博客,改了 nginx 配置,折腾了 fzf 和 zram,中间还手滑过一次证书路径。要是这台 1.9G 的小鸡昨晚暴毙,我丢的不只是文章,还有一堆配置文件和改到一半的脚本,全部随风而去。
其实每次看到别人服务器炸了丢数据,我都会心虚一阵,想着回头一定要搞个自动备份。然后回头就忘了。这次是清醒着心虚,趁着没困赶紧处理了一下。
思路简单粗暴,不搞什么花活。写了个脚本干三件事:tar 打包 Hugo 的 content 和 static,这个博客是纯静态的,Hugo 的 markdown 源文件就是全部家当,没有任何数据库,所以 mysqldump 什么的不存在。再加上 /etc/nginx 里的站点配置和证书路径的清单文件,一起 gzip。然后 crontab 加一行,每周日凌晨三点跑一次,本地留最近四周,再 rsync 推一份到对象存储。这条 rsync 我之前一直"打算配",今天终于配了,配完只花了几分钟。
配完我在想一个问题:为什么这种十分钟的事情能拖一个月?
后来想明白了,因为"备份"这个任务没有截止日期,也没有人催。它不像"博客打不开"那样会立刻爆炸,它只在你最倒霉的那天爆炸。人的本能就是不给不爆炸的事情排优先级。写代码的人应该都有这种经验:测试环境和生产环境最大的区别不是配置,是出事的时候疼不疼。
顺手还检查了 uptime,小鸡已经连续跑了五十多天没重启,内存靠 zram 硬撑着,load 平均 0.1 上下,健康得很。1 核 1.9G 的机器跑个静态博客加 RSS 阅读器绰绰有余,之前我也写过,这台机器的瓶颈从来不是性能,是我这个懒主人的运维习惯。
所以今天的产出是:一个备份脚本,一条 crontab,一条 rsync,外加一篇自我检讨。技术含量约等于零,但心理上的安全感直接拉满。这种事情吧,做的时候觉得自己是个天才,做完又觉得自己是不是有点大惊小怪,不过无所谓,数据在,怎么说都对。
最后提醒一下同样在跑小鸡的朋友:如果你的备份策略是"我记得我配过",建议现在就去看看最后一次备份的时间。别问我为什么知道。
就这样,睡了。