“我们有备份"还不是一种恢复能力。一份有用的备份有已知范围、已知新鲜度、一个验证步骤,以及一份确实有人运行过的恢复流程。

源码仓库提供权威构建输入,发布制品提供最近发布版本的恢复字节。取回归档和校验和,解包前核验,再以非特权用户将可信归档恢复到空隔离目标。记录校验和、权限、依赖、恢复目标与耗时。校验和不证明来源可信,两个非空页面也不等于完整验收。
恢复演练从可识别的输入,以及取回并核验的存储副本开始。在可丢弃的隔离目标中恢复,再记录文件、权限、依赖与恢复耗时。校验和或归档存在本身,都不能证明可恢复。

定义恢复单元

对静态站点,源码仓库与生成制品用途不同。仓库是权威输入;制品是恢复最近发布版本的最快方式。请把两者的区别说清楚。

至少记录:

  • 源码提交或归档标识;
  • 生成器与主题版本;
  • 制品包含的文件列表;
  • 重要下载的校验和;
  • 保留期限与存储位置。

不要把凭据、私钥、Cookie 或访问令牌放进网站备份。它们应属于独立的机密管理流程。

存储前先验证

打不开的归档不是备份。一个最小的验证循环如下:

set -eu
tar -czf site-2026-06-03.tar.gz public/
tar -tzf site-2026-06-03.tar.gz >/dev/null
sha256sum site-2026-06-03.tar.gz > site-2026-06-03.tar.gz.sha256

生成校验和只是记录基线,并未回读实际存储的副本。先从备份存储取回归档与校验和,再在解包前核验。校验和匹配能发现意外变化,但攻击者若可同时替换两个文件,它便不能证明归档来源可信。能列出成员也不等于备份了正确的文件。

在某个可丢弃的地方恢复

使用可信归档,以非特权用户身份解包到空临时目录或隔离主机,再检查入口点与一个有代表性的资源。不可信归档需要更强的隔离,因为路径与链接会影响解包行为。不要通过覆盖唯一活动副本来测试。

set -eu
sha256sum -c site-2026-06-03.tar.gz.sha256
restore_dir=$(mktemp -d)
tar -xzf site-2026-06-03.tar.gz -C "$restore_dir"
test -s "$restore_dir/public/index.html"
test -s "$restore_dir/public/404.html"

这条命令刻意很平凡。演练应在事故到来之前,暴露出缺失文件、错误权限或未记录的依赖。

诚实地度量新鲜度

备份日程只有在相对可能丢失的工作量时才有意义。如果源码一个月才变一次,每日快照可能不必要;如果某个资源每小时更新,一次月度归档又不够。

写下目标恢复点与恢复时间,再选择能满足这些目标的存储与检查。当最后一次经过验证的恢复备份已经陈旧时,不要宣称"连续保护”。

至少保留一份位于活动主机故障与删除范围之外的可恢复副本。记录恢复耗时、恢复文件的校验和、权限与人工依赖;两个非空 HTML 文件只是冒烟测试,不是完整的恢复验收。

来源