背景
多个复制,拷贝,同步文件场景,最大规模的是每次几千万规模的小文件需要从云上对象存储中拉取到本地。其他的诸如定期数据备份,单次性数据备份。
rsync是单线程的,开源的mrsync是多线程的,但适用范围没有rclone广
rclone几乎支持市面上所有的S3协议的存储,诸如各家云厂商的对象存储
这里只记录一下常用的参数
实践
首先要生成rclone配置文件
bash
rclone config
e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q>n # 新建一个远端
Enter name for new remote.
name> remoteoss # 远程连接指定名字
Storage> # 选择时请确认选择Amazon S3 Compliant Storage Providers开头的选项,具体数字可能会有所改变
provider> # 选择时请确认选择Any other S3 compatible provider(Other),具体数字可能会有所改变
env_auth> 1
access_key_id> aa
secret_access_key> bb
region> 1
endpoint> # 输入不同云上的对象存储的不同地域的endpoint
location_constraint> # 回车跳过
acl> 1 # 权限
# 保存配置即可
# 建议配置配置文件加密 因为里面包含了aksk敏感信息 每次执行rclone命令时要输入配置的配置文件密码
本地复制上云&下云将目录对调即可
bash
rclone copy --s3-use-multipart-etag false -vv --no-update-modtime --transfers 64 --s3-no-check-bucket --no-traverse --ignore-checksum --no-check-dest --ignore-case-sync \
--max-backlog 100000 --inplace --ignore-size --buffer-size 0 --s3-chunk-size 50M --s3-upload-cutoff 200M /data1 remoteoss:dir1/dir2/data1 > rclone_data1_241108.log 2>&1
本地不同目录间复制
bash
rclone copy --s3-use-multipart-etag false -v --no-update-modtime --transfers 128 --s3-no-check-bucket --no-traverse --ignore-checksum --ignore-case-sync \
--max-backlog 100000 --inplace --ignore-size --buffer-size 0 --s3-chunk-size 50M --s3-upload-cutoff 200M /data2/xx /home/xx/data2 > rclone_xx_241118.log 2>&1
删除目录及其子目录和文件
bash
rclone purge /mnt/data1 --transfers 32 --max-backlog 100000 --ignore-size --no-check-dest
参数 | 说明 |
---|---|
--s3-use-multipart-etag | false 禁用 S3 使用多部分上传时的 ETag 校验 |
--no-update-modtime | 禁止在文件复制时更新目标文件的修改时间 |
--transfers | 设置同时进行的文件传输数为 64 |
--s3-no-check-bucket | 不检查S3 存储桶是否存在 |
--no-traverse | 禁止在上传时遍历目标目录 |
--ignore-checksum | 忽略文件的校验和比较 |
--no-check-dest | 禁用目标文件的检查 |
--ignore-case-sync | 忽略文件名大小写的不同 |
--max-backlog | 设置上传队列的最大等待文件数量为 100000 |
--inplace | 该选项表示如果目标文件已存在且内容相同,rclone 会直接覆盖该文件而不是先删除再重新上传 |
--ignore-size | 忽略文件大小的检查 |
--buffer-size | 设置缓存大小为 0 字节减少内存占用 |
--s3-chunk-size | 更改默认分片的大小,提高带宽利用率 |
--s3-upload-cutoff | 文件上传切割的阈值当文件大于200MB进行分片 |
建议将日志等级-vv 调整为一个v,在执行千万级别文件复制时,日志文件高达20G。当然也可以通过脚本实现logrotate日志切割
基本上使用这些参数可以更好的利用现有的40g专线带宽,ib网络,U2硬盘 等资源。
reference
更多参数诸如限制带宽等,可以参阅文档