Rclone:远端大文件传输
背景
事情是这样的……
前几天在远端的服务器上进行了一个MPI程序的profile,准确来说是tracing。产生的文件贼大,大约有10G+的样子。问题是境外的服务器和本地直接用sftp连接只有50KB/s左右的连接速度,传这么大的文件多少有点抽象。得到的建议是。可以从服务器传输到网盘,然后再中转到本地。
那么服务器如何在命令行上中转到网盘呢?有一个叫bypy的项目,允许传输到百度网盘;但是实测速度只有400KB/s左右,也不是很够用。(大约也不是百度网盘的锅,可能是境外链接的原因)
最后找到一个叫rclone的东西。这玩意是一个通用的网盘命令行工具,支持连接到数十种云端位置,大部分是国外的。同时这东西比较小,并且是二进制文件发布,不需要build,避免了在远端服务器上没有root权限而不能附加其他环境的痛苦()。另外,它的生态也比较良好,能在官方的论坛上找到大部分问题的解答。虽然就是临时辅助一下,但看上去还是比较健全的。
于是尝试用rclone将google drive连接到远端,因为google drive的速度足够快。不出意料,出意外了……
config过程
连接google drive的过程主要出现的问题来自于google OAuth近期的变更。
按照说明进行
rclone config
中间client_id是可以跳过去的。但是Document里面巴拉巴拉了一堆,意思大致是生成一个id会让传输快一点。
在进行到浏览器认证的时候出问题。服务器上没有浏览器,必须转到本地进行认证。但本地输入服务器上给出的浏览器认证地址,大概率会得到
禁止访问:“rclone”的请求无效
这个需要在本地上也装一个rclone,并且在需要认证的时候输入
rclone authorize "drive"
drive是google drive在rclone里面的代称,其他网盘的名称可以在之前的config中选择网盘的一步中看到。
rclone使用v1.58.1版本可以避免
2023/03/25 20:01:20 Failed to configure token: failed to get token: oauth2: cannot fetch token: 400 Bad Request
Response: {
"error": "invalid_grant",
"error_description": "Malformed auth code."
}
之后应该就没什么问题了。
使用
使用比较简单。远端的网盘被抽象成一个目录
remote:
(根据名字更改)后面可以跟网盘中的路径。
rclone ls <remote-path>
可以浏览网盘目录。
rclone copy <src> <dest>
可以进行双向拷贝。利用sync等还可以同步到远端目录,这里就略了。
After
境外对google drive的连接速度是真的快,13G的文件在20min之后就传完了。按20min计的话,大约有10MB/s。算是一个正确的选择。
现在问题就是把它传回本地了(寄)
2023.4.21更新:Google Drive有一个比较隐蔽的限制,即获取的下载链接会在一个小时之后失效,也就是说直接下载的话必须在一个小时之内下载完,否则白给。但是Google Drive可以断点续传,可以使用IDM之类的下载器接力下载。我是Mac用户,使用的是Neat Download Manager + Chrome.