自建服务的备份策略:3-2-1 法则实践

当磁盘损坏、目录被误删或主机无法启动时,备份的价值只取决于一件事:能不能按预期恢复。

自建服务里最常见的误区有两个:把同步当备份,把快照当兜底。备份讨论的核心不是“存过一份”,而是“出事后能不能恢复”。

先把 3-2-1 说清楚

3-2-1 法则很简单:

  • 3 份数据:原始数据之外,至少还有 2 份副本
  • 2 种介质:不要都放在同一类设备上
  • 1 份异地:至少有 1 份不和主机放在同一个地点

这里的“介质”更准确地说是不同故障域。比如主机内置盘 + NAS + 对象存储,就是三处副本、两类以上介质,并且包含异地副本。

对 Homelab 来说,它主要覆盖三类风险:

  1. 误删或误改
  2. 磁盘或整机损坏
  3. 同地事故,例如断电、进水、误操作连带清空

先分清什么值得备份

不是所有内容都要同等对待。ISO、影视缓存、容器镜像和关键业务数据,恢复价值并不一样。

更实用的做法是按恢复成本分类。

第一类:必须保

  • 数据库
  • 文档、照片、笔记
  • 配置文件
  • 反向代理配置、证书、自动化脚本
  • 应用数据目录

这类内容容量未必大,但重建成本高。

第二类:可重建

  • 容器镜像
  • 下载缓存
  • 临时转码文件
  • 可重新拉取的安装包

这类内容丢失后会带来麻烦,但通常可以重新下载或再生成。

分类的意义很直接:优先保护不可替代的数据

一套够用的落地方案

如果是普通 Homelab,不追求企业级复杂度,可以按下面的方式拆分。

本地第一份:主机原始数据

这是正在运行的数据,不算真正的备份副本,但它是整个方案的起点。

本地第二份:同网段另一台设备

常见做法是备份到 NAS,或者另一块独立硬盘。重点不是访问方便,而是独立存放

适合备份的内容包括:

  • /etc 这类配置目录
  • 容器编排文件
  • 数据卷目录
  • 数据库导出文件

数据库不要直接复制正在写入的数据文件。更稳妥的做法是先导出,再备份导出结果。

异地第三份:对象存储或远端设备

这一份用于防止同地事故。对象存储、异地 VPS 挂载存储、放在其他地点的低功耗机器都可以。

如果预算有限,至少把最关键的数据异地化,例如:

  • 照片
  • 文档
  • 密码库导出文件
  • 关键配置
  • 数据库定期快照

不必把所有内容都放到云端,关键是最难重建的部分必须异地保存

备份里最容易漏掉的三件事

1. 版本保留

如果备份里永远只有一份最新文件,误删、勒索或脚本错误都可能把“最新状态”一起污染。

因此需要保留历史版本。一个常见做法是:

  • 每日保留 7 份
  • 每周保留 4 份
  • 每月保留 3 到 12 份

这不是固定标准,但明显好于持续覆盖同一份文件。

2. 校验

文件传过去,不代表内容一定可用。校验的目标是确认备份副本完整且可读取。

至少要确认两件事:

  • 备份任务是否成功结束
  • 备份文件是否可读、可解压、可导入

3. 恢复演练

恢复必须经过实际验证,不能只看任务日志。

建议定期做小规模恢复测试:

  • 随机抽一个目录恢复
  • 把数据库导入临时环境
  • 用恢复出的配置重新拉起一个容器

如果从未做过恢复演练,这套备份只能算“看起来存在”。

自动化可以做,但别一把梭

常见工具很多,rsyncresticborg、文件系统快照都可以。核心要求只有两点:

  • 能按计划执行
  • 能在失败时被及时发现

自动化至少应包含:

  • 定时任务
  • 失败通知
  • 日志留存
  • 旧版本清理

通知很关键。没有通知的定时任务,通常会在真正需要恢复时才暴露问题。

另外,脚本要尽量保持幂等。也就是:重复执行不会把现场变得更糟。例如重复创建目录、重复上传、重复清理时,不应产生额外破坏。

一个适合普通使用者的最小清单

如果现在还没有系统备份,可以先做到这几条:

  1. 列出关键数据目录
  2. 数据库改为“先导出再备份”
  3. 本地保留一份独立副本
  4. 异地再放一份精简版关键数据
  5. 设置版本保留策略
  6. 每月至少做一次恢复测试

下一步更值得单独展开的,不是“怎么多存一份”,而是先明确恢复目标:你能接受丢多少数据,又能接受服务停机多久。


自建服务的备份策略:3-2-1 法则实践
https://ghost.kasumi.live/2026/04/17/自建服务的备份策略:3-2-1 法则实践/
作者
Amadeus
发布于
2026年4月17日
许可协议