使用 restic 和 Backblaze B2 的 3-2-1 备份策略
摘要
一篇实操教程,讲解如何用 restic 加密备份工具与 Backblaze B2 云存储实现 3-2-1 备份策略,涵盖配置、systemd 自动化定时备份以及灾难恢复流程。
<p><a href="https://lobste.rs/s/9zcxev/3_2_1_backup_strategy_with_restic">评论</a></p>
查看缓存全文
缓存时间: 2026/10/12 05:42
# 3-2-1 备份策略 | Chuck Carroll
来源:https://chuck.is/paranoid/
---
## 使用 restic 和 Backblaze B2 实施 3\-2\-1 备份策略
发布日期:2026\-10\-09要遵循规范的 3\-2\-1 备份策略,你应该为重要数据保留三份副本:两份存放在本地不同类型的存储介质上,一份存放在异地。对于本地备份,我有一套DAS (https://en.wikipedia.org/wiki/Direct-attached_storage),配备两块 14TB 硬盘,组成 RAID 1 阵列1 (https://chuck.is/paranoid/#fn1),还有一台配备 4TB 硬盘的 RPI5 \(我最重要的数据大约有 1\.5TB\)。对于异地副本,我选择使用 Backblaze 的 B2 云存储和 restic。Backblaze 是一家云存储提供商,而 Restic 会在上传前对文件进行加密和分块。Restic 负责上传、加密/解密以及去重。
### 设置 Backblaze B2 存储桶
首先,我需要配置 Backblaze。
1. 创建 Backblaze 账户
2. 创建一个存储桶 \(我将自己的存储桶命名为 restic\-ganymede\)
3. 在应用密钥下创建一个密钥。务必复制 keyID 和 applicationkey,因为它们只会显示一次。我将这些信息保存在密码管理器中 Backblaze 的备注里,标记为“B2 账户 ID 和密钥”。
4. 在存储桶中,选择“生命周期设置”,然后选择“ 仅保留文件的最新版本”,否则经过清理的分块仍会保留下来,最终你还得为它们付费。
5. 添加一种付款方式,否则备份在用完最初的 10GB 免费额度后就会失败。
### 在本地机器上设置 restic
接下来进行本地配置。创建目录 /etc/restic`sudo mkdir /etc/restic`。/etc/ 是存放系统级配置的常规位置。这一点很重要,因为 systemd 服务以 root 身份运行,而不是以用户身份运行。在这个新目录中创建 b2\.env,并添加以下内容:
``
B2_ACCOUNT_ID=your_account_ID
B2_ACCOUNT_KEY=your_applicationKey
RESTIC_REPOSITORY=b2:restic-ganymede:ganymede
RESTIC_PASSWORD_FILE=/etc/restic/password
``
使用`openssl rand \-base64 32 \| sudo tee /etc/restic/password`创建密码。务必将密码保存在密码管理器中 \- 甚至可以考虑打印出来。我也将它保存在密码管理器中 Backblaze 的备注里,标记为“restic 仓库加密密钥”。如果丢失这个密码,你将无法解密数据。然后使用`sudo chmod 600 /etc/restic/password /etc/restic/b2\.env`确保权限设置正确。
### 开始首次运行
现在初始化并开始首次运行:
``
sudo -i
set -a; source /etc/restic/b2.env; set +a
restic init
restic backup /path/to/photos /path/to/documents --verbose
``
对我来说,在上传速度最高为 60Mbps 的有线宽带连接上,上传 1\.2TB 数据大约花了 50 小时。Restic 会在将数据上传到 Backblaze 之前对所有内容进行加密。B2 只保存无法直接读取的加密数据块,因此即使这些数据泄露,也没有人能解密它们。不过,如果你丢失了密码,数据就无法恢复。
### 自动运行 Restic
完成后,就可以让 restic 的 systemd 服务按计划自动运行。我选择每天凌晨 3 点运行。运行`sudo vim /etc/systemd/system/restic\-backup\.service`并添加以下内容:
``
[Unit]
Description=Restic 备份到 B2
After=network-online.target
Wants=network-online.target
[Service]
Type=oneshot
EnvironmentFile=/etc/restic/b2.env
ExecStart=/usr/bin/restic backup /path/to/photos /path/to/documents
ExecStart=/usr/bin/restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune
Nice=10
IOSchedulingClass=idle
``
然后使用`sudo vim /etc/systemd/system/restic\-backup\.timer`设置定时器,并添加以下内容:
``
[Unit]
Description=每晚运行 restic 备份
[Timer]
OnCalendar=*-*-* 03:00:00
RandomizedDelaySec=1800
Persistent=true
[Install]
WantedBy=timers.target
``
使用以下命令启用服务:``
sudo systemctl daemon-reload
sudo systemctl enable --now restic-backup.timer
sudo systemctl list-timers restic-backup.timer
``
### 灾难恢复
假设我的家庭办公室发生火灾,RAID1 阵列和 Pi5 都被烧毁了。我该如何恢复数据?我会先安装 restic,然后重新创建这些文件:在`/etc/restic/password`中填入 restic 密码,在`/etc/restic/b2\.env`中填入 Backblaze 的详细信息 \(B2keyID、applicationKey、存储桶名称以及 restic 密码文件的位置\)。这些详细信息都已保存在我的密码管理器中。对两个文件都执行 chmod 600。然后使用`set \-a; source /etc/restic/b2\.env; set \+a`加载环境变量文件,并运行`restic snapshots`确认可以访问备份。
创建用于存放恢复数据的目录,例如`sudo mkdir \-p /mnt/recovery`,然后使用`restic restore latest \-\-target /mnt/recovery`恢复数据。文件会按照原始路径存放在目标目录中,所以我会看到类似`/mnt/recovery/mnt/ganymede/`这样的路径,因此要做好相应规划。
偶尔运行`restic check`并实际测试一次恢复,大概也会很有帮助。我可不想在房子被烧毁后,又发现自己丢失了所有重要数据\!
这样一来,我现在晚上就能睡得更踏实一些了。
*感谢阅读。欢迎将意见、问题或建议发送至[\[email protected\]](https://chuck.is/cdn-cgi/l/email-protection#650d001c25060d10060e4b0c16)。*
---
1. 我不认为 RAID 阵列产生的重复副本属于 3\-2\-1 备份策略的一部分,因为两块磁盘保存的是同一个正在使用的文件系统,删除操作或数据损坏会同时影响两者。RAID 可以防范硬盘故障。↩ (https://chuck.is/paranoid/#fnref1)
相似文章
备份之道
一篇探讨备份策略与数据保护实践的文章,围绕可靠、简洁、持续一致的备份习惯这一理念展开。
restic/restic
restic 是一个快速、安全且高效的备份程序,支持多种操作系统和后端,如 S3、SFTP 和本地存储。
备份存储设置很糟糕
作者分享了他们使用Linux和Syncthing设置免费备份存储系统的个人经验,实施了3-2-1备份技术,以跨多个设备同步文件。
@LufzzLiz: https://x.com/LufzzLiz/status/2069769416930414980
介绍一个开源的一键备份程序,用于备份Codex和Claude Code的本地记忆,将闭源工具中的记忆资产收归本地,形成可读、可查、可迁移的记忆档案。
@bi_9527zx: https://x.com/bi_9527zx/status/2072183224781140038
详细教程,介绍如何备份 Hermes Agent(开源 AI Agent)的数据,包括使用官方命令、手动上传到 GitHub、自动备份方案以及恢复流程,强调数据安全的重要性。