使用 restic 和 Backblaze B2 的 3-2-1 备份策略

Lobsters Hottest 工具

摘要

一篇实操教程,讲解如何用 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)

相似文章

备份之道

Hacker News Top

一篇探讨备份策略与数据保护实践的文章,围绕可靠、简洁、持续一致的备份习惯这一理念展开。

restic/restic

GitHub Trending (daily)

restic 是一个快速、安全且高效的备份程序,支持多种操作系统和后端,如 S3、SFTP 和本地存储。

备份存储设置很糟糕

Hacker News Top

作者分享了他们使用Linux和Syncthing设置免费备份存储系统的个人经验,实施了3-2-1备份技术,以跨多个设备同步文件。