Stocker via rClone sur des Teamdrives d’un compte Gmail – Partie 3 : les scripts rClone

Comme toujours, je fais en sorte que l’accès aux fichiers hébergés sur le Cloud via rClone soient le plus simple pour Plex ou un explorateur de fichiers. Les stockages local et distant sont donc fusionnés via fuse (sudo apt-get install fuse) dans un dossier unique /unionfs
De cette manière, Plex par exemple, indexe uniquement le dossier /unionfs, que les fichiers soient encore présents localement ou déjà envoyé sur Google.
Et rClone transfère les fichiers au fil de l’eau, quelques minutes après leur ajout dans le dossier d’envoi.

Les SA (les .json) sont stockés dans /home/aerya/scripts/rclone/sakeys

[email protected]:/home/aerya/scripts/rclone# ls -l sakeys/total 36-rw-r--r-- 1 root  root   432 nov.  28 00:39 comptesSA.txt-rwxrwxrwx 1 aerya aerya 2333 nov.  28 00:25 xxx-04064fc65554.json-rwxrwxrwx 1 aerya aerya 2333 nov.  28 00:25 xxx-130d0110624e.json-rwxrwxrwx 1 aerya aerya 2333 nov.  28 00:25 xxx-63f1b84e986c.json

Mes scripts rClone sont dans /home/aerya/script/rclone, pensez à adapter les scripts qui suivent selon votre organisation.
Les scripts.sh seront lancés depuis ce chemin tandis que les .service sont à copier dans /etc/systemd/system (Ubutun/Debian).
Adaptez aussi le chemin des logs (/home/aerya/logs) et des points de montage :
– /mnt/TD/KevinCrypt : montage remote rClone chiffré
– /mnt/PRE : dossier local
– /mnt/unionfs : dossier de fusion de /mnt/PRE et /mnt/TD/KevinCrypt

Service de montage du remote chiffré KevinCrypt: (avec le cache de rClone) : KevinCrypt.service

[Unit]Description=RClone ServiceWants=network-online.targetAfter=network-online.target[Service]Type=notifyEnvironment=RCLONE_CONFIG=/root/.config/rclone/rclone.confKillMode=noneRestartSec=5ExecStart=/usr/bin/rclone mount KevinCrypt: /mnt/TD/KevinCrypt --allow-other --allow-non-empty --dir-cache-time 240h --log-level INFO --log-file /home/aerya/logs/mount.log --poll-interval 15s --umask 002 --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36" --drive-service-account-file=/home/aerya/scripts/rclone/sakeys/xxx-04064fc65554.json --cache-dir=/cache --vfs-cache-mode full --vfs-cache-max-size 50G --vfs-cache-max-age 240h --fast-listExecStop=/bin/fusermount -uz /mnt/TD/KevinCryptRestart=on-failure[Install]WantedBy=multi-user.target

–drive-service-account-file=/home/aerya/scripts/rclone/sakeys/xxx-04064fc65554.json est le fichier .json (SA) à utiliser pour se connecter et interagir avec le TeamDrive Kevin

A copier dans /etc/systemd/system et lancer avec

sudo systemctl start KevinCrypt.servicesudo systemctl enable KevinCrypt.service

On peut vérifier le montage avec sudo systemctl status KevinCrypt.service ou tout simplement df -H

[email protected]:/home/aerya# df -HKevinCrypt:            1,2P       0  1,2P   0% /mnt/TD/KevinCrypt

Service de fusion du remote chiffré KevinCrypt: et du dossier local /mnt/PRE : unionfs.service

[Unit]Description=UnionFS DaemonAfter=multi-user.target[Service]Type=simpleUser=0Group=0ExecStartPre=/bin/sleep 10ExecStart=/usr/bin/unionfs -o cow,allow_other,nonempty /mnt/PRE=RW:/mnt/TD/KevinCrypt=RO /mnt/unionfsExecStop=/bin/fusermount -uz /mnt/unionfsTimeoutStopSec=20KillMode=processRemainAfterExit=yes[Install]WantedBy=multi-user.target

A copier dans /etc/systemd/system et lancer avec

sudo systemctl start unionfs.servicesudo systemctl enable unionfs.service

On peut vérifier le montage avec sudo systemctl status unionfs.service ou tout simplement df -H

[email protected]:/home/aerya# df -Hunionfs                  1,2P    1,2P  215G 100% /mnt/unionfs

Script rClone de déplacement (on peut remplacer par copy) vers KevinCrypt: depuis le dossier local /mnt/PRE : rclonemove.sh
Avec utilisation d’un SA pour gérer l’accès à Google. Le rendre exécutable avec chmod +x rclonemove.sh

#!/bin/bashLOG="/home/aerya/logs/rclone.log"EXC1="/atrier/**"if pidof -o %PPID -x "$0"; then   exit 1fisleep 30while truedo  echo "$(date "+%d.%m.%Y %T") RCLONE UPLOAD STARTED" | tee -a "$LOG"rclone move -c -v --exclude='**partial~' --exclude="**_HIDDEN~" --exclude=".unionfs/**" --exclude=".unionfs-fuse/**" --exclude="$EXC1" --min-age 1m --user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36" --drive-service-account-file=/home/aerya/scripts/rclone/sakeys/xxx-04064fc65554.json --fast-list --drive-stop-on-upload-limit --transfers=10 --checkers=10 --stats 5s --log-file="$LOG" /mnt/PRE KevinCrypt:/sleep 480  echo "$(date "+%d.%m.%Y %T") RCLONE UPLOAD ENDED" | tee -a "$LOG"done

EXC1= »/atrier/** » est un dossier (/mnt/PRE/atrier) à exclure du déplacement vers Google
–min-age 1m indique à rClone de ne traiter que les fichiers sans accès depuis 1 minute (pour éviter le déplacement d’un fichier en cours de copie par exemple -même si ça fonctionne c’est pas optimal-)
–drive-service-account-file=/home/aerya/scripts/rclone/sakeys/xxx-04064fc65554.json est le fichier .json (SA) à utiliser pour se connecter et interagir avec le TeamDrive Kevin
–drive-stop-on-upload-limit force rClone a stopper tout déplacement de fichiers une fois la limite de 750GB atteinte. Sait-on jamais…

Service rclonemove qui lance le script du même  éponyme : rclonemove.service

[Unit]Description=Move Service DaemonAfter=multi-user.target[Service]Type=simpleUser=0Group=0ExecStart=/bin/bash /home/aerya/scripts/rclone/rclonemove.shTimeoutStopSec=20KillMode=processRemainAfterExit=yesRestart=always[Install]WantedBy=multi-user.target

A copier dans /etc/systemd/system et lancer avec

sudo systemctl start rclonemove.servicesudo systemctl enable rclonemove.service

Script de synchronisation, via rClone Sync, des TD : sync.sh

Le rendre exécutable avec chmod +x sync.sh

#!/bin/bashrclone sync Kevin:/ Pierre:/ -v -P --drive-server-side-across-configs --drive-service-account-file=/home/aerya/scripts/rclone/sakeys/xxx-130d0110624e.json --log-file=/home/aerya/logs/syncPierre.logrclone sync Kevin:/ Paul:/ -v -P --drive-server-side-across-configs --drive-service-account-file=/home/aerya/scripts/rclone/sakeys/xxx-63f1b84e986c.json --log-file=/home/aerya/logs/syncPaul.log

Un SA (.json) utilisé chaque TD et des logs séparés également.
Pour que la synchronisation se fasse sans passer par mon serveur j’utilise le flag –drive-server-side-across-configs

Les montage/fusion/déplacement étant automatisés, il ne reste qu’à faire de même avec la synchronisation entre les TD. Pour ça je passe par le cron pour le déclencher chaque nuit à 4h.

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

On pourrait aussi en faire un .service qui permettrait de le faire au fil de l’eau.

On peut vérifier que tout fonctionne en lançant la commande à la main ou en attendant le lendemain matin pour regarder les logs d’un des TD :

[email protected]:/home/aerya/logs# tail -n 10 syncPaul.log2021/11/29 04:11:02 INFO  : 580goa4p78noqhr622a5utthdlfd9ukckr748i6c5h064651qg6cpp16o3pucr29q6uf98/hvtjg79iuvv57741pbgisi77jgka2ccg7gsbme4i1sm9s79s3b3lujtb0j2cmo8je1foipfb7bc0lusseionbfpj8me4c9nhbjclfvg: Copied (server-side copy)2021/11/29 04:11:02 INFO  : 580go4s71h6l15u9d4497bh5do/fl3hm9ij3qd9ukckr748i6c5h064651qg6cpp16o3pucr29q6uf98/sl3f2h8je87rugvogehrrgjljl1ip64tn5acu334fnao5hc4kfo3vjqs3u65lm917b9tevdho: Copied (server-side copy)2021/11/29 04:11:03 INFO  : 580go4s71h6l15u9d4497bh5do/b999b642a6i5jj67hmnhfv082f3c3sfr7gqeg5nchtaiv6p86q0nasr1ids989rg2t3va: Copied (server-side copy)2021/11/29 04:11:03 INFO  :Transferred:       18.770 GiB / 18.770 GiB, 100%, 2.980 GiB/s, ETA 0sChecks:               117 / 117, 100%Transferred:            3 / 3, 100%Elapsed time:         4.0s

Le fait que tout se passe au niveau l’infra de Google permet d’obtenir des vitesses confortables. J’ai la fibre mais ne peux quand même pas aller taper du 2GB/s ^_^

Prochain et dernier article pour les notifications Discord.

(40 vues)