Rclone:远端大文件传输

发布时间 2023-03-26 10:15:52作者: undermyth

背景

事情是这样的……

前几天在远端的服务器上进行了一个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:

(根据名字更改)后面可以跟网盘中的路径。

remote ls <remote-path>

可以浏览网盘目录。

remote copy <src> <dest>

可以进行双向拷贝。利用sync等还可以同步到远端目录,这里就略了。

After

境外对google drive的连接速度是真的快,13G的文件在20min之后就传完了。按20min计的话,大约有10MB/s。算是一个正确的选择。

现在问题就是把它传回本地了(寄)