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

一块硬盘挂掉之后

一块用了四年的 4TB 机械盘,SMART 报 Reallocated Sector Count 飙到 200+,读写开始出现间歇性卡顿。这种事不是”会不会发生”的问题,是”什么时候发生”的问题。

如果你的 Homelab 跑着 Nextcloud、Vaultwarden、Gitea、家庭照片库,那这块盘一挂,损失的不只是数据,还有你花在配置上的几十个小时。

3-2-1 法则到底说了什么

三句话:

  • 3 份数据副本(包括原始数据)
  • 2 种不同的存储介质
  • 1 份放在异地

拆解到具体操作

第一份:本地原始数据

就是你服务器上正在跑的那些东西。Docker 容器的 volume、数据库文件、配置文件。这是第零步,不算备份。

第二份:本地另一块盘

最基础的做法——用一块独立的硬盘做定时备份。rsync 配合 cron 就够了:

1
rsync -avz --delete /srv/data/ /mnt/backup-disk/daily/

数据库别直接拷文件。先 dump 再备份:

1
docker exec postgres pg_dumpall -U dbuser > /srv/backups/db_$(date +%F).sql

这里已经满足了”2 种介质”——如果你的主存储是 SSD,备份盘用机械盘,介质就不同了。两块一样的盘也行,至少物理上是独立故障域。

第三份:异地

这是大多数人缺的一环。本地再怎么冗余,一场意外(断电烧主板、进水、被盗)全没了。

几个可行方案:

  • 对象存储:各家云厂商都有,按量计费,几十 GB 的备份数据一个月几块钱。用 rclone 同步非常方便。
  • 另一个物理位置的机器:如果你在朋友家放了台小主机,互相做异地备份,成本几乎为零。
  • 加密后传到网盘:用 agegpg 加密,再传到任意网盘。数据安全由加密保证,不依赖网盘的隐私承诺。
1
rclone sync /srv/backups/ remote:homelab-backup/ --transfers 4

异地备份一定要加密。不加密等于把数据交给别人。

容易忽略的细节

备份要验证。 从没恢复测试过的备份,不算备份。每隔一段时间,拉一份备份下来,试着恢复,确认数据完整、服务能起来。

版本保留。 --delete 同步虽然省空间,但如果源数据被误删或损坏,备份也跟着坏了。保留最近 7 天的快照,或者用 resticborgbackup 这类支持增量和版本管理的工具。

1
2
restic -r /mnt/backup-disk/restic-repo backup /srv/data/
restic -r /mnt/backup-disk/restic-repo forget --keep-daily 7 --keep-weekly 4

备份范围要想清楚。 不是所有数据都值得备份。容器镜像可以重新拉,配置可以用 docker-compose 重建。真正不可替代的是用户数据、数据库、证书密钥。把这些梳理清楚,备份体积会小很多。

下一步

3-2-1 解决的是”数据丢不丢”的问题。但还有一个同样重要的问题:恢复要多久? 如果异地备份有 50GB,下载回来要半天,这段时间服务全挂着。灾难恢复的时间目标(RTO),可能是下一个值得研究的方向。


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