转载声明:
本文很大程度上参考了 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, 然后配置 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.