Skip to content

如何加密备份你的 NAS 数据

发布于  at 16:30

RClone 的缺点

之前我们讲过如何用 RClone 将你的数据备份到云盘/OSS等远程存储服务,但 RClone 直接 sync 有这么几个缺点:

注意:rclone 同样支持加密增量备份,查看这篇文章

加密备份工具的对比

偶然间听到了以下几个加密备份工具。它们都可以实现:

可以看看这个帖子

Duplicati

阿里云 OSS

官方不支持,自己魔改太麻烦,而且增加了不确定性。

WebDAV

支持 WebDAV。那我们很快就想到先把云盘/OSS转成 WebDAV(我用的是 AList,最近新增了 S3 Server,也就是说可以把网盘转成 S3),再用它备份到 WebDAV。我尝试了一下:

WebDAV => OSS

可行。

WebDAV => adrive

可行。

S3 => adrive

可行。

RClone

可行。

Duplicacy

加强版 Duplicati,它拥有更强的备份功能(它自己和竞品做了比较),简单提几个要点:

Kopia

也是一个非常优秀的工具,但它还在 beta 阶段。我也尝试了一下,拥有前两者的所有优点,感觉比前面两个好用多了。具体看下面实战部分。

实战

Duplicati

我最先体验的是 Duplicati,Docker 安装,非常简单,GUI 也容易上手。我的主观感受是:

  1. 页面逻辑不够清晰,尤其是配置 S3 那里,表单逻辑混乱。
  2. 配置共享也有点麻烦,必须完整的导出文件再导入。
  3. 还有 ignore 语法我也不太喜欢。

Duplicacy

记录一下我探索 Duplicacy 的过程:

安装过程:官方社区没有直接可用的插件或 Docker 镜像。我的方法是直接从GitHub Releases下载可执行文件(可能需要使用chmod +x [file]命令),然后将其放入/usr/local/bin目录中。

WebDAV

有了上面的经验,我们来直接把备份终点设为 WebDAV

duplicacy init -encrypt -storage-name adrive share-bowen webdav://bowen@10.7.21.2:48080/duplicacy

报错:

Failed to load the WebDAV storage at webdav: Maximum backoff reached

我换了其他 WebDAV 实现也一样,应该是 duplicacy 本身的问题,又看了一眼文档:WebDAV 还在 beta 阶段

阿里云 OSS

那我再试试直接备份到 OSS 吧:

duplicacy init -encrypt -storage-name oss share-bowen s3://hangzhou@oss-cn-hangzhou.aliyuncs.com/xxx-deep-archived/duplicacy

遇到了上面提到了“能备份但不能校验”的问题。如果你用的是标准储存或归档储存并开启直读,应该不会遇到这个错误。我就不再继续实验了,后面的流程和备份到本地是一样的:

本地路径

提示:推荐使用下一节提到的 S3 协议代替本地路径,只需要更换 storage 终点即可。

# 初始化 storage 和 repository
duplicacy init -encrypt -storage-name dva -chunk-size 33554432 -max-chunk-size 67108864 share-bowen /mnt/user/backups/duplicacy
# [可选]配置忽略文件
duplicacy set -storage dva -filters /boot/config/plugins/user.scripts/scripts/duplicacyignore
# 备份
duplicacy backup -stats
# 检查备份
duplicacy list -files -chunks

测试一下在另一台设备上恢复:

mkdir Bowen
cd Bowen
# 初始化仓库时,会验证storage密码
duplicacy init -encrypt -storage-name dva share-bowen smb://bowen@10.7.21.2/backups/duplicacy
# 查看 revision number
duplicacy list
# 恢复版本为1的备份
duplicacy restore -r 1 -hash -ignore-owner -overwrite -delete -stats
# 查看恢复的文件
ls

官方推荐将不同 repositories 备份到同一个 storage,这样可以最大限度利用数据去重功能。

duplicacy init -encrypt -storage-name dva -chunk-size 33554432 -max-chunk-size 67108864 share-photos /mnt/user/backups/duplicacy
duplicacy set -storage dva -filters /boot/config/plugins/user.scripts/scripts/duplicacyignore

但我在实际操作中遇到了这个错误,有点像内存泄露,不过没关系,也就初始化的时候报错,多跑几次就行了,后面增量备份没有问题。

下面是我的定时任务脚本

#!/bin/bash

export DUPLICACY_DVA_PASSWORD=xxx

cd /mnt/user/Bowen
duplicacy backup -stats -storage dva
duplicacy prune -keep 0:360 -keep 30:180 -keep 7:30 -keep 1:7

cd /mnt/user/Photos
duplicacy backup -stats -storage dva
duplicacy prune -keep 0:360 -keep 30:180 -keep 7:30 -keep 1:7

export RCLONE_EXCLUDE_FROM=/boot/config/plugins/user.scripts/scripts/rcloneignore
export RCLONE_BWLIMIT="08:00,3M:off 01:00,off"
# sync 只修改远程, bisync 才是双向同步
# copy 只增加远程
rclone --checksum sync /mnt/user/backups/duplicacy alist:/189cloud/duplicacy --progress

S3 协议

AList 最近新增了 S3 Server(rclone 也有这个功能,我才知道),强烈推荐。所有操作和上面一节一样,把备份终点换成 AList 的终点,即:

duplicacy init -encrypt -storage-name alist-s3 -chunk-size 33554432 -max-chunk-size 67108864 share-bowen minio://189cloud@10.7.21.2:15246/189cloud/duplicacy
# 或者添加一个新 storage:
duplicacy add -encrypt -chunk-size 33554432 -max-chunk-size 67108864 -copy dva alist-s3 share-bowen minio://189cloud@10.7.21.2:15246/189cloud/duplicacy

定时任务脚本:

#!/bin/bash

export DUPLICACY_ALIST_S3_PASSWORD=xxx
export DUPLICACY_ALIST_S3_S3_ID=xxx
export DUPLICACY_ALIST_S3_S3_SECRET=xxx

cd /mnt/user/Bowen
duplicacy backup -stats -storage alist-s3 # -dry-run
duplicacy prune -keep 0:360 -keep 30:180 -keep 7:30 -keep 1:7

cd /mnt/user/Photos
duplicacy backup -stats -storage alist-s3
duplicacy prune -keep 0:360 -keep 30:180 -keep 7:30 -keep 1:7

用了几个月后,duplicacy 出现了 404 NoSuchKey 的错误,也没搜到,懒得反馈了,转头试用一下 Kopia:

Kopia

直接安装 Docker 版,我启动的时候报错找不到 htpasswd 文件,手动生成一个就好了。

进入 WebUI,虽然不够精致,但逻辑非常清晰,配置项细节非常多,比 duplicati 强多了。

备份很多照片也没报错。

分享到: