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

# 修改源和时区
1
2
3
4
5
6
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

这个不是必须的 不装了,要装的话

1
2
3
4
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 ,因为不想学。。。

1
2
3
4
5
6
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配置文件

可以直接用

1
rclone config   --config /root/rclone.conf 

配置,也可以手写,配置文件可以存到自己的笔记里面。不再多说
这里要 rclone 挂载了 自己的nas,我这里用webdav挂载的 cloudreve 然后挂载 alist 阿里云 对象储存等

# 最终rclone内的节点如下

1
2
3
4
5
6
7
8
Name                 Type
====                 ====
alist                webdav  #公网
alist-local          webdav  #内网
cloudreve            webdav  #公网
cloudreve-local      webdav  #内网
oss-qd               s3       #公网
oss-sh               s3       #公网

*-local的是用内网链接的

# 测试

1
2
3
4
5
6
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。

1
2
3
4
5
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 #标准同步
Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计