Utilisation basique d'un montage rClone

mount 15 oct. 2020

Le tutoriel précédent étant compatible avec quasi n’importe quelle installation existante de serveur (ou aucune si vous venez de l’avoir), ça permet de faire tout ce qu’on veut avec notre remote chiffré du team drive.

Voici un cas d’utilisation basique (selon moi). Bien entendu on peut aller plus loin en passant par des scripts basés sur Docker comme GPBlitz/PGSuite/Plex Guide ou CloudBox ou encore S.S.D (français, avec un super Discord, une bonne ambiance ainsi qu’un SAV efficace !).

Comme vu, le team drive chiffré est monté dans /home/SDrive0Crypted. Tout ce qu’on y met est alors copié sur le team drive tout en étant chiffré. On peut donc lire/utiliser les fichiers depuis le serveur (ou un autre PC sur lequel on met rClone + son fichier de configuration) sans qu’ils soient stockés en clair chez Google.

On pourrait donc simplement copier tout ce qu’on télécharge dans ce montage en l’organisant un peu avec par exemples /home/SDrive0Crypted/Films, /home/SDrive0Crypted/Films4k, /home/SDrive0Crypted/Series…

Mais. Y’a un mais. Déjà… je suis Aerya, donc par définition “pas simple” :P Ensuite, ce que je n’aime pas trop en faisant comme ça c’est que tout ce qu’on dépose dans /home/SDrive0Crypted est envoyé automatiquement sur team drive.

En effet, y’a une limite d’upload de 750GB/24h, si on la dépasse, on est banni 24h (donc plus d’accès au team drive sur ce serveur ou un autre). Pareil, j’ai des dossiers de fichiers que je souhaite avoir sur mon serveur mais pas sur le Cloud (/Ratio, /SD, /Reseed, /Repost…). Puis j’aime bien aussi avoir mes logs de rClone séparés pour pouvoir vérifier l’upload de fichiers et à quelle vitesse.

C’est pour ces raisons que je préfère assurer l’upload sur le remote via un script à part. Et donc en ne les déposant pas directement dans /home/SDrive0Crypted.

On va créer ce script dans /home/scripts/move.sh

mkdir /home/scripts
nano /home/scripts/move.sh

#!/bin/bash
LOG="/home/logs/rclone.log"
EXC1="/SD/**"
EXC2="/Ratio/**"
EXC3="/PreSeries/**"
EXC4="/PreFilms/**"


if pidof -o %PPID -x "$0"; then
   exit 1
fi

sleep 30
while true
do
  echo "$(date "+%d.%m.%Y %T") RCLONE UPLOAD STARTED" | tee -a "$LOG"

rclone copy -c -v --copy-links --exclude='**partial~' --exclude="**_HIDDEN~" --exclude=".unionfs/**" --exclude=".unionfs-fuse/**" --exclude="$EXC1" --exclude="$EXC2" --exclude="$EXC3" --exclude="$EXC4" --min-age 5m --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" --fast-list --drive-stop-on-upload-limit --transfers=10 --checkers=10 --stats 5s --log-file="$LOG" /home/local SDrive0Crypt:/
sleep 480

  echo "$(date "+%d.%m.%Y %T") RCLONE UPLOAD ENDED" | tee -a "$LOG"
done

Notez quelques paramètres à adapter à votre utilisation/configuration :

  • l’emplacement des logs
  • les exclusions : EXC1=”/SD/**” fait que rien de ce qui sera dans /home/local/SD/ ne sera envoyé sur le team drive
  • en fin de script : /home/local SDrive0Crypt:/ sont le dossier dont le contenu est à envoyer sur le remote indiqué

Ensuite on le rend exécutable et on y reviendra plus tard dans les services.

chmod a+x /home/scripts/move.sh

Nous allons ajouter un dossier de temporisation (/home/local), depuis lequel un script viendra copier (ou déplacer), avec options/exclusions, les fichiers vers le remote.

Nous allons coupler ce nouveau dossier avec le /home/SDrive0Crypted afin que n’importe quelle application sur le serveur (Plex, Sonarr, Radarr, NextCloud…) puisse voir l’ensemble des fichiers, qu’ils soient déjà sur le team drive (/home/SDrive0Crypted) ou en attente/en cours d’upload (/home/local). Et on va fusionner ces dossiers dans un seul : /home/unionfs

C’est ce que je fais depuis que le pratique rClone, avec Amazon Cloud au début, via unionFS. On peut aussi utiliser mergerfs, un peu plus performant et dont le principe de fonctionnement reste le même.

Normalement unionfs est déjà installé. On passe donc à la création des dossiers adéquates. J’en ajoute un pour les logs.

mkdir /home/local /home/unionfs /home/logs

Passons aux services Systemd. Nous avons déjà celui du montage rClone, il faut en ajouter 2 : 1 pour le dossier de fusion /unionfs et 1 pour l’upload des fichiers sur le remote.

On peut les créer directement dans /etc/systemd/system

J’édite le mount.service du tutoriel précédent pour modifier le chemin des logs. On les passe de /home/rclonecache.log à /home/logs/mount.log

nano /etc/systemd/system/mount.service

[Unit]
Description=RClone Service
Wants=network-online.target
After=network-online.target
[Service]
Type=notify
Environment=RCLONE_CONFIG=/root/.config/rclone/rclone.conf
KillMode=none
RestartSec=5
ExecStart=/usr/bin/rclone mount SDrive0Crypted: /home/SDrive0Crypted --allow-other --allow-non-empty --dir-cache-time 240h --log-level INFO --log-file /home/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" --cache-dir=/cache --vfs-cache-mode full --vfs-cache-max-size 250G --vfs-cache-max-age 240h --bwlimit-file 16M --fast-list
ExecStop=/bin/fusermount -uz /home/SDrive0Crypted
Restart=on-failure
[Install]
WantedBy=multi-user.target

On le lance et le rend exécutable à chaque boot de la machine.

root@sdrive:/etc/systemd/system# systemctl start mount.service
root@sdrive:/etc/systemd/system# systemctl enable mount.service
Created symlink /etc/systemd/system/multi-user.target.wants/mount.service → /etc/systemd/system/mount.service.
root@sdrive:/etc/systemd/system

Puis on vérifie que tout a fonctionné = voir les 1.2P de montés dans /home/SDrive0Crypted

root@sdrive:/etc/systemd/system# df -H
Filesystem                        Size  Used Avail Use% Mounted on
/dev/mapper/pve-vm--100--disk--0   43G  873M   39G   3% /
none                              504k     0  504k   0% /dev
udev                              4.1G     0  4.1G   0% /dev/tty
tmpfs                             4.1G     0  4.1G   0% /dev/shm
tmpfs                             820M   91k  819M   1% /run
tmpfs                             5.3M     0  5.3M   0% /run/lock
tmpfs                             4.1G     0  4.1G   0% /sys/fs/cgroup
SDrive0Crypted:                   1.2P     0  1.2P   0% /home/SDrive0Crypted

On passe ensuite au service unionfs.service qui va fusionner /home/local et /home/SDrive0Crypted dans /home/unionfs

nano /etc/systemd/system/unionfs.service

[Unit]
Description=UnionFS Daemon
After=multi-user.target mount.service

[Service]
Type=simple
User=0
Group=0
ExecStartPre=/bin/sleep 10
ExecStart=/usr/bin/unionfs -o cow,allow_other,nonempty /home/local=RW:/home/SDrive0Crypted=RO /home/unionfs
ExecStop=/bin/fusermount -uz /home/unionfs
TimeoutStopSec=20
KillMode=process
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

On le lance et le rend exécutable à chaque boot de la machine.

root@sdrive:/etc/systemd/system# systemctl start unionfs.service
root@sdrive:/etc/systemd/system# systemctl enable unionfs.service
Created symlink /etc/systemd/system/multi-user.target.wants/unionfs.service → /etc/systemd/system/unionfs.service.
root@sdrive:/etc/systemd/system

Et là aussi on vérifie que tout fonctionne. On doit voir un nouveau montage de 1.2P dans /home/unionfs

root@sdrive:/etc/systemd/system# df -H
Filesystem                        Size  Used Avail Use% Mounted on
/dev/mapper/pve-vm--100--disk--0   43G  873M   39G   3% /
none                              504k     0  504k   0% /dev
udev                              4.1G     0  4.1G   0% /dev/tty
tmpfs                             4.1G     0  4.1G   0% /dev/shm
tmpfs                             820M   91k  819M   1% /run
tmpfs                             5.3M     0  5.3M   0% /run/lock
tmpfs                             4.1G     0  4.1G   0% /sys/fs/cgroup
SDrive0Crypted:                   1.2P     0  1.2P   0% /home/SDrive0Crypted
unionfs                           1.2P  1.2P   39G 100% /home/unionfs

Là on peut déjà vérifier qu’en effet tout fichier placé dans /home/unionfs sera bien visible dans /home/local mais pas envoyé automatiquement sur le team drive donc pas visible dans /home/SDrive0Crypted

root@sdrive:/home# ls
SDrive0Crypted  local  logs  scripts  unionfs
root@sdrive:/home# touch unionfs/testunionfs.encoremoi
root@sdrive:/home# ls -l unionfs/
total 0
-rw-rw-r-- 1 root root 0 Oct 15 00:46 testfile.coucou
-rw-r--r-- 1 root root 0 Oct 15 10:13 testunionfs.encoremoi
root@sdrive:/home# ls -l local/
total 0
-rw-r--r-- 1 root root 0 Oct 15 10:13 testunionfs.encoremoi
root@sdrive:/home# ls -l SDrive0Crypted/
total 0
-rw-rw-r-- 1 root root 0 Oct 15 00:46 testfile.coucou
root@sdrive:/home#

J’ai toujours bien qu’un seul fichier de visible sur mon team drive

Par conséquent on termine avec le service qui va uploader les fichiers contenus dans /home/local sur le team drive. Service qui va exécuter notre script move.sh créé plus haut. (dans /etc/systemd/system)

nano move.service

[Unit]
Description=Move Service Daemon
After=multi-user.target

[Service]
Type=simple
User=0
Group=0
ExecStart=/bin/bash /home/scripts/move.sh
TimeoutStopSec=20
KillMode=process
RemainAfterExit=yes
Restart=always

[Install]
WantedBy=multi-user.target

On le lance et le rend exécutable à chaque boot de la machine.

root@sdrive:/etc/systemd/system# systemctl start move.service
root@sdrive:/etc/systemd/system# systemctl enable move.service
Created symlink /etc/systemd/system/multi-user.target.wants/move.service → /etc/systemd/system/move.service.
root@sdrive:/etc/systemd/system

Cette fois-ci mon fichier de test est bien envoyé sur le team drive et apparaît dans son montage /home/SDrive0Crypted.

root@sdrive:/home# ls -l SDrive0Crypted/
total 0
-rw-rw-r-- 1 root root 0 Oct 15 00:46 testfile.coucou
-rw-rw-r-- 1 root root 0 Oct 15 10:13 testunionfs.encoremoi
root@sdrive:/home#

Côté team drive…

Amusez-vous bien :)

Mots clés