nas的自动备份工具的选择 Restic rclone duplicati等
#场景
既然是nas 就需要做异地备份。
#备份目的地
一般备份到网盘或对象储存比较划算。
如果数据量比较大,还是要备份到免费的网盘,比如阿里云盘 1-2T 123pan 2T,还有od gd等容量更大的选择。
用alist挂载后,只要不滥用,账号不会被封。
数据量不大话,尤其核心数据,可以备份到对象储存,比如 alioss也不贵 七牛还有免费的10G kodo
部分敏感数据需要加密储存。为了防止网盘删文件,尤其是小姐姐们,也需要加密储存。
部分数据 需要按照版本储存。
部分数据 需要按照原目录储存,方便在网盘可以直接访问。比如小姐姐们 可以直接存到pikpak
#关于duplicati
也是我第一个使用的备份程序
duplicati 是.net写的,可以装到pc 也可以装到服务器,支持linux(mono) ,也有docker版本
支持加密储存,支持增量,支持版本储存。
使用中发现的问题:
- 不支持按照原始目录储存方式
- 备份过程中会占用很大的本地硬盘空间
- 虽然他是基于rclone的,但不算是一个轻量化工具
#关于rclone
可以用sysnc方式实现同步,可以不占用本地磁盘,但不支持的
- 没有图形界面
- 不支持按照版本保存
#restic
支持常见的储存模式,也支持rclone挂载的储存。也就是alist挂载的网盘也没问题。
rclone是文件同步,也就是和大部分网盘软件一样,来源文件是什么样的,目的文件就是什么样的。restic是面向文件的专业备份工具,其在备份文件前将会先进行加密再传输,而且是增量备份,只备份变化的部分。
rclone并不记录文件版本,无法回溯特定时间点上的文件。restic会对每次备份生成一个快照,记录该时间点文件变化和存储结构,可以随时回溯到特定时间点的文件。
#最终的考量
考虑到 我要备份的文件主要有以下几种
- 文档类 修改频繁
- 代码类 gitea+github处理,不需要nas备份
- minio 思源笔记 修改频繁
- 影音视频 只需要同步
- 不合规的影音视频 需要单独同步备份到 境外网盘 或者加密同步到境内网盘
- 私人相册视频 加密同步到境内网盘
restic 不太熟悉需要时间看文档踩坑,最终决定 使用rclone+压缩包增量的方式,更底层 更轻量!
#最终
单独一个lxc(pve)平台运行rclone,配置文件中挂载了包括alist 私有minio 阿里云对象储存 在内的我常用的储存
并把部分储存挂载到本地,
然后用crontab 定时处理 ,全手动管理
#关于网盘的选择
简单的说,核心文件 还是加密放到 收费的对象储存 。
无关紧要的文件 ,放到哪家网盘都一样。
免费的网盘的话,依旧是阿里云盘比较良心,而且官方已提供api不滥用的话是完全合规的。
我这里也只有一个 904G 的账号,不存太多电影视频的话 足够用了。
百度网盘上传速度其实也还好,下载速度嘛没办法,如果需要取回的时候,开个会员就好。
123pan虽然有2T容量,但是实际测试 限制还是有一些。单个目录下文件数量不可以超过99个。
#准备工作
#宿主系统选择
alpine 够轻量,创建一个lxc 10009,去掉 非特权容器的勾号,选择 alpine镜像,磁盘空间,选择 默认 8G 。因为部分tar需要临时缓存
创建完成后 在选项 功能里面 勾选上 嵌套 NFS SMB fuse
#修改源和时区
sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
apk add tzdata
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo "Asia/Shanghai" > /etc/timezone
apk del tzdata
rm -rf /var/cache/apk/*
#安装ssh
这个不是必须的 不装了,要装的话
apk add openssh
rc-update add sshd boot
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config
service sshd restart
#准备所需软件
我考虑了一下,还是选择用 7zip作为增量备份工具,而不是xz ,因为不想学。。。
apk add p7zip
apk add wget
wget -c https://downloads.rclone.org/v1.62.2/rclone-v1.62.2-linux-amd64.zip
7z x rclone*.zip
cp rclone-*/rclone /usr/bin/ #复制到bin目录
rm -rf rclone*
#准备rclone配置文件
可以直接用
rclone config --config /root/rclone.conf
配置,也可以手写,配置文件可以存到自己的笔记里面。不再多说
这里要 rclone 挂载了 自己的nas,我这里用webdav挂载的 cloudreve
然后挂载 alist 阿里云 对象储存等
#最终rclone内的节点如下
Name Type
==== ====
alist webdav #公网
alist-local webdav #内网
cloudreve webdav #公网
cloudreve-local webdav #内网
oss-qd s3 #公网
oss-sh s3 #公网
*-local的是用内网链接的
#测试
rclone lsd alist:/ --config /root/rclone.conf
rclone lsd alist-local:/ --config /root/rclone.conf
rclone lsd cloudreve:/ --config /root/rclone.conf
rclone lsd cloudreve-local:/ --config /root/rclone.conf --no-check-certificate #忽略证书检查
rclone lsd minio:/note --config /root/rclone.conf
rclone lsd minio-local:/note --config /root/rclone.conf
#关于minio的一点补充
Minio目前并不支持所有的S3特性。特别是它不支持MD5校验(ETag)或者是元数据。这就表示Rclone不能通过MD5SUMs进行校验或者保存最后修改时间。不过你可以用Rclone的—size-only flag。
rclone lsd minio: #查看储存桶
rclone mkdir minio:bucket #创建一个储存桶
rclone --size-only copy /path/to/files minio:bucket #复制
rclone --size-only --dry-run sync /path/to/files minio:bucket #测试同步
rclone --size-only sync /path/to/files minio:bucket #标准同步