Réponses:
Edit: Depuis que cette réponse a été écrite, certaines choses ont changé dans les superpositions, à savoir l’ajout d’un paramètre requis workdir
, voir la réponse ci-dessous pour une description détaillée de ce nouveau paramètre.
J'ai finalement réussi à le trouver. J'ai trouvé des références à cela dans les sources du noyau, mais pour une raison quelconque, cela n'apparaît pas dans l'arborescence git sur kernel.org. Mais! Si vous tirez la source du noyau Ubuntu comme ceci: apt-get source linux-image-3.0.0-16-generic
vous pouvez la trouver dans linux-3.0.0/Documentation/overlayfs.txt
. Il est également disponible dans le paquet linux-doc dans /usr/share/doc/linux-doc/filesystems/overlayfs.txt.gz
.
Comme la documentation d'aide actuelle est plus un "comment ça marche" au lieu d'un "comment monter avec elle", voici un bref aperçu (il y a un exemple dans la documentation du noyau):
mount -t overlayfs -o [mount options] overlayfs [mountpoint for merged system]
Où [options de montage] peuvent être:
Une chose qui m'a dérouté au début, alors je devrais probablement préciser, est que monter un overlayfs ne monte pas un système de fichiers. J'essayais de monter un système de fichiers squashfs en utilisant un montage overlayfs, mais ce n'est pas ainsi que cela fonctionne. Vous devez d’abord monter le système de fichiers (dans mon cas squashfs) dans un répertoire quelconque, puis utiliser overlayfs pour fusionner le point de montage (un répertoire) et un autre répertoire dans un répertoire tertiaire (le point de montage overlayfs) (edit: this "tertiary") peut être réellement le répertoire upperdir =). Le répertoire tertiaire est l'endroit où vous verrez les systèmes de fichiers fusionnés (ou les arborescences de répertoires - c'est flexible).
Je travaille sur un disque d'amorçage hybride Ubuntu où le système de base Ubuntu existe sous la forme système de fichiers.squashfs et j'ai des fichiers appelés ubuntu.overlay kubuntu.overlay xubuntu.overlay et lubuntu.overlay. Les fichiers .overlay sont des installations de base desdits systèmes avec le contenu de filesystem.squashfs élagué (pour économiser de l'espace). Ensuite, j'ai modifié les scripts d'initialisation pour superposer le fichier .overlay de la distribution correcte (à partir d'un paramètre de démarrage) à l'aide de overlayfs et des options ci-dessus, et cela fonctionne à merveille!
Voici les lignes que j'ai utilisées dans mes scripts d'initialisation (une fois toutes les variables traduites):
mkdir -p /overlay
mount -t squashfs /cdrom/casper/ubuntu.overlay /overlay
mount -t overlayfs -o lowerdir=/filesystem.squashfs,upperdir=/overlay overlayfs /
Notez que filesystem.squashfs ci-dessus est un répertoire créé par casper, pas un fichier.
Ces trois instructions créent un /overlay
répertoire, montent un système de fichiers squashfs sur le /overlay
répertoire, puis utilisent OverlayFS pour fusionner le contenu de /overlay
over /
.
Dans le processus de reconstruction de ma clé USB live pour chaque version, j'utilise OverlayFS pour gagner beaucoup de temps. Je commence avec un répertoire appelé ubuntu-base qui contient le contenu de l'image ubuntu-core, qui est l'installation la plus basique. Je créerai ensuite des répertoires appelés ubuntu, kubuntu, lubuntu et xubuntu.
Ensuite, j'utilise OverlayFS pour que les fichiers d'ubuntu-base apparaissent dans les répertoires individuels. Je voudrais utiliser quelque chose comme ça:
mount -t overlayfs -o lowerdir=ubuntu-base,upperdir=kubuntu overlayfs kubuntu
Cela fait apparaître les fichiers d'ubuntu-base dans le dossier kubuntu. Ensuite, je peux chroot
aller dans le dossier kubuntu et faire quelque chose comme apt-get install kubuntu-desktop
. Toutes les modifications apportées pendant ce montage OverlayFS resteront dans le répertoire supérieur, dans ce cas le dossier kubuntu. Ensuite, une fois que je démonte OverlayFS, montez les fichiers qui existent vraiment dans ubuntu-base mais sont "reflétés" dans le dossier kubuntu, sauf s’ils ont été modifiés. Cela m'empêche d'avoir plusieurs copies des fichiers dans ubuntu-base tout en pouvant les utiliser comme s'ils existaient physiquement à chaque emplacement.
overlay
pasoverlayfs
De https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt :
Plus haut et plus bas
Un système de fichiers en superposition combine deux systèmes de fichiers: un système de fichiers «supérieur» et un système de fichiers «inférieur». Lorsqu'un nom existe dans les deux systèmes de fichiers, l'objet dans le système de fichiers 'supérieur' est visible, tandis que l'objet dans le système de fichiers 'inférieur' est masqué ou, dans le cas de répertoires, fusionné avec l'objet 'supérieur'.
Il serait plus correct de faire référence à une «arborescence de répertoires» supérieure et inférieure plutôt qu'à un «système de fichiers», car il est tout à fait possible que les deux arborescences de répertoires se trouvent dans le même système de fichiers et il n'est pas nécessaire de spécifier la racine d'un système de fichiers. soit supérieur ou inférieur.
Le système de fichiers inférieur peut être n’importe quel système de fichiers pris en charge par Linux et n’a pas besoin d’être inscriptible. Le système de fichiers inférieur peut même être un autre overlayfs. Le système de fichiers supérieur sera normalement accessible en écriture. S'il l'est, il doit prendre en charge la création d'attributs étendus de confiance. * Et doit fournir un type d valide dans les réponses readdir. NFS ne convient donc pas.
Une superposition en lecture seule de deux systèmes de fichiers en lecture seule peut utiliser n'importe quel type de système de fichiers.
Répertoires
La superposition concerne principalement des répertoires. Si un nom donné apparaît à la fois dans les systèmes de fichiers supérieur et inférieur et fait référence à un non-répertoire dans l'un ou l'autre, l'objet inférieur est masqué - le nom ne fait référence qu'à l'objet supérieur.
Lorsque les objets supérieur et inférieur sont des répertoires, un répertoire fusionné est formé.
Au moment du montage, les deux répertoires donnés comme options de montage "lowerdir" et "upperdir" sont combinés dans un répertoire fusionné:
mount -t overlay overlay -olowerdir=/lower,upperdir=/upper,workdir=/work /merged
Le "workdir" doit être un répertoire vide sur le même système de fichiers que upperdir.
Ensuite, chaque fois qu'une recherche est demandée dans un tel répertoire fusionné, la recherche est effectuée dans chaque répertoire réel et le résultat combiné est mis en cache dans le répertoire appartenant au système de fichiers de superposition. Si les deux recherches réelles trouvent des répertoires, elles sont toutes deux stockées et un répertoire fusionné est créé. Sinon, un seul répertoire est stocké: le supérieur s'il existe, sinon le inférieur.
Seules les listes de noms de répertoires sont fusionnées. Les autres contenus, tels que les métadonnées et les attributs étendus, ne sont rapportés que pour le répertoire supérieur. Ces attributs du répertoire inférieur sont masqués.
J'ai étendu ces artikels pour inclure un script pour overlayfs qui configure un fs racine en lecture seule.
J'espère que ça aide.
Exemple minimal exécutable
# Create the filesystems.
dd if=/dev/zero of=lower.ext4 bs=1024 count=102400
mkfs -t ext4 lower.ext4
cp lower.ext4 upper.ext4
mkdir lower upper overlay
sudo mount lower.ext4 lower
sudo mount upper.ext4 upper
sudo chown "$USER:$USER" lower upper
printf lower-content > lower/lower-file
# Upper and work must be on the same filesystem.
mkdir upper/upper upper/work
printf upper-content > upper/upper/upper-file
# Work must be empty. E.g. this would be bad:
#printf work-content > upper/work/work-file
# Make the lower readonly to show that that is possible:
# writes actually end up on the upper filesystem.
sudo mount -o remount,ro lower.ext4 lower
# Create the overlay mount.
sudo mount \
-t overlay \
-o lowerdir=lower,upperdir=upper/upper,workdir=upper/work \
none \
overlay \
;
# Interact with the mount.
printf 'overlay-content' > overlay/overlay-file
ls lower upper/upper upper/work overlay
# Write to underlying directories while mounted
# gives undefined behaviour.
#printf lower-content-2 > lower/lower-file-2
#printf upper-content-2 > upper/upper-file-2
# Unmount the overlay and observe state.
sudo umount overlay
ls lower upper/upper upper/work
# Cleanup.
sudo umount upper lower
Sortie du premier ls
avec la monture:
lower:
lost+found lower-file
overlay:
lost+found lower-file overlay-file upper-file
upper/upper:
overlay-file upper-file
upper/work:
work
Sortie de la seconde ls
sans la monture:
lower:
lost+found lower-file
upper/upper:
overlay-file upper-file
upper/work:
work
Interprétation:
work/
répertoire) dont on ne devrait pas se soucierExemple adapté de: Example OverlayFS Usage
Voici un exemple plus complexe avec plusieurs couches inférieures: Overlayfs recharge plusieurs couches (migration en dehors de aufs)
Testé sur Ubuntu 18.04, noyau Linux 4.15.0.
mount -t overlayfs -o rw,uppderdir=x,lowerdir=y overlayfs /mount/point
. Au-delà de ça, je suis désemparé. Je bricole avec cela dans un système en direct, mais je n'ai pas encore réussi à le faire fonctionner. J'aimerais pouvoir découvrir exactement ce que "upperdir" et "lowerdir" signifient. Je n'ai rien trouvé.