English bellow via deepl.
Bonjour,
Ce sujet a pour objet de proposer d’utiliser des bind-mount en lieu et place des liens symboliques pour stocker les données des applications dans un autre répertoire que /home/yunohost.app/$APP
.
Une mésaventure m’est en effet arrivée.
J’avais constaté que les sauvegardes que je réalise via la commande CLI yunohost backup create
ne suivaient pas le lien symbolique, réalisant des sauvegardes tronquées (type core_only). J’avais “corrigé” ce problème en modifiant le data_dir (ou datadir selon les apps) au moyen de la commande CLI yunohost app setting $APP data_dir -v /Monrépertoirededonnées
.
Les sauvegardes contenaient alors les données au complet.
Seulement, un jour, j’ai eu besoin de restaurer une très volumineuse application. J’avais en principe l’espace nécessaire sur la partition système pour recevoir les /tmp/
nécessaires à la restauration. Sauf que mon data_dir étant désormais incorrect le process de restauration a recopié en “provisionning” l’ensemble des données déjà là (en cas de pépin de restauration, je suppose, ne sais pas). La suite est un crash à 100% d’espace utilisé.
En discutant sur le support Matrix, nous avons découvert qu’en effet, le process de backup utilisé via la CLI ne suis effectivement pas les liens symboliques, et que c’est un fonctionnement cohérent.
on m’a conseillé d’utiliser des bind-mount en lieu et place des liens symboliques.
J’ai procédé au changement sur plusieurs de mes applications (pas fini encore, mais le concept est validé selon moi).
présentation de comment j’ai procédé
D’abord un peu de renseignements sur ce que c’est :
Understanding Bind Mounts
et comment le mettre dans /etc/fstab pour que tout soit monté durant le boot:
How do I do ‘mount --bind’ in /etc/fstab?
En supposant que les données sont déjà dans /autreemplacement
- Arrêt des services de l’application ou passage en mode maintenance pour éviter des accès pendant les manipulations.
- suppression de lien symbolique dans
/home/yunohost.app/$APP/
par la commanderm home/yunohost/$APP/monliensymbolique
(la commande rm ne suivra pas le lien et ne supprimera pas vos données vers lesquelles le lien pointe). - création du répertoire /home/yunohost.app/$APP/data (ou uploads, ou autre dépend de l’application)
- attribution des droits corrects pour cette application (peuvent être trouvés dans les scripts install du github de l’app-ynh)
- Montage du bind-mount (je le fais en ligne de commande d’abord pour tester) comme ceci
mount --bind /autreemplcement/data/ /home/yunohost.app/$APP/data/
- redémarrage des services de l’application et teste si tout fonctionne.
- si tout est OK, je reporte dans /etc/fstab le montage de mon bind-mount:
/autreemplcement/data/ /home/yunohost.app/$APP/data/ none defaults,bind 0 0
ainsi à chaque boot, les montages seront faits.
Puisque j’avais fait la bêtise de modifier le data_dir de l’application, j’ajoute un point 5bis) pour remettre la valeur correcte: sudo yunohost app setting $APP data_dir -v /home/yunohost.app/$APP/
Voilà, faites moi part de vos idées, remarques, interrogations, …
English version:
Hello,
The purpose of this topic is to suggest using bind-mounts instead of symbolic links to store application data in a directory different from /home/yunohost.app/$APP
.
A misadventure happened to me.
I had noticed that the backups I made using the CLI command yunohost backup create
did not follow the symbolic link, resulting in truncated backups (core_only type). I had “corrected” this problem by modifying the data_dir (or datadir depending on the app) using the CLI command yunohost app setting $APP data_dir -v /MydataDirectory
.
The backups then contained all the data.
One day, however, I needed to restore a very large application. In principle, I had the necessary space on the system partition to receive the /tmp/
necessary for restoration. Except that my data_dir was now incorrect, and the restore process “provisioned” all the data already there (in case of a restore glitch, I suppose, don’t know). The result is a crash with 100% space used.
Discussing this with Matrix support, we discovered that, indeed, the backup process used via the CLI does not follow symbolic links, and that this is a consistent practice.
I was advised to use bind-mount instead of symbolic links.
I made the change on several of my applications (not finished yet, but the concept is validated in my opinion).
presentation of how I went about it
First a little background on what it is:
Understanding Bind Mounts
and how to put it in /etc/fstab so that everything is mounted during boot:
How do I do ‘mount --bind’ in /etc/fstab?
Assuming data is already in `/otherlocation
- Stop application services or switch to maintenance mode to avoid access during manipulation.
- remove the symbolic link in
/home/yunohost.app/$APP/
using the commandrm home/yunohost/$APP/mysymlink
(the rm command will not follow the link and will not delete your data to which the link points). - create the directory /home/yunohost.app/$APP/data (or uploads, or whatever depends on the application)
- assign the correct rights for this application (these can be found in the install scripts on the app-ynh github)
- mount the bind-mount (I’m doing it on the command line first, to test) like this
mount --bind /otherlocation/data/ /home/yunohost.app/$APP/data/
- restart application services and test if everything works.
- if everything’s OK, I enter my bind-mount in /etc/fstab:
/otherlocation/data/ /home/yunohost.app/$APP/data/ none defaults,bind 0 0
so that at each boot, the mounts will be done.
Since I’d made the mistake of modifying the application’s data_dir, I’ll add a point 5bis) to restore the correct value: sudo yunohost app setting $APP data_dir -v /home/yunohost.app/$APP/
.
Here you go, let me know your ideas, comments, questions, etc.