Skip to content

如何加密备份你的 NAS 数据

发布于  at 16:30

RClone 的缺点

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

当然也有一些改进点:

加密备份工具的对比

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

可以看看这个帖子

Duplicati

阿里云 OSS

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

WebDAV

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

WebDAV => OSS

可行。

WebDAV => adrive

可行。

S3 => adrive

可行。

RClone

可行。

Duplicacy

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

Kopia

也是一个非常优秀的工具,但它还在 beta 阶段,这次就不详细说了

储存终点的选择

国内云盘

阿里云 OSS

2B 的产品,速度、稳定性、可用性全都超高,完爆网盘,不会有限制或者陷阱,明码标价。以下仅讨论最常用的阿里云 OSS,其他 S3/OSS 同理。

标准储存

标准储存有几个活动挺划算的,没有坑:

深度冷备份相对来说最划算:

其他

欢迎补充。

实战

Duplicati

我最先体验的是 Duplicati,Docker 安装,非常简单,GUI 也非常容易上手,就不再赘述了。

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
分享到: