Rexdf

The devil is in the Details.

如何从GDrive下载超大文件

| Comments

最近需要紧急分析某个AI引擎框架,需要用ImageNet动态调试下。一番搜索后发现度盘和GDrive的链接。由于杜甫环境在国外的机器上,所以选择了从GDrive下载。(虽然同时起了个screen下载度盘,四天过去了,还在70%卡住着)

目标

要下载的是这个

Title: ImageNet ILSVRC2012

Size: Train:138G+Val:6G

https://drive.google.com/drive/folders/1dU3PiW6RRQkxfQL9qAR16EhSbUcsofQ8

也就是如何在服务器上用命令行下载140GB的文件。

GDrive下载工具

这个我们能比较容易找到好几个,最后我用的这个go写的客户端 gdrive

鉴权

这是谷歌GCP的一个特色(去年公司出钱让考过一个professional cloud architect证书)。IAM权限管理,为特点某种资源分配特点某种权限的账户,这个账户可以随时随时编辑和审计。 专门为程序用的账户就是service_account,是密钥对,而不是密码之类的。其实就是一个json文件。

具体来说操作步骤如下:

1. 创建一个serice account,下载其密钥

可以参考 https://developers.google.com/identity/protocols/OAuth2ServiceAccount#creatinganaccount

2. 把下载的密钥放到~/.gdrive下面

可以改一个简单的名字,比如改成 ~/.gdrive/g.json

3. 运行测试命令

gdrive --service-account g.json about

如果能正常显示GDrive的空间大小那么直接下载就好了,如果报如下错误则继续

Failed to get about: googleapi: Error 403: Access Not Configured. Drive API has not been used in project [PROJECT_ID] before or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/drive.googleapis.com/overview?project=[PROJECT_ID] then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry., accessNotConfigured

4. 网页打开上面报错的链接

https://console.developers.google.com/apis/api/drive.googleapis.com/overview?project=[PROJECT_ID]

首先启用 GDrive API

然后创建凭据 Create Credentials

需要创建一个OAuth Client ID凭据

等待大概几分钟,我大概是10分钟内再此尝试步骤3就好了。

5. 下载

首先用刚刚生成service account的账户打开要下载的GDrive链接,然后在要下载的文件上右键,选择 “获取共享链接”。 会得到一个如下的链接 https://drive.google.com/file/d/xxx/view?usp=sharing

那么下载命令就是如下了

gdrive --service-account g.json download xxx

速度大概可以稳定到10MB/s到30MB/s的样子,很快就下完了。

一些说明

从上面的流程可以看出,我们不需要把这种超大的文件储存到自己的空间然后下载,其次谷歌知道你在下载。所以谷歌也可以控制你滥用。这个其实是有额度的,具体看谷歌API limit方面的说明,理论上次数和流量应该都是有限额的,假如商用的也是有付费服务的。

参考资料

  1. Sign in with Google temporarily disabled for this app
  2. Rate limit exceeded. User message: “Sorry, you have exceeded your sharing quota.
  3. Rate Limit Exceeded

Comments