通过 Colab 下载 Google Driver 上的大文件到内网服务器

由于众所周知的原因,访问 Google Driver 不是那么地方便,尤其是在下载一些较大的数据集时,尽管可以通过 IDM 来实现断点续传,但下载速度也就只有几 M,对于几十个 G 的文件来说还是太慢了。

偶然间看到一篇使用 Colab 来下载大文件的方法,实验下来速度确实很快,虽然把数据弄到内网要费点周折,但已经算是一个不错的方法,特此记录一下。

1. 将 Google Driver 上的大文件下载到 Colab

访问 Colab 官网,每个人默认有大约 80G 左右的免费空间,如下图所示,这里我下载了一个 53 G 的大文件后,可用空间还有 31 G。

通过 Colab 下载 Google Driver 上的大文件到内网服务器

所以,我们可以从 Google Driver 上下载小于 80 G 的文件,如果文件更大的话,此方法可能不适用,或者要升级 Colab 获取更多的硬盘空间。

1.1 获取文件唯一的 fileID

假设我们要下载的文件地址是下面这个链接:

https://drive.google.com/file/d/1NyDrgI02ao18WmXyepgVkWGqtM3YS3_4/view

那么加粗部分即为文件唯一的 fileID,我们需要通过这个 fileID 来使用命令将文件下载到 Colab 上。

如果是 Google Driver 上的任意文件,我们可以通过右键->共享->复制链接来获得类似上面 URL 形式的一个文件地址。

通过 Colab 下载 Google Driver 上的大文件到内网服务器

通过 Colab 下载 Google Driver 上的大文件到内网服务器

比如,这个 trainval.json 的地址即为下面这个链接,同理,加粗部分为文件唯一的 fileID。

https://drive.google.com/file/d/1PiaK8BD3D_OyS9rcrGmn9HfLDxnP_MY-/view?usp=sharing

1.2 查看文件的 MD5 值

由于整个过程包括文件下载和跨服务器的传输,难免哪一步会出些差错,所以我们需要一个办法来保证每一步得到的文件都是没有问题的,通过 MD5 来验证文件的一致性是一个不错的方案。

所以,我们需要先拿到 Google Driver 上文件的 MD5 值,好在这可以通过 Google 的 API 来获取到。

首先,我们打开 Google Developers – OAuth 2.0 Playground 这个网址,然后,按照下图指示进行第一步操作。

通过 Colab 下载 Google Driver 上的大文件到内网服务器

点击完会跳出登录界面,我们用自己的 Google 账号认证然后允许即可。然后,继续按照下图指示进行第二步操作。

通过 Colab 下载 Google Driver 上的大文件到内网服务器

第三步,填入 Request URI,然后点击 Send the request,我们就可以在右边的 Response 中得到某一个文件的 MD5 值了。

知道文件的 fileID 后,替换下面加粗部分我们即可得到对应的 Request URI 。

[https://www.googleapis.com/drive/v3/files/1NyDrgI02ao18WmXyepgVkWGqtM3YS3_4?fields=md5Checksum,+originalFilename]

通过 Colab 下载 Google Driver 上的大文件到内网服务器

1.3 获取 API 的 Access Token

与 1.2 节一样,打开 Google Developers – OAuth 2.0 Playground 这个网址,这里第一步选取了另外的一个 API,然后进行认证。

通过 Colab 下载 Google Driver 上的大文件到内网服务器

第二步操作与 1.2 节一致,只不过这里操作完后需要把这个 Access token 复制保存下来,后面要用到。注意这里的 token 有效期为一个小时,超时后无法使用,不过在 Colab 下载的速度可以达到百兆每秒,一个小时可以说绰绰有余。

通过 Colab 下载 Google Driver 上的大文件到内网服务器

1.4 下载文件到 Colab

[!curl -H “Authorization: Bearer Access token” https://www.googleapis.com/drive/v3/files/fileID?alt=media -o filename]

替换上面命令加粗部分的 Access token、fileID 和 filename,就得到了在 Colab 中下载文件的命令,下面是一个示例。

!curl -H "Authorization: Bearer ya29.a0AVvZVsqLM6FcukNv8Co2wOornTU-mktbMSBkIhVQRvU7iHq47UyvXWXcKxV8_RT4Fybs6YmYUAj0EYeWe3CL2wa1T5COZwDb_Mq7w6CDFExvb4Og7tND8QaC3UaZ4FDR5yqwIS5bBJ1LJHeEcE7P6lsoz6LDaCgYKARESARESFQGbdwaIoVi4AMvpUGVnEPyiiFaj1w0163" https://www.googleapis.com/drive/v3/files/1NyDrgI02ao18WmXyepgVkWGqtM3YS3_4?alt=media -o planes_scannet_train.tfrecords

点击左边的执行按钮后,下载就开始了,速度飞起!

通过 Colab 下载 Google Driver 上的大文件到内网服务器

但是,我在下载的时候老是会中断,下个几 G 或者十几 G 就停掉了。好在 curl 命令可以从断点重启,修改为下面的命令,继续执行,重复几次后就可以完成下载了。

!curl -H "Authorization: Bearer ya29.a0AVvZVsqLM6FcukNv8Co2wOornTU-mktbMSBkIhVQRvU7iHq47UyvXWXcKxV8_RT4Fybs6YmYUAj0EYeWe3CL2wa1T5COZwDb_Mq7w6CDFExvb4Og7tND8QaC3UaZ4FDR5yqwIS5bBJ1LJHeEcE7P6lsoz6LDaCgYKARESARESFQGbdwaIoVi4AMvpUGVnEPyiiFaj1w0163"  -o planes_scannet_train.tfrecords -C - https://www.googleapis.com/drive/v3/files/1NyDrgI02ao18WmXyepgVkWGqtM3YS3_4?alt=media

下载完成后,验证一下 MD5 值,这里一致说明第一步的下载没有问题。

通过 Colab 下载 Google Driver 上的大文件到内网服务器

2. 将文件从 Colab 下载到公网服务器

由于 Colab 无法直接访问内网服务器,但是内网服务器可以访问公网,所以这里需要一个公网服务器作为中转,先把文件从 Colab 通过 scp 拷贝到公网服务器,然后在内网服务器上通过 scp 再把文件从公网服务器拷贝到内网服务器。

找一个按小时付费的云服务器,这里我用的是 AutoDL 平台,新用户注册送 10 元优惠券,最便宜的服务器大概 1 元一小时,够下载好几次了。

通过 Colab 下载 Google Driver 上的大文件到内网服务器

在 Colab 上生成 SSH-Key,拷贝到公网服务器上。

!ssh-keygen -t rsa               # 运行命令后一直回车即可生成 SSH-Key
!cp /root/.ssh/id_rsa.pub ./	 # 将公钥拷贝到当期目录

通过 Colab 下载 Google Driver 上的大文件到内网服务器

将文件 id_rsa.pub 下载下来,把其中的内容拷贝到服务器上这个文件中 ~/.ssh/authorized_keys2,一般情况下文件名应该是 authorized_keys,我这个服务器叫 authorized_keys2。

假设连接公网服务器的命令如下:

ssh -p 39624 root@region-41.seetacloud.com

那么,从 Colab 拷贝文件到公网服务器的命令为:

!rsync -avuzP -e "ssh -p 39624 -o StrictHostKeyChecking=no"  planes_scannet_train.tfrecords root@region-41.seetacloud.com:/root/autodl-tmp

我这里用的是 rsync 命令,实测速度会快一些,用 scp 命令也可以。

通过 Colab 下载 Google Driver 上的大文件到内网服务器

平均速度大概 30 M,拷贝一个 53 G 的文件用时 27 分。拷贝完成后,同样地,在公网服务器再次验证一下 MD5 值。

通过 Colab 下载 Google Driver 上的大文件到内网服务器

3. 将文件从公网服务器下载到内网服务器

登录内网服务器,直接运行以下命令:

rsync -avuzP -e "ssh -p 39624 -o StrictHostKeyChecking=no"   root@region-41.seetacloud.com:/root/autodl-tmp/planes_scannet_train.tfrecords ./

输入公网服务器的登录密码后开始拷贝,平均速度有 40 M,相当可以了。

通过 Colab 下载 Google Driver 上的大文件到内网服务器

最后,在内网服务器验证一下 MD5 值,如果一致的话就大功告成了。

通过 Colab 下载 Google Driver 上的大文件到内网服务器

4. 参考链接

如何快速下载google drive文件到本地?
Google Drive MD5 checksum for files

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2023年3月28日
下一篇 2023年3月28日

相关推荐