rclone的使用

以前同步数据习惯用rsync,最近使用AWS的Transfer Family服务,即SFTP,发现rsync无法用了,因为必须结合ssh,但是SFTP跟ssh不一样。曾经尝试将sftp挂载为本地盘使用rsync,但是发现这样的挂载不稳定,sftp会莫名断开。查询后发现rclone,测试后发现也不错。

安装:

sudo apt install unzip
sudo -v ; curl https://rclone.org/install.sh | sudo bash

这种安装方式会自动安装最新版,如果使用ubuntu命令安装:apt install rclone

默认安装的是1.50.2的旧版,这个版本会有很多莫名其妙的问题。例如与sftp使用key验证的时候,会提示:failed to parse private key file: ssh: key is not password protected

安装完成后,查看版本信息:

rclone --version

输入安装命令:sudo -v ; curl https://rclone.org/ | sudo bash后,如果提示rclone.org网站证书有问题,则可能是curl太旧导致,需要更新curl


在Synology NAS中安装rclone

在Synology或者其它Linux下安装的话,可以先下载安装包然后将rclone copy到对应目录下即可。
 

curl -O  https://downloads.rclone.org/rclone-current-linux-amd64.zip
unzip rclone-current-linux-amd64.zip
cd rclone-*-linux-amd64
##将rclone copy到对应文件夹
sudo cp rclone /usr/bin/
sudo chown root:root /usr/bin/rclone
sudo chmod 755 /usr/bin/rclone
##验证
which rclone

rclone配置

##创建配置文件是交互式,按照提示一步步输入即可
rclone config

##完成后的配置文件可通过命令找到保存位置:
rclone config file

##具体文件内容,后续可以通过修改文件实现更改配置的目的
vim /config-file-path

##这里最后一行我添加了1条规则,忽略修改S3云端文件创建时间,不然报错
set_modtime = false


具体命令:

rclone copy -P --no-update-modtime --size-only /share/Test/ aff:/Test/

解析:

-P 即显示过程,类似rsync -v

--no-update-modtime --size-only 无法根据文件修改时间检查是否同步,因为sftp上的时间是文件上传时间,始终跟本地上文件的时间不一致,如果不加会导致文件不断被重复上传,因此改为通过检查文件大小来决定是否同步旧文件,因为文件如果被修改过,size肯定会发生变化

/share/Test/ 指定本地需要同步的文件夹

aff:/Test/ aff是创建的配置的名字,:/Test/是SFTP上对应的文件夹

文件或文件夹过滤

--filter-from filter-list.txt

- /dir1/

- /dir2/

+ *.pdf

- **

这里- 或者 + 表示包括+ 还是排除 - 的意思

##查看远程连接目录
rclone lsd remote:

安装的时候如果提示这个错误:

unzip: invalid option -- 'a' BusyBox v1.30.1 (Ubuntu 1:1.30.1-7ubuntu3) multi-call binary.

表示本机当前没有安装unzip,通过 apt install unzip 安装即可


参数

--transfers=30: 默认同时传输4个文件,用此参数指定同时传30个文件,适用大量小文件需要上传的情况

--no-traverse:不检查远程服务器端是否已有本地文件,能加速本地数据上传,但是会导致数据重复传

--multi-thread-streams=5: 单线程和5线程,对比如下,适用需要上传大文件大情况

--inplace: 不产生临时文件

--min-age 1d: 传输超过1天的旧文件(即不传最新的文件)

--max-depth 3: 检查文件夹的层级,例如此为检查当前文件夹下3层内文件夹,超过的话则不同步

rclone sync

-delete-during: 如果源中文件已删除,则目的文件也删除,保持2边一致

rclone sync -P --delete-during --no-update-modtime --size-only --transfers=60 sync: /test-us-east-1/

--checkers=80:多线程对比文件

--fast-list: 快速扫描,实际测试不如checkers快

--no-traverse --retries 1:当目标端存在大量文件的时候,只检测源端而不检查目标端,不作对比,这样节省同步对比文件的时间,加上retries是防止中断时所有文件又重新再传一遍
 


2025-1-17 遇到一个新情况,配置pem文件,确认是正确的,也重新生成了几次,但是用同步命令时,却提示:failed to parse private key file ssh: no key found

目前原因未明,通过修改参数中的key_pem, 为 key_file, 使用默认生成的rsa key解决


优化建议

##并发与带宽优化
--transfers=30          # 已经设了30个并发传输,根据实际带宽和目标存储能力可调整
--checkers=16           # 增加检查并发数(默认8),加快文件比对速度
--buffer-size=64M       # 增大每个传输的内存缓冲(默认16M)
--s3-upload-concurrency=8  # 如果目标是S3,增加分片上传并发
--s3-chunk-size=64M     # S3分片大小,大文件场景下增大可减少请求数
##网络稳定性
--retries=5             # 失败重试次数(默认3)
--retries-sleep=10s     # 重试间隔,避免瞬间重试打爆服务端
--low-level-retries=10  # 底层HTTP重试
--timeout=300s          # 连接超时,大文件传输适当加大
--contimeout=60s        # 连接建立超时
##性能调优
--fast-list             # 用更少的API调用获取目录列表(适合大量文件场景,会多用内存)
--multi-thread-streams=4  # 单个大文件多线程下载
--no-traverse           # 如果源文件数远少于目标文件数,跳过目标目录遍历
##size-only的风险,如果只是日志文件(只追加不修改),--size-only 没问题
--size-only    #只比较文件大小,如果文件内容变了但大小没变就会漏传。如果数据完整性要求高,建议改用:
--checksum    # 用校验和比对,最准确但最慢

##日志与监控
--log-file=rclone.log   # 输出日志到文件,方便排查
--log-level=NOTICE       # 日志级别,调试时用 DEBUG
--stats=30s              # 统计信息输出间隔

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值