0. rclone 对象存储同步工具

rclone 对象存储同步工具

# 安装
curl -O https://downloads.rclone.org/rclone-current-linux-amd64.zip
unzip rclone-current-linux-amd64.zip
cd rclone-*-linux-amd64

sudo cp rclone /usr/bin/
sudo chown root:root /usr/bin/rclone
sudo chmod 755 /usr/bin/rclone
# 配置
配置可以直接添加配置文件的方式或者通过进入交互式配置会话命令一步步的完成配置。
默认配置完成的后配置文件都保存在:/root/.config/rclone/rclone.conf 目录下。

[tencent-cos] # 自定义的名称
type = s3  # 存储类型,参考官方文档所有支持的类型
provider = TencentCOS  # 提供商,参考官方文档或者全部
env_auth = false   # 不通过环境变量配置认证
access_key_id = AKxxxxxxxx  # 腾讯云后台生成的密钥key
secret_access_key = Secretxxxxxxx # 腾讯云后台生成的密钥secret
endpoint = cos.ap-chengdu.myqcloud.com # 腾讯云cos所在的地区,看你所在存储桶的公网地址
# 语法
# 本地到网盘
rclone [功能选项] <本地路径> <配置名称:路径> [参数] [参数]
# 网盘到本地
rclone [功能选项] <配置名称:路径> <本地路径> [参数] [参数]
# 网盘到网盘
rclone [功能选项] <配置名称:路径> <配置名称:路径> [参数] [参数]

举例:
# 同步本地/data/file的文件夹内容到tencent-cos存储下的/beifen文件夹中,并且排除/root/excludes.txt中指定的文件内容
rclone sync /data/file tencent-cos:/beifen --exclude-from '/root/excludes.txt'

# 两个网盘文件同步
rclone copy 配置网盘名称1:网盘路径 配置网盘名称2:网盘路径
命令列表
使用 rclone --help 可查看所有命令,这里只列出常用的命令,其他的命令可以看官方文档详细了解:
命令  说明
rclone copy 复制
rclone move 移动,如果要在移动后删除空源目录,加上 --delete-empty-src-dirs 参数
rclone mount    挂载
rclone sync 同步:将源目录同步到目标目录,只更改目标目录
rclone size 查看网盘文件占用大小
rclone delete   删除路径下的文件内容
rclone purge    删除路径及其所有文件内容
rclone mkdir    创建目录
rclone rmdir    删除目录
rclone rmdirs   删除指定环境下的空目录。如果加上 --leave-root 参数,则不会删除根目录
rclone check    检查源和目的地址数据是否匹配
rclone ls   列出指定路径下的所有的文件以及文件大小和路径
rclone lsl  比上面多一个显示上传时间
rclone lsd  列出指定路径下的目录
rclone lsf  列出指定路径下的目录和文件
常用参数
命令  说明
-n = --dry-run  测试运行,查看 rclone 在实际运行中会进行哪些操作
-P = --progress 显示实时传输进度,500 ms刷新一次,否则默认1分钟刷新一次
--cache-chunk-size 5M   块的大小,默认 5M 越大上传越快,占用内存越多,太大可能会导致进程中断
--onedrive-chunk-size 100M  提高 OneDrive 上传速度适用于G口宽带服务器
--drive-chunk-size 64M  提高 Google Drive 上传速度适用于G口宽带服务器
--cache-chunk-total-size SizeSuffix 块可以在本地磁盘上占用的总大小
--transfers=N   并行文件数,默认为4。在比较小的内存的VPS上建议调小这个参数,比如 128M 的小鸡上使用建议设置为1。
--config string 指定配置文件路径,string为配置文件路径
--ignore-errors 跳过错误
--size-only 根据文件大小校验,不校验hash
--drive-server-side-across-configs  服务端对服务端传输
日志
rclone 有 4 个级别的日志记录,ERROR,NOTICE,INFO 和 DEBUG。默认情况下,rclone 将生成 ERROR 和 NOTICE 级别消息。

-q - rclone将仅生成 ERROR 消息。
-v - rclone将生成 ERROR,NOTICE 和 INFO 消息,推荐此项。
-vv - rclone 将生成 ERROR,NOTICE,INFO和 DEBUG 消息。
--log-level LEVEL - 标志控制日志级别。
过滤
我们若同步的时候需要过滤掉一些不重要的文件的话,比如程序启动日志、敏感文件。

命令  说明
--exclude-from  排除文件或目录列表来自某个文件指定
--include-from  包含文件或目录来自某个文件指定
--filter-from   文件过滤规则来自某个文件指定
--exclude   排除文件或目录
--include   包含文件或目录
--filter    文件过滤规则,相当于上面两个选项的其它使用方式。包含规则以+开头,排除规则以-开头
文件类型过滤

比如 --exclude "*.bak",表示排除所有 .bak 结尾的文件,也可以写作 --filter "- *.bak"

比如 --include "*.{png,jpg}",包含所有 png 和 jpg 文件,排除其他文件,也可以写作 --filter "+ *.{png,jpg}"

--delete-excluded 删除排除的文件。需配合过滤参数使用,否则无效。

目录过滤

目录过滤需要在目录名称后面加上 /,否则会被当做文件进行匹配。以 / 开头只会匹配根目录(指定目录下),否则匹配所目录。这同样适用于文件。

--exclude ".git/" 排除所有目录下的.git 目录。

--exclude "/.git/" 只排除根目录下的.git 目录。

--exclude "{Video,Software}/" 排除所有目录下的 Video 和 Software 目录。

--exclude "/{Video,Software}/" 只排除根目录下的 Video 和 Software 目录。

--include "/{Video,Software}/**" 仅包含根目录下的 Video 和 Software 目录的所有内容。

大小过滤

默认大小单位为 kBytes ,但可以使用 k ,M 或 G 后缀。

--min-size 过滤小于指定大小的文件。比如 --min-size 50 表示不会传输小于 50k 的文件。

--max-size 过滤大于指定大小的文件。比如 --max-size 1G 表示不会传输大于 1G 的文件。

过滤规则来自某个文件

--exclude-from <规则文件> :从文件添加包含规则

--include-from <规则文件>:从文件添加删除规则

--filter-from <规则文件> :从文件添加包含 / 排除规则。比如 --filter-from filter-file.txt。

filter-file.txt 示例:

- secret*.jpg
+ *.jpg
+ *.png
+ file2.avi
- /dir/Trash/**
+ /dir/**
- *
环境变量
rclone 中的每个选项都可以通过环境变量设置。环境变量的名称可以通过长选项名称进行转换,删除 -- 前缀,更改 - 为 _,大写并添加前缀 RCLONE_。环境变量的优先级会低于命令行选项,即通过命令行追加相应的选项时会覆盖环境变量设定的值。

比如设置最小上传大小 --min-size 50,使用环境变量是 RCLONE_MIN_SIZE=50。当环境变量设置后,在命令行中使用 --min-size 100,那么此时环境变量的值就会命令行覆盖,最终生效的是 --min-size 100。

命令  说明
RCLONE_CONFIG   自定义配置文件路径
RCLONE_CONFIG_PASS  若 rclone 进行了加密设置,把此环境变量设置为密码,可自动解密配置文件
RCLONE_RETRIES  上传失败重试次数,默认 3 次
RCLONE_RETRIES_SLEEP    上传失败重试等待时间,默认禁用,单位s、m、h分别代表秒、分钟、小时
CLONE_TRANSFERS 并行上传文件数
RCLONE_CACHE_CHUNK_SIZE 块的大小
RCLONE_CACHE_CHUNK_TOTAL_SIZE   块可以在本地磁盘上占用的总大小
RCLONE_IGNORE_ERRORS=true   跳过错误
# 最佳实践
备份本地 /data/file 目录到腾讯云cos存储中,并设置定时任务每晚自动同步,这样可以达到定时备份重要文件上云的效果。

# 目录 /data/file 下创建 excludes.txt ,里面填写需要排除的文件列表。
vim /data/file/excludes.txt
logs/**  # 排除logs下所有文件
*.bak # 排除.bak结尾的文件
*.zip # 排除.zip结尾的文件

rclone sync -v /data/file tencent-cos:/beifen --exclude-from '/data/file/excludes.txt' >> /root/rclone.log 2>&1
手动执行一把,然后查看  tail -f /root/rclone.log 是否输出日志了,只要没报错则成功。
配置定时任务,每天自动执行
执行 crontab -e # 打开定时任务列表,跳到最后新起一行添加步骤2.成功的命令并保存,内容如下:(表示每晚3点30分进行同步)

30 4 * * * rclone sync -v /data/file tencent-cos:/beifen --exclude-from '/data/file/excludes.txt' >> /root/rclone.log 2>&1

实践

# 实践 oss 复制至 ceph
# 通过交互命令分别创建远程存储配置 oss_tidb_bak 和 ceph_tidb_bak
rclone config

rclone lsd oss_tidb_bak:tidb-bak

rclone lsd ceph_tidb_bak:tidbbak

# 同步数据
rclone sync -v oss_tidb_bak:tidb-bak/diiing-08-10-2024 ceph_tidb_bak:tidbbak/diiing-08-10-2024

nohup rclone sync -v oss_tidb_bak:tidb-bak/diiing-08-10-2024 ceph_tidb_bak:tidbbak/diiing-08-10-2024 &

# 双向同步
# 测试
rclone bisync remote1:path1 remote2:path2 --create-empty-src-dirs --compare size,modtime,checksum --slow-hash-sync-only --resilient -MvP --drive-skip-gdocs --fix-case --resync --dry-run

rclone bisync remote1:path1 remote2:path2 --create-empty-src-dirs --compare size,modtime,checksum --slow-hash-sync-only --resilient -MvP --drive-skip-gdocs --fix-case --resync
# 挂载
rclone mount ServerName:RemotePath TargetPath
# ServerName:之前你定义的服务器名称,它会作为本地磁盘名称出现;
# RemotePath:远程目录,不一定要是根目录,一个文件夹也是可以的,如果对应的文件夹不存在,那么会新建一个空文件夹;
# TargetPath:目标文件夹目录,一般写个新的盘符即可,但实际上,你也可以将其挂载指定的文件夹内;
# 给个示例(斜杠正反貌似都行):rclone mount MyCloudServer:C:\  Z:
# 注意:别把原来的盘符给覆盖了,一般从 Z 盘符倒着来写!
# linux
rclone mount remote:path/to/files /path/to/local/mount
# windows
rclone mount remote:path/to/files *
rclone mount remote:path/to/files X:
rclone mount remote:path/to/files C:\path\parent\mount
rclone mount remote:path/to/files \\cloud\remote

# 停止挂载
fusermount -u /path/to/local/mount
fusermount3 -u /path/to/local/mount
umount /path/to/local/mount
# 查看挂载
rclone mount --list
# 挂载到后台
rclone mount remote:path/to/files /path/to/local/mount --daemon
# 后台启动挂载服务
对于 Windows 操作系统,我们可以使用下面的命令使 Rclone 后台运行:
rclone_daemon.bat
@echo off
%1 start mshta vbscript:createobject("wscript.shell").run("""%~0"" ::",0)(window.close)&&exit
start /b 在这里输入你的第一条命令
start /b 在这里输入你的第二条命令

# 终止挂载服务
rclone_kill.bat
@echo off
taskkill /im rclone.exe /f
pause

# 开机自启
或许你还有开机让其自动启动的需求,其实也很简单,我们可以把写好的脚本,放在指定目录下就行,但这里要注意一点,
不能直接把 bat 脚本放过去,还要修改一下路径,把命令中原来的 rclone 改成:
文件路径\rclone.exe
不然系统会找不到 rclone 的位置。
指定的目录是:C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\