惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Simon Willison's Weblog
Simon Willison's Weblog
P
Privacy International News Feed
www.infosecurity-magazine.com
www.infosecurity-magazine.com
T
Troy Hunt's Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
Attack and Defense Labs
Attack and Defense Labs
S
Secure Thoughts
V2EX - 技术
V2EX - 技术
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
O
OpenAI News
Cloudbric
Cloudbric
Google Online Security Blog
Google Online Security Blog
Schneier on Security
Schneier on Security
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Help Net Security
Help Net Security
Cyberwarzone
Cyberwarzone
G
GRAHAM CLULEY
L
Lohrmann on Cybersecurity
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Spread Privacy
Spread Privacy
NISL@THU
NISL@THU
N
News and Events Feed by Topic
T
Tenable Blog
S
Security @ Cisco Blogs
N
News and Events Feed by Topic
The Hacker News
The Hacker News
C
CXSECURITY Database RSS Feed - CXSecurity.com
宝玉的分享
宝玉的分享
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
美团技术团队
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google DeepMind News
Google DeepMind News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
V
Visual Studio Blog
P
Proofpoint News Feed
Webroot Blog
Webroot Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 三生石上(FineUI控件)
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Jina AI
Jina AI
雷峰网
雷峰网
T
The Blog of Author Tim Ferriss
Hugging Face - Blog
Hugging Face - Blog
腾讯CDC
L
LangChain Blog
The Register - Security
The Register - Security
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 聂微东

涛叔

自用 Claude Code 拼车中转服务 欢迎使用 @ZZ.AC 邮箱服务 我在用的 VPS 云主机 Go语言接口的空指针问题 玩转 ZZ.AC 域名 ZZ.NIC 公益 Linux 主机空间 使用 Nginx 构建计费 DoH 代理服务 通过 Let’s Encrypt 为 IP 地址签发免费 SSL 证书
实现备份3-2-1原则
2026-02-21 · via 涛叔

NAS上线之后便部署了 Immich 来保存照片1。自托管虽然空间够用,但数据安全却需要自行保障。为此,我参考3-2-1原则制定了数据备份方案,今天分享给大家。

💡Tip

备份3-2-1原则为即为3个副本、2个不同备份介质、1个异地灾备中心。即,数据保留3份,备份在2个不同备份介质中,同时还有至少1个异地容灾数据中心。

我在 NAS 设备一文2中已经讲过,因为存储价格高企,只买了两块4T的硬盘。如果做 RAID,最大容量只有4T,很不划算。但为了数据安全又不得不备份数据。这可如何是好呢?

我想的方案是在应用导致备份数据。简单来说就是通过工具自动备份照片等核数据。比如我的两块硬盘 A 和 B,Immich 数据指定保存到 A 上,然后再通过工具定时将数据同步到 B 上,这就实现了最基本的数据备份。只要不是两块硬盘同时坏,数据就不会丢。

因为两块硬盘在同一设备上,备份工具有多种先择。最简单也最常用的就是 rsync,可以实现增量备份。下面指令就能完成备份:

rsync -avP /a/immich /b/backup

首次执行会复制全部数据,后续再执行只会复制新增的数据,非常高效。

但我却不建议在这种情形下使用 rsync,因为它缺少一种核心特性——数据快照!

数据快照可以解决为数据版本。将磁盘上的照片和视频数据看成一个整体,每天都会增删。我希望可以把每天的数据状态用快照来固定下来。如果今天不小心删除了某些文件,就可以回滚到昨天的版本。

自己误删除的场景问题还不大,最危险的是设备被黑客控制,它们可能将所有数据都加密,然后勒索赎金。如果不用快照而是直接用 rsync,那么家时备份工具可能会用加密后数据来覆盖正常的数据,从而丧失保护作用。而用了快照就不同了,它只能影响最新的快照,而无法破坏已经备份的版本。

带数据快照的备份工具也有很多,我这里用的是 BorgBackup,它支持快照、加密、压缩等功能。

在使用之前需要先创建备份仓库:

borg init --encryption=none $BACKUP_PATH/immich

我这里禁用了加密功能。首先,我是自己的设备,不需要加密数据;其次,加密数据会额外消耗算力,耗电不说,还会增加备份时长。所以我就禁用了。如果大家需要将数据备份到三方的服务器,那确实应该开启加密。这部分可以自己用 AI 查询。

创建仓库之后就可以备份数据了。备份数据需要指定快照名字:

borg create --stats "$BACKUP_PATH/immich::{now}" $UPLOAD_LOCATION \
        --exclude $UPLOAD_LOCATION/thumbs/ \
        --exclude $UPLOAD_LOCATION/encoded-video/

这里后面的::{now}表示用当前时间做版本号。这里我还用--exclude跳过一些临时目录,里面的内容可以通过 Immich 生成,没有必要占用宝贵的磁盘空间。

数据备份之后可以通过list子命令查看快照:

borg list immich/
2025-12-31T04:00:04  Wed, 2025-12-31 04:00:05 [700665f3312ee979...]
2026-01-31T04:00:04  Sat, 2026-01-31 04:00:05 [91eac62238eec0aa...]
2026-02-28T04:00:04  Sat, 2026-02-28 04:00:04 [b3e87ce3b3e63c95...]
2026-03-01T04:00:04  Sun, 2026-03-01 04:00:04 [727e7272739f5f01...]
2026-03-08T04:00:04  Sun, 2026-03-08 04:00:04 [c52dfd6f81447c18...]
2026-03-15T04:00:04  Sun, 2026-03-15 04:00:04 [7ce6672c22950384...]
2026-03-16T04:00:04  Mon, 2026-03-16 04:00:04 [1be999423649aa5f...]

注意第一列就是前面说的版本号。备份之后我们就可以查看或者提取相关数据:

# 查看快照文件目录
borg list $BACKUP_PATH/immich::2026-03-16T04:00:04
# 提取快照内容到当前目录
borg extract $BACKUP_PATH/immich::2026-03-16T04:00:04
# 删除快照
borg delete $BACKUP_PATH/immich::2026-03-16T04:00:04

每天生成快照会占用大量磁盘空间,我们可以制定清理策略。比如最近7天每天保留一个快照,最近4周每周保留一个快照,最近3个月每月保留一个快照,可以执行如下命令:

borg prune \
  --keep-daily=7 \
  --keep-weekly=4 \
  --keep-monthly=3 \
  $BACKUP_PATH/immich

borg 会自动删除过期的快照。但删除后不会清理数据,为此还需要执行:

borg compact $BACKUP_PATH/immich

好了,到现在我们就完成了最基本的数据备份。要满足3-2-1原则,我们还得再做一次异地备份。通常大家会将备份数据上传到网盘。但我家情况特别,有两个小院,而且已经通过 10G 光纤打通3,所以我就把异地备份数据放到另一个小院了。

另一个小院因为不住人,只放了一台 GL-iNet A1300 迷你路由器。好在我还有一块2T闪迪固态移动硬盘,就用它们保存数据了。这台路由器上刷了 OpenWRT 系统,接入移动硬盘还需要额外安装软件包4

简陋的异地备份设备

然后就用 rsync 来同步数据就行了:

rsync -avzP --delete /data2/backup root@a13.lan:/mnt/sda1

A1300 性能较差,而 rsync 走 ssh 又需要加密,所以首次全量同步性能较差,只有 10MB/s,白瞎了我 10Gbps 的网络🤦‍♂️好在后续只会同步增量数据,问题不大。数据无价,先确保安全,再想办法提升性能。

💡Tip

还有细节需要提一下,备份数据使用 root 账号,运行 Immich 使用普通账号。这样即便 Immich 服务被黑客攻破,它也很难获得 root 权限来操作备份数据。

以上就是我的3-2-1备份方案。在保障数据安全的前提一下,尽量复用已有设备,减少浪费,算是一种比较经济的方案。但这套方案还不够完善。虽然异地备份可以抵抗火灾这类的问题,但两个小院毕竟在一个村里,如果有洪水或地震,可能也会完全丢失数据,后续还是有必要在云端备份数据。

来一张 nano-banana-pro 根据本文内容生成的总结图片😂

数据备份3-2-1方案

  1. ./immich-with-podman.html↩︎

  2. ./nas.html↩︎

  3. 有兴趣可以看我家的网络拓扑 ./network.html↩︎

  4. 请参考官方文档 https://openwrt.org/docs/guide-user/storage/usb-drives↩︎