软件研究之Rclone
1.前言
查到了一个叫 rclone 的工具可以实现从 阿里云oss 复制到 minio。
2.下载
从 官网 下载相应的安装包到服务器,我这放到 /usr/local/rclone。需要注意的是 rclone 版本。我阿里云上用的是 alibaba 3 (64 bit),内核: 5.10.134-16.1.al8.x86_64 (x86_64),平台:amd64 的,所以我选择了 rclone 的 Intel/AMD - 64 Bit。
3.编辑配置文件
新建 vi /usr/local/rclone/rclone.conf 配置文件。
1 | [oss] |
4.解压配置可执行权限
1 | # 进入目录 |
【1】.Rclone将阿里云Oss文件同步到Minio 这里直接有配置文件,可以采用配置文件。
【2】.如何使用MinIO 建立阿里云OSS代理 minio gateway
【3】.rclone 实现阿里OSS同步到MINIO 其实非常简单的一行命令,使用定时任务进行同步。
【4】.RcLone使用教程
【5】.Rclone 进阶使用教程 - 常用命令参数详解
【6】.Install
5.解决上传比较慢的问题
1 | --transfers 4 表示文件并行数量 |
【1】.备份同步神器 Rclone 使用教程 rclone 中的每个选项都可以通过环境变量设置。环境变量的名称可以通过长选项名称进行转换,删除 – 前缀,更改 - 为 _,大写并添加前缀 RCLONE_。环境变量的优先级会低于命令行选项,即通过命令行追加相应的选项时会覆盖环境变量设定的值。
【2】.rclone从存储桶到文件系统的传输速度慢 这里有几个参数可以调整
6.rclone同步到alist
同步到百度网盘 编辑 rclone.conf 配置文件,填入如下的内容,因为这个密码需要加密后的密码,所以只能通过 rclone config 的方式进行生成配置
1 | [百度网盘] |
(1)配置步骤
1 | ./rclone config |
(2)查看目录
1 | # 查看alist的目录 baidu: 等于配置文件里面的名字 |
(3)挂载好之后进行同步
1 | /usr/local/rclone/rclone copy -v oss:/hjkj-drone/drone baidu:/zjhjkj/drone --fast-list --drive-acknowledge-abuse --s3-chunk-size 64M --checkers 32 --transfers 32 > /usr/local/rclone/logs/rclone_baidu.log |
注意
为了解决大文件上传的问题,如果使用默认的配置的话,会导致大文件无法上传,我测试的时候,是超过 20M 就无法上传了,于是我坐了下面的一些操作,成功的上传了大文件,但是相应的,上传速度就会慢点很多。
(1)需要进行自定义破解ua:pan.baidu.com
(2)上传线程数需要设置为 1,设置为其他的会出错
(3)rclone传输的时候,也需要设置为 1,否则也会出错。
1 | /usr/local/rclone/rclone copy -v oss:/hjkj-drone/drone baidu:/zjhjkj/drone --fast-list --drive-acknowledge-abuse --s3-chunk-size 64M --checkers 2 --transfers 2 --timeout 120m |
(4)关于页面上的 web 代理,这地方我暂时想不明白到底怎么回事,我觉得关闭 web 代理,上传的速度可能会更快一些。
【1】.分享一下总结的rclone挂载百度网盘,迅雷网盘的博客
【2】.百度网盘官方linux+rclone定时转存脚本–解决你的百度网盘转存到onedrive或googledrive问题
【3】.非常规网盘研究 篇二:rclone+alist挂载百度网盘,天翼云盘等各种网盘为本地数据 建议选代理模式,如果是外网的话302跳转可以绕过服务器直接访问网盘,速度要更快也不占用alist服务器带宽。不过302跳转可能要设置请求header来适配各家网盘。
【4】.不过302跳转可能要设置请求header来适配各家网盘
【5】.rclone和alist挂载网盘当本地磁盘 这里有常见的 rclone 命令,还有开机启动的问题,最后也是用的这个里面的一些东西弄好的自己的配置,这里也是有部分不一样的,但是大部分还是可以参考的,这里也有rclone的很多参数信息可以查看
【6】.rclone和alist挂载网盘到本地 使用了 docker 部署了 alist 。使用二进制包安装了 rclone,通过 rclone config 配置了链接。挂载到本地,开机自动挂载,还有就是接触挂载。
【7】.最完整rclone挂载网盘到本地(Alist篇)解决方案 后台模式挂载到本地,将189Cloud挂载到本地目录/webdav。开机自动挂载 。
8.rclone移动
这里我测试了,如果一个文件很大,没有上传完成,在上传期间,那么使用 rclone 列举文件,就不会出现这个问题,等文件上传完成就可以查看到这个文件了。所以不会存在一个文件上传了一小部分,移动之后,就被删除的情况。
1 | ## 查看一级文件 |
【1】.rclone的基本用法 –max-backlog #N # 在 sync/copy/move 时使用,占用 N 倍 KB 内存;–bwlimit UP:DOWN # 上传下载限速,b|k|M|G
【2】.rclone_move命令行
【3】.rclone中文文档:常用命令大全
9.带宽
我遇到了一个问题,就是在前端运行的时候,上传速度可以跑满带宽,但是当我用 nohup 命令转到后台运行之后,就会导致带宽始终上不来。我为了解决这个问题,想了很多的办法。–bwlimit 10M:off 意味着将上传带宽限制为 10 MiB/s,下载带宽限制为 100 KiB/s。任一限制都可以“关闭”,意味着没有限制,因此只需限制您将使用的上传带宽。
后来我在运行脚本的地方,加了一个 –bwlimit off:off 参数,表示上传和下载都不限制,这才能使带宽跑满了。
1 | # 这意味着,周一的传输带宽将设置为 512 KiB/s。周五结束前将升至 10 MiB/s。周六 10:00 将设置为 1 MiB/s。周日 20:00 起不限量。 |
比特/秒 ,实际上就是我们常说的带宽,比如家庭网是 10M 带宽,真正的传输速率就是 10M/8 = 1.25Mib/s ,也就是每秒传输 1.25M 的数据。
【1】.–bwlimit=BANDWIDTH_SPEC
【2】.rclone使用技巧 注意,单位是字节/秒,而不是比特/秒。通常情况下,连接是以比特/秒来衡量的–转换时要除以8。例如,假设你有一个10Mbit/s的连接,你希望rclone使用它的一半–5Mbit/s。这就是5/8 = 0.625 MiB/s,所以你要为rclone使用–bwlimit 0.625M参数。
10.过滤
如果你把任何规则以 / 结尾它只会匹配目录,如果以 / 开头,那么就是从根目录开始匹配。
1 | # 过滤全部的 snapshot 目录,和以 kmz 文件结尾的文件 |
【1】.rclone 过滤,包含和排除规则 这里是单星号。–exclude “/{.git,public,resources}/“,排除 .git、public 和 resources 文件夹
【2】.rclone sync exclude directory
【3】.过滤,包含和排除规则
【4】.如何使用rclonesync排除特定名称的子目录? 这里是双星号,–exclude
**/test/**
排除名称包含 test 的子目录11.同步到本地目录
问题
(1)Segmentation fault
使用脚本安装之后,直接无法启动,出现了 “段错误” 问题。
【解决方案】
我重新下载了 alist ,找了 alist-linux-amd64.tar.gz ,然后解压后上传到服务器,替换了自动脚本安装的 alist 程序,解决了这个问题。
【1】.alist启动失败
【2】.用的是Alibaba Cloud Linux 3,安装失败!密码无法更改,应用也无法启动!
【3】.常见的Linux下的段错误 及解决办法
【4】.Linux程序运行出现Segmentation fault (core dumped)的通用解决方法
(2) context deadline exceeded (Client.Timeout exceeded while awaiting headers) #2: Post “https://d.pcs.baidu.com/rest/2.0/pcs/superfile2
这个就是我上传650M文件的时候,出现了这个,我尝试了很多的方法,在网页上显示的错误。
【解决方案】
(1)后来我将上传线程数由 3 改为了 1,就可以完成上传了。
【1】.付费求alist百度网盘rclone挂载webdav可上传大文件方案 使用了超时时间:–transfers 1 –timeout 60m
【2】.百度网盘bug
【3】.SVIP百度网盘WebDAV无法播放
(3)405 Method Not Allowed (WebDAV)
在将使用rclone进行大文件传输的时候,就会出现这个问题,小于20M的文件就可以上传,但是大于 20M 的就无法上传了,真是不知道为什么了。
【尝试方法】
(1)将破解ua,由 pan.baidu.com,改为了:netdisk
(2)尝试新建一个 alist 用户,没有效果。
(3)降低 rclone 一次传输的文件数量,通过 –checkers 4 –transfers 4,限制一次只能传输 4 个文件,可是不行。
(4)尝试增加了 –multi-thread-streams 0 这个方法,还是不行
(5)尝试查看是不是文件路径过长,就算是短的名字,还是不行。
【解决方案】
这个是综合的解决方案
(1)需要设置 ua 为 pan.baidu.com
(2)为了保证正常传输,还需要合理的设置传输文件个数,rclone的 –transfers 需要设置为1
1 | /usr/local/rclone/rclone copy -v oss:/hjkj-drone/drone baidu:/zjhjkj/drone --fast-list --drive-acknowledge-abuse --s3-chunk-size 64M --checkers 32 --transfers 1 --timeout 120m |
(3)如果 alist 的刷新码过期了,也会出现这样的问题,解决方案就是重新扫码登录,获取新的刷新码,然后填上。
【1】.405 Method Not Allowed (WebDAV)
【2】.data/temp空间无限制,导致copy时磁盘占满出现405 Method Not Allowed 这里说是 data/temp 文件大小的限制
【3】.挂载Alist上传大文件报Method Not Allowed: 405 错误 这是onedrive/sharepoint WebDAV的限制,非alist bug。
【4】.Rclone搭建Webdav服务+Systemd保活+Nginx反代+CF加速一条龙 如果少了这一段部分应用用 POST 方法上传 js 和 png 等静态文件时 Nginx 那边会报 method not allowed: 405 错误。这一段配置是我自己摸爬滚打参考了无数博客试验出来的,貌似全网独一无二,网上主流的做法是加一段“error_page 405 =200 http://$host$request_uri;”这样的配置,但是这个配置加了之后我常用的一个可以同步 webdav 的同步软件 goodsync 会报奇怪的错误,所以也就是说主流的做法没卵用。
【5】.webdav连接失败,报405 method not allowded,求帮助 这里也没有解决这个问题,但是这里说的是新建一个用户,我尝试过了,不行。
【6】.云服务器 rclone挂载后上传大文件失败 自己研究出的解决办法: –multi-thread-streams 0,单线程 上传成功,默认4线程最后合并阶段出错
【7】.405 Method Not Allowed (WebDAV) 这里显示的问题是 文件名可能太长了,但是我尝试过了,好像不行。
(4)Not deleting source as copy failed: corrupted on transfer
当我用rclone进行传输的时候,结果报了这个错误,暂时不知道到底是cpolar的问题还是rclone的问题。也就说说文件传输失败了
【尝试方法】
(1)后来我用了cpolar的域名,结果出现错误:Failed to copy: multipart upload: failed to read source: unexpected EOF
(2)我尝试换了一个域名,用 nas.cpolar.cn 域名进行minio上传测试,使用 rclone 文件文件转移,结果就是小文件没有问题,但是一旦超过了3.5G,最后就会报错:corrupted on transfer, Not deleting source as copy failed: corrupted on transfer。传输中断,我尝试了很多次,都是这个样子。
(3)使用 minio 提供的 web 端进行传输,但是却可以传输 3.5G 的文体。通过查看 rclone 的传输日志,明明是3.5G的文件,最后传输了竟然是超过了 100%,达到了 156%,有 5.4G 文件。
【解决方案】
(1)升级版本从 1.66 升级到 1.67,没想到升级之后就可以了。
(2)如果还是不行,增加参数 –ignore-size 强制进行复制,但是这样做的后果我无法估计。还有一个参数就是 –ignore-checksum,这个参数也是忽略检查。
1 | --ignore-case-sync Ignore case when synchronizing |
【1】.分布式文件存储系统minio、大文件分片传输 1、Promise对象;2、Blob对象和File 对象;3、FileReader函数;4、前端文件转MD5
【2】.rclone迁移客户数据进程中断 1.首先检查服务器网络连接,客户反馈无人进过机房,未曾有过网络连接失败的情况;2.检查服务器日志,cpu、内存和磁盘读写都正常;3.检查服务器日志,cpu、内存和磁盘读写都正常;4.排查发现遍历源目录的时间约为1天,怀疑是由于目录内的文件数量太多导致rclone进程down掉;
【3】.rclone怎么传一些文件老是有几个失败啊 拷贝到OneDrive报错 size differ,这是一个已知的微软的问题,在上传办公文件(word、xls等)和html文档的时候,OneDrive会偷偷修改文件大小,解决方法:拷贝完毕其他文件后确认只剩这些因为size differ报错而无法拷贝的文件了,则添加下述指令,–ignore-checksum –ignore-size,忽略文件检查指令,强制拷贝。
【4】.Rclone常见用法和问题解决办法 1.如果使用rclone出现corrupted on transfer: MD5 hash differ的错误提示,原因可能是rclone认为的文件的md5值与google drive提供的md5值不一样,解决办法就是加上 –ignore-checksum 参数。2.使用rclone进行google drive服务器之间拷贝方法,先把别人共享的文件夹点击右键,选择 添加到“我的云端硬盘”,这样你的15G的个人google drive就有了这个文件夹的快捷方式,然后使用命令rclone copy –transfers=100 –progress –stats-one-line –drive-server-side-across-configs 你刚刚保存的文件夹快捷方式: 你的无限网盘路径。3.如果发现拷贝不动了,但是有速度,说明你拷贝的数据量超过了google drive每天规定的750G上限,办法是换个gmail账户,然后在重复第二步,拷贝,重复的文件会自动忽略。。4.last error was: corrupted on transfer: sizes differ,出现上述错误,可以添加参数 –ignore-size
【5】.Rclone throwing error “corrupted on transfer: sizes differ” First try the same with the latest rclone version. You are using quite old one. 这里从 1.61.1 升级到 1.66.0 解决了这个问题。
【6】.Global Flags
【7】.rclone的基本用法 –s3-chunk-size 默认值 5M
【8】.rclone flag 这里有特别多的参数说明,可以作为查阅手册
【10】。rclone 工具使用及问题汇总 内核不支持插件问题;安装问题;rsync 传输错误;md5 校验错误;一致性问题;目录显示问题;windows 使用问题;缓存目录过大问题
【11】. Not deleting source as copy failed: corrupted on transfer: sizes differ 3761874597 vs 5368642250 这里通过升级版本解决了。
【12】.minio error Unexpected EOF for .metacache
【13】.-s3-chunk-size int option for S3 users 我的网络具有低延迟和良好的网络带宽,在这种用例中,为传输大文件制作太小的块(5M)无助于获得最佳性能。
【14】.Rclone文件传输设置禁止分段,不产生partial类型临时文件 如果没有–inplace(默认值),rclone将首先上传到一个扩展名如下的临时文件,其中XXXXXX表示一个随机字符串,.partial是–partial后缀值(默认值为.partial)。原始文件名。XXXXXX.部分(如果需要,rclone将通过截断原始文件名部分来确保最终名称不超过100个字符)。
上传完成后,rclone会将.partial文件重命名为正确的名称,覆盖此时的任何现有文件。如果上传失败,则.partial文件将被删除。