Unionfs

De wiki mdd
Aller à la navigation Aller à la recherche
  • !*!*!*!*! BROUILLON *!*!***!

Pour continuer, vous devez déjà avoir configuré votre serveur pour utiliser rclone-cache ou plexdrive.
Cette partie va montrer comment "mélanger" un lecteur local et un lecteur distant pour optimiser vos téléchargements et visionnages.

Installation[modifier]

Vous devez déjà avoir fuse d'installé.
Pour install unionfs :

apt install unionfs-fuse

Unionfs : la théorie[modifier]

Unionfs est un système de montage avancé, qui permet de présenter un répertoire au système (par exemple /mnt/unionfs), alors que ce répertoire est en fait un mélange de plusieurs répertoires existants. Par exemple, j'ai sur ma machine un répertoire /home/steph/dossier1, qui contient le fichier fichier1.txt, et un répertoire /home/steph/dossier2, qui contient le fichier fichier2.txt.
Je peux créer une "fusion" de ces deux répertoires dans /mnt/unionfs. Les deux répertoires continueront d'exister et de vivre leur vie, mais le répertoire /mnt/unionfs agira comme s'il contenait les fichiers fichier1.txt et fichier2.txt. Si un des répertoires dossier1 ou dossier2 est modifié, la modification sera immédiate sur le répertoire fusionné.
Une des particularités est qu'on peut déclarer certains répertoires de la fusion comme en lecture seule, et d'autres en lecture écriture. Dans notre exemple précédent, le dossier1 sera en lecture seule, et le dossier2 en lecture écriture.
Pour résumer, à cet instant, nous avons :

dossier1
  - fichier1.txt
dossier2
  - fichier2.txt
/mnt/unionfs
  - fichier1.txt
  - fichier2.txt

Supposons que je rajoute le fichier doc.html à la main dans le dossier2, j'obtiendrais :

dossier1
  - fichier1.txt
dossier2
  - fichier2.txt
  - doc.html
/mnt/unionfs
  - fichier1.txt
  - fichier2.txt
  - doc.html

Là où ça devient fort, c'est que si j'ajoute le fichier facture.pdf dans le répertoire /mnt/unionfs (oui, le répertoire fusionné !), comme c'est le dossier2 qui est déclaré en lecture écriture, nous allons obtenir :

dossier1
  - fichier1.txt
dossier2
  - fichier2.txt
  - doc.html
  - facture.pdf
/mnt/unionfs
  - fichier1.txt
  - fichier2.txt
  - doc.html
  - facture.pdf

Comment utiliser ça avec plex et Google Drive ?[modifier]

Nous allons utiliser unionfs pour fusionner deux répertoires : un qui est notre Google Drive, en lecture seule, et un qui sera un répertoire local qui servira de tampon pour que medusa/couchpotato/sickrage/radarr/sonarr et toute la clique puisse écrire.
Supposons que nous avons le répertoire plexdrive des films (ou rclone cache) déchiffré qui est dans /mnt/plexdrive-uncrypt/films. Je vais créer un répertoire /mnt/unionfs/films, qui sera la fusion de /mnt/plexdrive-uncrypt/films et de /home/steph/rw/films (par exemple...)
Pour cela, je vais d'abord créer un fichier de service : /etc/systemd/system/unionfs-films.service

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

[Service]
Type=simple
User=steph
Group=steph
ExecStartPre=/bin/sleep 10
ExecStart=/usr/bin/unionfs -o cow,allow_other,nonempty /home/steph/rw/films=RW:/mnt/plexdrive-uncrypt/films=RO /mnt/unionfs/films
ExecStop=/bin/fusermount -uz /mnt/unionfs/films
TimeoutStopSec=20
KillMode=process
RemainAfterExit=yes
Restart=always

[Install]
WantedBy=multi-user.target

Bien entendu, il faut changer les chemins par rapport à votre besoin, s'assurer que tous les dossiers existent et que votre utilisateur y a accès, et aussi l'utilisateur. Puis :

systemctl enable unionfs-films
systemctl start unionfs-films

Nous remarquons que le dossier plexdrive est en lecture seule (RO pour Read Only), et que le dossier /home/steph/rw/films est en lecture écriture (RW pour Read/Write).
On vérifie que le dossier /mnt/unionfs/films contient bien les fichiers de /mnt/plexdrive-uncrypt/films avant d'aller plus loin.

Maintenant, il faut déclarer le dossier /mnt/unionfs/films comme source de films pour plex (il a donc accès à la bibliothèque google drive). Il faut aussi déclarer ce dossier comme destination pour couchpotato/radarr
Quand couchpotato va télécharger un film, il va donc l'écrire dans /mnt/unionfs/films (et donc indirectement dans /home/steph/rw/films) et donc il est accessible immédiatement.

Déplacer les fichiers[modifier]

Normalement, on a bien compris le fonctionnement. Mais là, le bât blesse, c'est que la disque local va se remplir et il faut donc trouver un système pour envoyer les fichiers vers Google Drive.
Pour cela, il y a la solution cloudplow qui répond exactement à nos besoins.
La documentation se trouve sur la page en lien, et est assez facile à mettre en oeuvre.