嗯,标题比较绕口,改了好几遍都觉得不好。
不过本文的目的在于:
暂时只针对本地文件上传GD/TD,GD/TD内互传可能不适用
- 创建Service Account并添加到teamdrive(现在也叫共享云端硬盘)中。(至于为什么要用SA,当然是因为创建真实用户账户成本过高,而且不能批量添加呀。)
- 使用python脚本运行rclone,以多账户协力的形式突破单账号750G上传限制,并在对应账户上传超限(750G/帐号)时进行切换。
其中第一步的主要思想来自folderclone,第二步相关实践来自 @superstaraug 等人,对此分别表示感谢。
成品项目见:https://github.com/Rhilip/AutoRclone
此文的目的在于上传文件到共享云端硬盘,仅在部分步骤中利用了folderclone相关脚本(所以偷懒直接fork修改了)来批量创建Service Account并添加到teamdrive中。
如果你对folderclone将TD to GD,shared to GD(即“他人分享转成自己可管理文件”),TD to TD等Google Drive内部文件捣腾玩法感兴趣,你可以参考本文的参考链接第一条。
参考链接:
- Folderclone谷歌google共享云端硬盘转存相互转移拷贝复制文件的正确姿势
- 解决Rclone挂载Google Drive时上传失败和内存占用高等问题 - Rat’s Blog
- Google drive - Rclone
补充方案: rclone 750G 自动换号 – AutoRclone – Google 迷
本文非 https://github.com/xyou365/AutoRclone 项目相关介绍及教程,请勿在本人Blog中询问。
============================
请注意:本教程第一、二部分教程使用OAuth2客户端形式完成,与 567899.xyz 等人手动创建辅助账户不同,请视你需要,选择本教程或参考该他人教程,完成Service Account的创建以及Shared Drive用户添加,并得到SA的JSON文件。如果你已经完成了上述步骤,请直接跳转本教程第三部分Rclone设置。
请根据你个人需求创建项目数量,已知限制如下:
- 一个真实帐号最多能创建12(或25)个项目,每个项目最多100个SA账户,每个账户(无论是真实还是SA)每日最多上传750G
- 一个共享云端硬盘最多添加600个账户
创建Google Cloud项目
一、在 Google云端控制台 上新建项目,填入项目名称并完成创建

二、点击【OAuth同意屏幕】,填入应用名称并点击最下面的保存

三、保存后会自动跳转到【凭据】页面,点击创建【OAuth客户端ID】

应用类型选【其他】

不用在意弹出的客户端ID和密钥窗口,直接点击下载JSON格式的认证文件,并重命名为credentials.json备用。

使用Folderclone中脚本添加共享云端硬盘成员
如果你使用科学方式上网,请保证CMD走代理!!!!!
请使用有浏览器环境(非Remote或者headless)的环境进行配置
一、 安装Python3,克隆项目文件,使用pip安装依赖(具体步骤就不搬运截图了)
1 | git clone https://github.com/Rhilip/folderrclone.git |
二、将前面JSON格式的OAuth凭据文件credentials.json复制到项目文件夹目录下,并运行multifactory.py文件
1 | cp credentials.json . |
其中,--quick-setup后面跟着的数字为你想要创建的Project数量,并在每个project中创建满100个Service Account。(当该数字大于你能有的最大项目数(12)时,会为当前所有project添加SA帐号。)
会弹出Google登录页面,登录你刚才创建项目帐号,由于我们是随意创建的OAuth应用会提示应用未经过认证,不用管它,点开高级,并转至该应用。

然后在新的页面中允许应用申请的3个权限

并确认

然后回到Python窗口,其中可能出现如下提示,打开画线部分链接,并启用【Service Useage API】


启用后稍等几秒回到Python窗口,等待应用跑完(消耗时间视你创建Service Account数量)。

multifactory.py 还支持以下调用参数,如果你不知道具体用法则不用附加。
其中我觉得还有用的有--new-only方法,这样可以保证创建的Service Account都在新的项目中,而不占用老项目的名额空间,因为默认情况下multifactory脚本会首先尝试在已经存在的项目中创建Service Account。

跑完后在项目目录会自动生成 accounts目录,其中一堆JSON文件就是我们需要的service_account_credentials文件,留存备用

三、然后使用folderclone脚本将生成的Service Account用户添加到该共享云端硬盘中,folderclone会自动设置Service Account权限为内容管理员。
查看【共享云端硬盘】的ID,请注意你(即前面创建并认证登录的用户)应该是该共享云端硬盘的管理员角色

然后运行下面命令,其中SDFolderID需要改成前面查看的对应【共享云端硬盘】的ID
1 | python masshare.py -d SDFolderID |

结果如下,可以看到前面生成的IAM账户均被添加到该【共享云端硬盘】中了

设定rclone自动备份及切换
通常情况下(即本人是这么使用的),我们用crontab定时跑一个rclone move/copy/sync方法,这样会存在几个问题,即:
- 如果crontab时间过密,前一个rclone尚未跑完就拉起了另一个rclone进程(特别是750G后长时间等待),导致产生了大量rclone占用系统io资源
- rclone在消耗完某一账户的750G后不能自动更换,导致长时间等待。
- 使用
--max-transfer 750G(或更低的配额)做限制。在触碰到限制时,rclone会直接退出而不是平滑停止,即不考虑将正在传输的文件传完。(#2672)
本处尽可能尝试解决这些问题。
一、修改设置rclone配置文件
修改rclone配置文件(一般位于$HOME/.config/rclone/rclone.conf),添加如下字段
1 | [GDrive] |
其中SDFolderID需要改成前面查看的对应【共享云端硬盘】的ID
注意:
- 你也可以使用
rclone config的形式交互添加,并在rclone提示如下信息时,任意填入一个上面步骤在account目录生成的JSON文件
1 | Service Account Credentials JSON file path |
使用rclone自带的
client id和client secert在大流量情况下可能出现403 Rate Limit等问题,你可以参照下面教程,创建自己的client id和client secert信息,并填入配置项中- rclone官方文档 Making your own client_id - Google drive - Rclone
- 或者 Rat‘s的这篇教程 解决Rclone挂载Google Drive时上传失败和内存占用高等问题 - Rat’s Blog
以下为一家之言:个人认为没有必要进行该设置,因为根据Rclone的官方文档说明,他们的API限额经过了特殊的提升,你自己申请的不一定能比得上。如果你没有遇到该问题,请使用rclone默认,即不要添加
client_id和client_secert配置项
填入自己的client id和client secert信息后配置项结构如下(修改字段ClientID,ClientSecert,SDFolderID)
1 | [GDrive] |
二、配置autorclone.py参数
autorclone.py文件是本人在 @superstaraug 等人实践上修改的rclone多帐号切换脚本
注意:如果你没有使用本教程前面的步骤,你可能需要安装python依赖库,方法如下
1 | pip3 install psutil filelock |
使用前需要修改部分配置信息(该部分可能随版本迭代有些不同,请根据你使用的文件配置说明修改)
1 | vi autorclone.py |
依次设置如下配置项,请根据注释说明修改
(如果你是在linux上跑的脚本,一般不需要对配置项进行较多的更改,修改sa_json_folder和cmd_rclone基本就可以了)
这里只是配置项信息,完整python文件请在文章开头的Github中下载
1 | # ------------配置项开始------------------ |
脚本设置了多种规则来检查当前Rclone脚本是否超过750G限制。只有当所有启用的监测规则均命中时,脚本才会切换到下一个帐号。(所以不要过多的启用监测规则,以防止应切换时未能正常切换)
2019.10.12PM17 更新:
- 在本脚本运行项中添加
last_pid参数以及依赖库psutil,使得脚本在运行时会首先尝试检查该pid信息,防止前一次运行过程中脚本意外退出,但是rclone进程未退出导致的孤儿进程情况。
配置完后就可以测试运行了,相关的运行结果会直接数出在stdout和配置的日志文件中。
除了在需要时在screen中手动调用之外,也可直接加入crontab中定时运行,脚本采用单例模式,所以不会导致过多rclone进程被创建。
1 | 0 */1 * * * /usr/bin/python3 /path/to/autorclone.py |
其他
remove.py提供了快速从Shared Drive中删除SA的方式,如果你已经不需要SA了,可以使用该文件进行删除。对应使用方法见下,其中ROLE的取值可为['owner', 'organizer', 'fileorganizer', 'writer', 'reader', 'commenter']中任一一个。使用脚本批量添加的ROLE值为fileorganizer(即content manager) ,但更建议你使用--prefix(前缀) 和--suffix(后缀) 匹配SA邮箱的形式来删除,防止误伤。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19PS C:\Repositories\folderclone> python .\remove.py --help
usage: remove.py [-h] [--token TOKEN] [--credentials CREDENTIALS]
(--prefix PREFIX | --suffix SUFFIX | --role ROLE) --drive-id
DRIVE_ID
A tool to remove users from a Shared Drive.
optional arguments:
-h, --help show this help message and exit
--token TOKEN Specify the pickle token file path.
--credentials CREDENTIALS
Specify the credentials file path.
--prefix PREFIX Remove users that match a prefix.
--suffix SUFFIX Remove users that match a suffix.
--role ROLE Remove users based on permission roles.
required arguments:
--drive-id DRIVE_ID, -d DRIVE_ID
The ID of the Shared Drive.
