J'aimerais pouvoir fusionner les modifications du système de fichiers supérieur d'un montage superposé vers un système de fichiers inférieur.
Je suis intéressé à la fois en ligne (c'est-à-dire fusionner tandis que la superposition est montée) et hors ligne (démonter la superposition puis fusionner) solutions.
J'ai trouvé quelques solutions hors ligne, que j'ai ajoutées comme réponses.
Est-ce que quelqu'un connaît un site en ligne solutions? Ce serait bien d'avoir une commande de type "commit" que vous pourriez exécuter pour fusionner les couches pendant que la superposition est toujours montée.
Quelque chose comme ça a été posé dans les questions suivantes sans réponse :
- Est-il possible de modifier un fichier et de le synchroniser avec le répertoire inférieur dans OverlayFs ?
- Comment modifier un fichier inférieur via un répertoire OverlayFS ?
- OverlayFS modifie de manière transparente le fichier dans le répertoire inférieur
- OverlayFS – Comment rendre persistantes les modifications apportées au système de fichiers supérieur sans démonter ?
Les commentaires dans ces messages suggèrent diversement fusionfs et bcache, qui résolvent tous deux des cas d'utilisation spécifiques, mais pas le cas d'utilisation générique indépendant du système de fichiers fourni par les superpositions.
Mon objectif est d'avoir un bac à sable de système de fichiers sécurisé avec des instantanés pouvant être utilisés avec n'importe quelle application Linux sur n'importe quel système de fichiers sous-jacent (si possible), vous permettant d'annuler les modifications ou de les valider manuellement lorsque vous êtes prêt.
Je soupçonne que Linux principal moderne a toutes les fonctionnalités nécessaires pour faire cela intégré, grâce à toutes les innovations de sandboxing/virtualisation de ces dernières années, si seulement je savais comment les utiliser.
Réponse acceptée :
Une tentative de connexion en ligne solution, mais ce n'est pas tout à fait ça.
La configuration (par exemple, /tmp
répertoire, en tant que root):
LOWER=$HOME
mkdir u1 w1 o1 O
mount -t overlay overlay -o lowerdir=$LOWER,upperdir=u1,workdir=w1 o1
mount --bind o1 O
Ensuite, vous pouvez travailler en O
répertoire, qui est une superposition sur $LOWER
. Lorsque vous voulez faire l'instantané :
mkdir u2 w2 o2
mount -t overlay overlay -o lowerdir=o1,upperdir=u2,workdir=w2 o2
(Notez que les superpositions imbriquées comme celle-ci ne fonctionneront pas sur les anciens noyaux).
Mais alors je veux un moyen de changer atomiquement le montage de liaison à O
pointer vers o2
au lieu de o1
. Je ne sais pas comment faire autrement que :
umount O
mount --bind o2 O
(Non atomique; il y a une fenêtre où O
est démonté).
Idéalement, les processus en cours d'exécution pourraient continuer à s'exécuter sans savoir que le système de fichiers sous-jacent de O
avait changé de o1
à o2
. Je ne sais pas si cela est possible, ou si changer le système de fichiers sous-jacent de O
comme cela perturbera trop les applications ouvertes. Je dois enquêter plus avant.
Puis, une fois O
a été redirigé vers o2
, nous pouvons remonter o1
en lecture seule par précaution, puis effectuez une fusion hors ligne en utilisant par exemple rdiffdir ou overlayfs-tools.
Enfin, nous voudrions un moyen de remonter atomiquement o2
comme lowerdir=$HOME,upperdir=u2,workdir=w2
de sorte que o1
, u1
et w1
(tous les répertoires maintenant vides) pourraient être supprimés. Encore une fois, je ne sais pas si c'est possible.
Sinon, nous pouvons obtenir des instantanés en imbriquant simplement des superpositions de plus en plus profondes et en laissant la superposition et les répertoires supérieurs pour chaque montage sans tenter de fusionner ou de nettoyer. Mais il y a probablement une limite au nombre de superpositions imbriquées qui peuvent être montées. Et à un moment donné, nous devons encore fusionner les calques vers le bas si nous voulons conserver les modifications.