使用 Restic 加密增量备份到网盘

转载声明:
本文很大程度上参考了 KnightHart 发布的贴文 restic-全平台nas的加密增量快照备份神器.
但是在原文基础上有增添和修改, 若有侵权, 请联系 [email protected] 删除文章.

前言

搭建家庭 NAS 的前前后后我曾经格盘格过两次, 尽管每次都抢救回来了, 但是自那以后我一直在盘算着备份的主意. 和 KnightHart 的历程大致相同, 我尝试过:

  • 简单的 git 备份 (本地 .git 文件夹不断增大而且大文件有限制)
  • syncthing (是个好东西但是只支持在自己的设备间同步, 占磁盘) 
  • 百度网盘 (不安全、下载限速)
  • rclone + 白嫖的 Google Teamdrive (无法加密, 不支持增量)

解释一下 Google Teamdrive 为什么要加密吼. 前阵子网上出现了很多 Cloudflare Workers 脚本允许 User 给自己分配一个空间无限的, 挂在某大学名下的团队盘, 可以随便往里面扔、取文件, 而且一般 Google Personal Drive 的功能它都有哦. 但是唯一的问题是, 提供脚本的人是可以看到你网盘里的文件, 而且是可以任意上传下载的; 那这不就隐私性全没了吗? 所以如果要备份, 一定要加密的. 另外, Google Teamdrive 有传输速率限制, 所以备份如果不是增量的, 也会很麻烦.

这几天正在发愁呢, 诶, 突然看到了一个好东西, restic. 这玩意声称自己支持加密、增量备份、配合 rclone 使用, 工作原理我猜测是建立一个 Git 的仓库本地远端同步数据, 加密解密和其他一些功能由 restic 实现, 传输文件就交给 rclone. 不过缝合归缝合, 好像还是蛮好使的, 所以就上手捣鼓了一下, 在这里记录一下过程.

安装

官网的 Installation Guide 看这里: 点击跳转

我是在给跑 PiOS (Debian Based) 的树莓派做还原的, 所以安装指令就很简单, 直接:

sudo apt update
sudo apt install restic -y
sudo restic self-update

curl https://rclone.org/install.sh | sudo bash
sudo rclone selfupdate

接着就是要配置 rclone, 增添网盘了. 具体的步骤请见演示:

到此为止, 安装算是完成了.

创建远端 Restic 储存库

和 Git 的玩法差不多, 在开始备份之前, 得先在云端建立对应的 Restic 库.

sudo restic init --repo rclone:example_drive:example_backup
  • example_drive 对应的是视频中创建 rclone 时 config 的名字
  • example_backup 是 Restic 库的路径. 比如说, rclone:example_drive:backup/photos 代表在云端硬盘根目录下 backup 目录中, 建立了一个名为 photos 的储存库文件夹.

这个时候 restic 会要求输入密码, 照着指令做完不出意料的就会发现网盘中多了这么一个文件夹.

备份

下面是我上一次备份时输入的指令:

nohup restic -r rclone:example_drive:example_backup backup /mnt/data --password-file /tmp/pw.txt &

要先把储存库的密码放在 /tmp/pw.txt 中才能免输入密码上传哦.

本月宽带流量统计 

上传完成之后, 还可以使用 restic -r rclone:example_drive:example_backup check 来 check 备份好的文件有没有损坏. 

另外, 因为 Google Teamdrive 的限制, 上传时会一直报 Server 503 Error: Rate Limit Exceeded. 这个时候 Rclone 一般会重新尝试, 文件是一定会给你传上去的, 所以不用担心. 我在网上搜到了一个大佬的配置, 大概是下面这样:

nohup restic -o rclone.args="serve restic --stdio --drive-upload-cutoff 100G --verbose -vv --log-file=/tmp/rclonelogfile.txt --transfers 10 --checkers 10 --contimeout 600s --timeout 300s --retries 10 --low-level-retries 30 --drive-chunk-size 512M" -r rclone:example_drive:example_backup backup /mnt/data --password-file /tmp/pw.txt &

据说这个配置会快一点、Error 少一点什么的, 读者诸君可以自行尝试.

使用自己的 Google API

https://rclone.org/drive/#making-your-own-client-id


根据官网的解释, Rate Limit Exceeded 的原因是因为在没有特殊配置的情况下, 默认所有用户都是用同一个 Rclone 的 API 来访问各自的 Google Drive, 用的人多了自然就会很拥堵.

Google Drive API 的配额


根据官网的指示, 先搜索并启用 Google Drive API, 然后配置 Oauth 协议屏幕, 然后生成一个 Oauth 桌面应用. 生成完成之后建立一个 Rclone 配置档案, 在如上图所示的步骤将 Oauth Client ID 和 Client Secert 复制进去. (也可以使用 Rclone config -> Edit exsiting remote 编辑档案)

亲测配置完之后基本就不会碰到 Rate Limit Exceeded 的问题了.

查看与恢复文件

查看 snapshots:

restic -r rclone:example_drive:example_backup snapshots

恢复 snaptshots:

restic -r rclone:example_drive:example_backup restore [snapshot_id] --target /mnt/data

Thumbnail: Minimal wireless mouse design by Fakurian Design
If using the image violates your rights, or there’s anything related to copyright laws, please contact me at [email protected], I will deal with them immediately.

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *