rClone : outre-passer la limite d'upload de 750GB/24h
Voici comment créer des Service Accounts (SA) pour outre-passer la limite d’upload de 750GB/24h sur un TeamDrive (ShareDrive).
Attention, en abuser peut avoir des conséquences pour votre compte Workspace (comme ils ont fermé des milliers de comptes GSuite EDU et/ou vendus sur EBay fin 2019).
Je détaille mon tutoriel mais ne le fais pas en mode [NOOB] volontairement. C’est pas compliqué sauf si on débarque dans rClone et Linux ; si vous voulez vraiment abuser de Google, faut se relever un peu les manches :P
Le principe est simple :
- On fait 3 Service Accounts
- rClone (ou un fork comme gClone) utilise ces comptes pour uploader les données sur un TeamDrive
- Chaque fois qu’un compte arrive à 750GB d’upload, la limite en 24h, rClone change de compte
Les SA sont des comptes e-mails auxquels ont donne un accès à un projet Google. On peut ensuite rattacher ces e-mails à un ou des TeamDrive.s pour qu’ils puissent en gérer le contenu, dans notre cas y envoyer des données.
Pour ce test je pars sur un CT Proxmox sous Ubuntu 20.04 et toujours rClone BETA.
Générer les SA
On peut créer des SA à la main via la console développeurs de Google (et leurs clés) mais passer par un script simplifie la chose ça fait geek !
On va se servir du script sa-gen et de gcloud. Avant d’utiliser sa-gen on a besoin de configurer gcloud avec les informations du compte Workspace qu’on voudra utiliser : gcloud auth login
Comme d’habitude, on colle l’URL dans un navigateur, on sélectionne son compte, on autorise et on vient remettre le code obtenu.
root@sagen:~# gcloud auth login Go to the following link in your browser: https://accounts.google.com/o/oauth2/ ... _account Enter verification code: 4/... You are now logged in as [[email protected]].
On doit ensuite configurer sa-gen, que j’ai enregistré sous sagen.sh. Voici un exemple :
KEYS_DIR=/home/aerya/satest ORGANIZATION_ID="aaaaa" GROUP_NAME="[email protected]" PROJECT_BASE_NAME="upandclear" FIRST_PROJECT_NUM=1 LAST_PROJECT_NUM=1 SA_EMAIL_BASE_NAME="satest" FIRST_SA_NUM=1 NUM_SAS_PER_PROJECT=3
- KEYS_DIR : l’endroit où on veut stocker nos SA
- ORGANIZATION_ID : l’ID de notre organisation, qu’on a sur la console dév. de Google
- PROJECT_BASE_NAME : le projet qu’on veut utiliser
- SA_EMAIL_BASE_NAME : le base de l’e-mail qu’on veut utiliser
- NUM_SAS_PER_PROJECT : le nom de SA qu’on veut créer par projet. Et c’est là qu’il ne faut pas abuser… Dans mon exemple je pourrai envoyer 3x750GB par 24h
Une fois qu’on a tout configuré on peut lancer le script : ./sagen.sh
root@sagen:~# ./sagen.sh Total SA json keys before running sa-gen = 0 Creating project = upandclear1 ++ gcloud projects create upandclear1 --organization=aaaaa Create in progress for [https://cloudresourcemanager.googleapis.com/v1/projects/upandclear1]. Waiting for [operations/cp.xxxx] to finish...done. Enabling service [cloudapis.googleapis.com] on project [upandclear1]... Operation "operations/acf.xxxx" finished successfully. ++ set +x Enabling apis for project = upandclear1 ++ gcloud config set project upandclear1 Updated property [core/project]. ++ gcloud services enable drive.googleapis.com sheets.googleapis.com admin.googleapis.com cloudresourcemanager.googleapis.com servicemanagement.googleapis.com Operation "operations/acf.xxx" finished successfully. ++ set +x ++ gcloud config set project upandclear1 Updated property [core/project]. ++ set +x Create service accounts for project = upandclear1 Creating service account number 1 in project = upandclear1 ==> satest1@upandclear1 ++ gcloud iam service-accounts create satest1 --display-name=satest1 Created service account [satest1]. ++ set +x Creating service account number 2 in project = upandclear1 ==> satest@upandclear1 ++ gcloud iam service-accounts create satest2 --display-name=satest Created service account [satest2]. ++ set +x [...] create json keys for upandclear1 Creating json key 1.json in project = upandclear1 for service account = satest1@upandclear1 ++ gcloud iam service-accounts keys create /home/aerya/satest/1.json [email protected] created key [xxx] of type [json] as [/home/aerya/satest/1.json] for [[email protected]] ++ set +x [email protected],[email protected],USER,MEMBER Creating json key 2.json in project = upandclear1 for service account = satest2@upandclear1 ++ gcloud iam service-accounts keys create /home/aerya/satest/2.json [email protected] created key [xxx] of type [json] as [/home/aerya/satest/2.json] for [[email protected]] ++ set +x [email protected],[email protected],USER,MEMBER [...] Number of service accounts in members.csv = 3 Total SA json keys created for project upandclear1 = 3 Total SA json keys BEFORE running sa-gen = 0 Total SA json keys AFTER running sa-gen = 3 Total SA jsons CREATED = 3
A la fin on a bien tous nos fichiers dans /home/aerya/satest
root@sagen:/home/aerya/satest# ls 1.json 4.json 6.json 8.json allmembers.csv -rw------- 1 root root 2312 Oct 23 08:58 1.json -rw------- 1 root root 2312 Oct 23 08:58 2.json -rw------- 1 root root 2312 Oct 23 08:58 3.json -rw-r--r-- 1 root root 1611 Oct 23 08:58 allmembers.csv -rw-r--r-- 1 root root 1671 Oct 23 08:58 members.csv # oui... je suis en root... osef.
Et on a la récap. dans les fichiers .csv :
root@sagen:/home/aerya/satest# cat members.csv Group Email [Required],Member Email,Member Type,Member Role [email protected],[email protected],USER,MEMBER [email protected],[email protected],USER,MEMBER [email protected],[email protected],USER,MEMBER
Autoriser les SA sur un TeamDrive
Là c’est la partie “coolups” du tutoriel : on copie les lignes d’un des .csv et on les colle dans les accès à un TeamDrive :)
On se rend sur son GDrive et on ajoute ou sélectionne le TeamDrive voulu.

Puis Manage Members et là on colle ligne par ligne nos nouveaux “membres” : [email protected], [email protected] etc
Sur le screen vous voyez une erreur, c’est parce qu’évidemment [email protected] n’existe pas, j’ai modifié tous les noms dans mes exemples ;)

Uploader avec les SA
J’ai cherché un truc simple pendant des semaines. Enfin… soyons franc… “un truc qui m’évite d’écrire un script moi-même”. Flemmard c’est un métier !
J’ai jeté mon dévolu sur un code en Python de Rhilip. C’est simple et efficace. Voici un exemple de configuration :
# ------------配置项开始------------------ # Account目录 sa_json_folder = r'/home/aerya/outils/safiles' # 绝对目录,最后没有 '/',路径中不要有空格 # Rclone运行命令 # 1. 填你正在用/想要用的,这里写的是move,也可以是copy/sync ...... # 2. 建议加上 `--rc` ,不加也没事,后面脚本会自动加上的 # 3. 因为不起screen,如果你希望关注rclone运行的状态,请一定要用 `--log-file` 将rclone输出重定向到文件 cmd_rclone = 'rclone move -vP /home/aerya/mnt/move TDcrypt: --fast-list --transfers=10 --checkers=10 --stats 5s --log-file /home/aerya/outils/logs/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 = 3 # 需要满足的规则条数,数字越大切换条件越严格,一定小于下面True(即启用)的数量,即 1 - 4(max) switch_sa_rules = { 'up_than_750': True, # 当前帐号已经传过750G 'error_user_rate_limit': True, # 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 = 'TDcrypt' # Rclone目的地名称(与cmd_rclone中对应相同,并保证SA均已添加) # 本脚本临时文件 instance_lock_path = r'/tmp/autorclone.lock' instance_config_path = r'/tmp/autorclone.conf' # 本脚本运行日志 script_log_file = r'/home/aerya/outils/logs/autorclone.log' logging_datefmt = "%m/%d/%Y %I:%M:%S %p" logging_format = "%(asctime)s - %(levelname)s - %(funcName)s - %(message)s" # ------------配置项结束------------------
On le lance et la magie opère :)
cat pymove.service [Unit] Description=Move Service Daemon After=multi-user.target [Service] Type=simple User=0 Group=0 ExecStart=/usr/bin/python3 /home/aerya/outils/scripts/move.py TimeoutStopSec=20 KillMode=process RemainAfterExit=yes Restart=always [Install] WantedBy=multi-user.target
10/28/2020 11:40:41 AM - INFO - <module> - Transfer Status - Upload: 1453.5467641036958 GiB, Avg upspeed: 24.707490997679784 MiB/s, Transfered: 32.