“我们有备份"还不是一种恢复能力。一份有用的备份有已知范围、已知新鲜度、一个验证步骤,以及一份确实有人运行过的恢复流程。
定义恢复单元
对静态站点,源码仓库与生成制品用途不同。仓库是权威输入;制品是恢复最近发布版本的最快方式。请把两者的区别说清楚。
至少记录:
- 源码提交或归档标识;
- 生成器与主题版本;
- 制品包含的文件列表;
- 重要下载的校验和;
- 保留期限与存储位置。
不要把凭据、私钥、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 文件只是冒烟测试,不是完整的恢复验收。
来源
- GNU tar manual,归档创建与验证行为,已核验 2026-06-03。
- 静态网站发布检查清单,本地配套资源。
- GNU Coreutils: SHA-2 工具,生成校验和与
--check核验,已核验 2026-10-15。