只针对本地文件上传GD/TD,GD/TD内互传可能不适用
1.创建Service Account并添加到teamdrive(现在也叫共享云端硬盘)中。(至于为什么要用SA,当然是因为创建真实用户账户成本过高,而且不能批量添加呀。)
2.使用python脚本运行rclone,以多账户协力的形式突破单账号750G上传限制,并在对应账户上传超限(750G/帐号)时进行切换。
此文的目的在于上传文件到共享云端硬盘,仅在部分步骤中利用了folderclone相关脚本来批量创建Service Account并添加到teamdrive中。
请注意:本教程第一、二部分教程使用OAuth2客户端形式完成,与 手动创建辅助账户不同,请视需要,选择本教程或参考该他人教程,完成Service Account的创建以及Shared Drive用户添加,并得到SA的JSON文件。如果已经完成了上述步骤,请直接跳转本教程第三部分Rclone设置。
请根据个人需求创建项目数量,已知限制如下:
1. 一个真实帐号最多能创建12(或25)个项目,每个项目最多100个SA账户,每个账户(无论是真实还是SA)每日最多上传750G
2. 个共享云端硬盘最多添加600个账户
一、创建Google Cloud项目
一、在 Google云端控制台 上新建项目,填入项目名称并完成创建

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

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

应用类型选【其他】

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

二、使用Folderclone中脚本添加共享云端硬盘成员
如果使用科学方式上网,请保证CMD走代理!!!!!
请使用有浏览器环境(非Remote或者headless)的环境进行配置
一、 安装Python3,clone项目文件,使用pip安装依赖
git clone https://github.com/Rhilip/folderrclone.git
cd folderrclone
pip3 install -r requirements.txt
二、将前面JSON格式的OAuth凭据文件credentials.json
复制到项目文件夹目录下,并运行multifactory.py
文件
cp credentials.json .
python multifactory.py --quick-setup 1
其中,--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
python masshare.py -d SDFolderID

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

三、设定rclone自动备份及切换
通常情况下(即本人是这么使用的),我们用crontab定时跑一个rclone move/copy/sync
方法,这样会存在几个问题,即:
- 如果crontab时间过密,前一个rclone尚未跑完就拉起了另一个rclone进程(特别是750G后长时间等待),导致产生了大量rclone占用系统io资源
- rclone在消耗完某一账户的750G后不能自动更换,导致长时间等待。
- 使用
--max-transfer 750G
(或更低的配额)做限制。在触碰到限制时,rclone会直接退出而不是平滑停止,即不考虑将正在传输的文件传完。
本处尽可能尝试解决这些问题。
一、修改设置rclone配置文件
修改rclone配置文件(一般位于$HOME/.config/rclone/rclone.conf
),添加如下字段 。
[GDrive]
type = drive
scope = drive
service_account_file =
team_drive = SDFolderID
其中SDFolderID
需要改成前面查看的对应【共享云端硬盘】的ID
注意:
也可以使用rclone config
的形式交互添加,并在rclone提示如下信息时,任意填入一个上面步骤在account
目录生成的JSON文件。
Service Account Credentials JSON file path
Leave blank normally.
Needed only if you want use SA instead of interactive login.
Enter a string value. Press Enter for the default ("").
service_account_file> C:\Repositories\folderclone\accounts\xxxxxxxxxxxxxxxxxxx.json
Edit advanced config? (y/n)
y) Yes
n) No
y/n> n
Remote config
Configure this as a team drive?
y) Yes
n) No
y/n> y
Fetching team drive list...
Choose a number from below, or type in your own value
1 / xxxxxxx@xxxxxx
\ "xxxxxxxxxxxxxxxxxx"
Enter a Team Drive ID> 1
使用rclone自带的client id和client secert
在大流量情况下可能出现403 Rate Limit等问题,可以参照下面教程,创建自己的client id和client secert信息,并填入配置项中。
首先获取谷歌API
凭据,获取方法在之前很多文章都提过,这里就直接复制粘贴了,先启用Google Drive API
,启用地址:点击进入。

再创建一个OAuth client ID
,创建地址:点击进入。应用类型选择其他(Other
),名称自己填,这里博主填的Rclone
。

然后会获得自己的客户端ID
和客户端密钥,再复制下来。

填入自己的client id和client secert信息后配置项结构如下(修改字段ClientID,ClientSecert,SDFolderID
)
[GDrive]
client_id = ClientID
client_secert = ClientSecert
type = drive
scope = drive
service_account_file =
team_drive = SDFolderID
二、配置autorclone.py
参数
autorclone.py
文件是本人在 @superstaraug 等人实践上修改的rclone多帐号切换脚本。
如果没有使用本教程前面的步骤,可能需要安装python依赖库,方法如下:
pip3 install psutil filelock
使用前需要修改部分配置信息(该部分可能随版本迭代有些不同,请根据使用的文件配置说明修改)
vi autorclone.py
依次设置如下配置项,请根据注释说明修改
(如果是在linux上跑的脚本,一般不需要对配置项进行较多的更改,修改sa_json_folder
和cmd_rclone
基本就可以了)
这里只是配置项信息,完整python文件请在作者的Github中下载 。
# ------------配置项开始------------------
# Account目录
sa_json_folder = r'/root/folderrclone/accounts' # 绝对目录,最后没有 '/',路径中不要有空格
# Rclone运行命令
# 1. 填你正在用/想要用的,这里写的是move,也可以是copy/sync ......
# 2. 建议加上 `--rc` ,不加也没事,后面脚本会自动加上的
# 3. 因为不起screen,如果你希望关注rclone运行的状态,请一定要用 `--log-file` 将rclone输出重定向到文件
cmd_rclone = 'rclone move /home/tomove GDrive:/tmp --drive-server-side-across-configs -v --log-file /tmp/rclone.log'
# 检查rclone间隔 (s)
check_after_start = 60 # 在拉起rclone进程后,休息xxs后才开始检查rclone状态,防止 rclone rc core/stats 报错退出
check_interval = 10 # 主进程每次进行rclone rc core/stats检查的间隔
# rclone帐号更换监测条件
switch_sa_level = 1 # 需要满足的规则条数,数字越大切换条件越严格,一定小于下面True(即启用)的数量,即 1 - 4(max)
switch_sa_rules = {
'up_than_750': False, # 当前帐号已经传过750G
'error_user_rate_limit': False, # Rclone 直接提示rate limit错误
'zero_transferred_between_check_interval': True, # 100次检查间隔期间rclone传输的量为0
'all_transfers_in_zero': False, # 当前所有transfers传输size均为0
}
# rclone帐号切换方法 (runtime or config)
# runtime 是修改启动rclone时附加的 `--drive-service-account-file` 参数
# config 是修改rclone的配置文件 `$HOME/.config/rclone/rclone.conf` ,此时你需要指定后面的rclone配置参数参数
switch_sa_way = 'runtime'
# rclone配置参数 (当且仅当 switch_sa_way 为 `config` 时使用,且需要修改)
rclone_config_path = '/root/.config/rclone/rclone.conf' # Rclone 配置文件位置
rclone_dest_name = 'GDrive' # Rclone目的地名称(与cmd_rclone中对应相同,并保证SA均已添加)
# 本脚本临时文件
instance_lock_path = r'/tmp/autorclone.lock'
instance_config_path = r'/tmp/autorclone.conf'
# 本脚本运行日志
script_log_file = r'/tmp/autorclone.log'
logging_datefmt = "%m/%d/%Y %I:%M:%S %p"
logging_format = "%(asctime)s - %(levelname)s - %(threadName)s - %(funcName)s - %(message)s"
# ------------配置项结束------------------
脚本设置了多种规则来检查当前Rclone脚本是否超过750G限制。只有当所有启用的监测规则均命中时,脚本才会切换到下一个帐号。(所以不要过多的启用监测规则,以防止应切换时未能正常切换)
配置完后就可以测试运行了,相关的运行结果会直接数出在stdout和配置的日志文件中。
除了在需要时在screen中手动调用之外,也可直接加入crontab中定时运行,脚本采用单例模式,所以不会导致过多rclone进程被创建。
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邮箱的形式来删除,防止误伤。
PS 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.
Comments | NOTHING