Photo by Gabriel Gusmao / Unsplash

Synchroniser des remotes rClone

rClone 15 févr. 2022

Merci à zealot001 qui m'a filé un script plus propre que le mien :P

Voici de quoi synchroniser des Team Drives et des clés d'accès Service Accounts (tutoriel).

#!/bin/bash

OPTIONS="-c -P --transfers 3 --checkers 3 --size-only --drive-server-side-across-configs --drive-stop-on-upload-limit"
SAKEYS="/home/aerya/scripts/rclone/sakeys"
LOG="/home/aerya/logs/rclone.log"
R1="FreeTD1"
R2="FreeTD2"
R3="FreeTD3"
R4="FreeTD4"


[[ "$(pidof -x $(basename $0))" != $$ ]] && echo "[KO] Script déja en cours" && exit 1

sync_rlcone()
{
    echo -e "$(date +"%Y-%m-%d %H:%M:%S") : Start rClone sync "$1"" >> "$LOG"
    rclone sync "$2": "$1": "$OPTIONS" --drive-service-account-file="$SAKEYS"/"$1".json
    if [[ $? -eq 0 ]] ; then
        echo -e "$(date +"%Y-%m-%d %H:%M:%S") : rClone sync "$1" OK\n" >> $LOG
    else
        echo -e "$(date +"%Y-%m-%d %H:%M:%S") : rClone sync "$1" ERROR\n" >> $LOG
    fi
}

sync_rlcone "$R2" "$R1"
sync_rlcone "$R3" "$R2"
sync_rlcone "$R4" "$R3"

J'ai placé ça en CRON toutes les 4h et ça fait le café

# rClone Sync
0 */4 * * * /home/aerya/scripts/rclone/sync.sh

Avec les notifications Discord (tutoriel)

stockage
BOT
 — Aujourd’hui à 16:00
FreeTD1  ==> Total size: 6.128 TiB (6737761093015 Byte)
FreeTD2  ==> Total size: 6.128 TiB (6737761093015 Byte)
FreeTD3  ==> Total size: 6.128 TiB (6737761093015 Byte)
FreeTD4  ==> Total size: 6.128 TiB (6737761093015 Byte)

Explications des variables, à adapter à votre configuration

OPTIONS="-c -P --transfers 3 --checkers 3 --size-only --drive-server-side-across-configs --drive-stop-on-upload-limit"
options de rClone, le --drive-server-side-across-configs servant à tout faire passer chez Google plutôt que par mon serveur (quelques GB/s de vitesse de transfert du coup)

SAKEYS="/home/aerya/scripts/rclone/sakeys"
dossier des clés SA. 1 clé par TD, chacune étant nommée comme lui => FreeTD1 = FreeTD1.json etc

[root@pve rclone]$ ls -l /home/aerya/scripts/rclone/sakeys
total 55
-rwxrwxrwx 1 root root 2333 Dec 28 11:00 FreeTD1.json
-rwxrwxrwx 1 root root 2333 Dec 28 11:00 FreeTD2.json
-rwxrwxrwx 1 root root 2333 Dec 28 11:00 FreeTD3.json
-rwxrwxrwx 1 root root 2333 Dec 28 11:00 FreeTD4.json

LOG="/home/aerya/logs/rclone.log"
les logs de rClone, ça ressort sous cette forme

2022-02-15 16:00:02 : Start Rclone sync FreeTD2
2022-02-15 16:01:57 : Rclone sync FreeTD2 OK
2022-02-15 16:01:57 : Start Rclone sync FreeTD3
2022-02-15 16:03:43 : Rclone sync FreeTD3 OK
2022-02-15 16:03:43 : Start Rclone sync FreeTD4
2022-02-15 16:05:24 : Rclone sync FreeTD4 OK

R1="FreeTD1" R2="FreeTD2" R3="FreeTD3" R4="FreeTD4"
les remotes rClone non déchiffrés, le 1 étant copié sur le 2, le 2 sur le 3, le 3 sur le 4. Pourquoi les remotes non déchiffrés ? Pour copier les données chiffrés du 1er team drive sur tous les autres et donc utiliser le même chiffrement partout.

Regardons le rclone.conf

[root@pve rclone]$ cat /root/.config/rclone/rclone.conf
[FreeTD1]
type = drive
client_id = xxx
client_secret = Gxxx
scope = drive
token = xxx
team_drive = ABC
root_folder_id =

[FreeTD1Crypt]
type = crypt
remote = FreeTD1:
password = motdepassesuperdur

[FreeTD2]
type = drive
client_id = xxx
client_secret = xxx
scope = drive
token = xxx
team_drive = DEF
root_folder_id =

[FreeTD3]
type = drive
client_id = xxx
client_secret = xxx
scope = drive
token = xxx
team_drive = GHI
root_folder_id =

[FreeTD4]
type = drive
client_id = xxx
client_secret = xxx
scope = drive
token = xxx
team_drive = JKL
root_folder_id =

Je n'ai besoin que d'un remote déchiffré (FreeTD1Crypt:). Comme le contenu chiffré du Team Drive FreeTD1: est synchronisé sur les autres TDs, si le TD1 venait à "disparaître", je n'aurais qu'à ajouter à la main dans mon rclone.conf un remote déchiffré pour le FreeTD2: pour m'en servir.

[FreeTD2Crypt]
type = crypt
remote = FreeTD2:
password = motdepassesuperdur

Bien entendu le script est adaptable pour des GDrives ou GD/TD mélangés. Ici les accès aux TDs 2, 3 et 4 se font via les clés SA qui y sont liées mais on pourrait aussi faire sans clé et uniquement avec l'accès GDrive classique.

Mots clés