推荐一个非常好用的开源工具Rclone(我理解为"remote clone"远程克隆),网盘资源管理神器(上传、下载、同步),支持市面上绝大部分网盘提供商。配置简单,使用方便,最关键的是,它可以增量同步(只同步修改的内容),当作数据备份工具最合适不过了。
网盘我选择OneDrive,因为它下载不限速,缺点:当一个文件夹包含10000个以上文件,rclone会报错couldn’t list files: UnknownError
接下来我就演示下如何用Rclone将服务器数据自动备份到OneDrive
操作步骤
在本地电脑上安装rclone,这里以mac系统为例,其他系统安装方式可查阅官方文档:https://rclone.org/install/
brew install rclone
运行rclone config
命令,该命令会自动打开电脑上的浏览器,并生成config文件(mac系统~/.config/rclone目录)
rclone config
把生成的config目录复制到服务器上,然后在服务上运行rclone docker容器,(我个人比较喜欢用docker,rclone还有其他运行方式,参考官方文档:https://rclone.org/install/#docker)
docker命令如下:
# Usage:
# rclone sync source:path dest:path [flags]
# Flags:
# -P,--progress 命令执行进度
# --dry-run 试运行。只打印出会被上传的文件,但是不进行上传操作
# --filter-from 文件排除规则
# 语法
docker run --rm \
-e TZ=Asia/Shanghai \
# You need to mount the host rclone config dir at /config/rclone into the Docker container.
-v [config目录路径]:/config/rclone \
# You need to mount a host data dir at /data into the Docker container.
-v $PWD/data:/data:shared \
-v [需要备份的内容]:[挂载到容器中] \
rclone/rclone sync [需要备份的内容] [remote]:[对应的网盘路径] --filter-from [filter-list.txt文件路径]
# 例如:
docker run --rm \
-e TZ=Asia/Shanghai \
-v $PWD/config:/config/rclone \
-v $PWD/data:/data:shared \
-v /home/docker:/home/docker \
rclone/rclone \
sync [本地目录] [remote]:[远程目录] --filter-from /home/docker/rclone/filter-list.txt
过滤规则写到filter-list.txt
中
# 可以写:目录名或文件名
# 从上到下:最严格的排在最前面
# +号代表include -号代表exclude !号代表delete exsiting rule
- secret*.jpg
+ *.jpg
+ *.png
+ file2.avi
- /dir/Trash/**
+ /dir/**
最后,添加一条crontab任务,每天零点30分执行(为了和其他crontab脚本错开时间)
# 第一步:cd进入脚本目录
# 第二步:每次执行之前,删除log文件,避免log文件无限递增
# 第三步:执行脚本并将日志写入log文件
30 0 * * * cd [shell脚本所在目录] && rm -rf backup.log && /bin/bash start-backup.sh >> backup.log 2>&1
只有第一次才会上传全量数据,之后每次只会上传修改的部分。再也不用担心服务器的数据丢失了!当然,你也可以用同样的方式备份个人电脑数据。