这台机器上真正重要的数据其实不多:几个数据库、站点文件、以及一些配置文件。容量不到 20 GB,但丢了会很麻烦。我最终选了对象存储做异地备份,这里记录一下选择过程。
为什么不用另一台服务器
最直接的做法是找一台机器做 rsync。问题是维护成本:要管系统、管磁盘、管安全更新,还要担心两台机器同时出问题。对于这点数据量,对象存储更省心。
存储类型
备份的访问频率很低,用标准存储不划算。我选的是低频访问类型,取回时有一点费用,但日常几乎为零。关键是要确认服务商支持按对象生命周期自动转储,避免手工清理。
加密与完整性
上传前先在本地加密,密钥不放在对象存储里。这样即使存储账号泄露,数据本身仍然是不可读的。完整性用 sha256 校验:
tar -czf - /etc /var/www | age -r $AGE_KEY > backup.tar.gz.age
sha256sum backup.tar.gz.age > backup.sha256
恢复时先验哈希,再解密解包。这个顺序不要颠倒。
保留策略
我保留最近 7 天的每日备份、最近 4 周的每周备份、以及每月一份归档。更久的历史意义不大,反而增加了泄露面。用生命周期规则自动删除,不依赖脚本的可靠性。
监控
备份失败往往悄无声息。我的做法是让脚本在成功后写一条记录,再用一个独立的定时任务检查「最近一次成功时间」是否超过 26 小时。超时就发通知。监控备份本身,比监控服务器更重要。
一次恢复演练
上个月做了一次完整恢复:从对象存储拉取最新包,在临时目录解包,启动一个测试实例,确认站点可以正常访问。整个过程大约 20 分钟。这个时间是可以接受的,也让我对这套方案更有信心。
备份方案没有标准答案。先明确恢复目标,再倒推存储和流程,通常比直接抄一套方案更靠谱。