Comment puis-je utiliser OverlayFS?

47

Cette réponse et email indique que quelque chose appelé" OverlayFS "est disponible dans Ubuntu 11.10 et remplacera de force aufs dans Ubuntu 12.04.

Comment l'utiliser? Où est sa documentation?

    
posée ændrük 02.03.2012 - 16:05
la source

3 réponses

58

Edit: Depuis l'écriture de cette réponse, certaines choses ont changé dans overlayfs, à savoir l'ajout d'un paramètre requis workdir , voir totti 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 à celui-ci dans les sources du noyau, mais pour une raison quelconque, il 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 le trouver dans linux-3.0.0/Documentation/overlayfs.txt . Il est également disponible dans le package 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] peut être:

  • lowerdir = somedir: lowerdir est le répertoire sur lequel vous allez placer votre nouveau système de fichiers, s'il y a des doublons, ceux-ci sont écrasés par (en fait, caché en faveur de) la version supérieure de
  • upperdir = somedir: upperdir est le répertoire avec lequel vous voulez superposer. Si des noms de fichiers en double existent dans le fichier lowerdir et upperdir, la version de upperdir est prioritaire.
  • options de montage standard. Le seul que j'ai vu du code est ro / rw, mais vous pouvez expérimenter.

Une chose qui m'a déconcerté au début, alors je devrais probablement préciser, c'est que monter un overlayfs ne monte pas réellement 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 comme ça que ça marche. Vous devez d'abord monter le système de fichiers (dans mon cas, squashfs) dans un répertoire arbitraire, puis utiliser overlayfs pour fusionner le point de montage (un répertoire) et un autre répertoire sur un répertoire tertiaire (le point de montage overlayfs). peut en fait être le répertoire upperdir =). Le répertoire tertiaire est l'endroit où vous verrez les systèmes de fichiers fusionnés (ou arborescences de répertoires - il est flexible).

Exemple 1, superposition du système de fichiers racine

J'ai travaillé sur un disque de démarrage hybride Ubuntu dans lequel le système Ubuntu de base existe en tant que filesystem.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 gagner de la place). 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) en utilisant les options overlayfs et les options ci-dessus et cela fonctionne comme un charme!

Ce sont 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 répertoire /overlay , montent un système de fichiers squashfs sur le répertoire /overlay , puis utilisent OverlayFS pour fusionner essentiellement le contenu de /overlay over / .

Exemple 2, fusion transparente de deux répertoires

Dans le processus de reconstruction de l’USB en direct pour chaque version, j’utilise OverlayFS pour gagner du 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 élémentaire. Je créerai ensuite des répertoires appelés ubuntu, kubuntu, lubuntu et xubuntu.

Ensuite, j'utilise OverlayFS pour que les fichiers de la base ubuntu 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 co% co% afficher le dossier kubuntu et faire quelque chose comme chroot . Toutes les modifications apportées dans ce montage OverlayFS resteront dans le répertoire supérieur, dans ce cas le dossier kubuntu. Puis, une fois que je démonte le montage OverlayFS, les fichiers qui existent réellement dans ubuntu-base mais qui sont "mis en miroir" dans le dossier kubuntu disparaissent à moins qu'ils n'aient été modifiés. Cela m'empêche d'avoir plusieurs copies des fichiers dans ubuntu-base tout en étant capable de les utiliser comme si elles existaient physiquement dans chaque emplacement.

    
réponse donnée Chuck R 02.03.2012 - 17:32
la source
18

De lien :

  

supérieur et inférieur

     

Un système de fichiers superposé 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, le   objet dans le système de fichiers 'supérieur' est visible tandis que l'objet dans le   "inférieur" système de fichiers est soit caché ou, dans le cas de répertoires,   fusionné avec l'objet «supérieur».

     

Il serait plus correct de se référer à un répertoire supérieur et inférieur   tree 'plutôt que' filesystem 'car il est tout à fait possible pour les deux   les arborescences de répertoires doivent être dans le même système de fichiers et il n'y a pas de   exigence que la racine d'un système de fichiers soit donnée pour supérieur ou   plus bas.

     

Le système de fichiers inférieur peut être n'importe quel système de fichiers supporté par Linux et   pas besoin d'être accessible en écriture. Le système de fichiers inférieur peut même être un autre   superposition Le système de fichiers supérieur sera normalement accessible en écriture et si   est-ce qu'il doit supporter la création d'attributs   doit fournir un d_type valide dans les réponses readdir, donc NFS ne convient pas.

     

Une superposition en lecture seule de deux systèmes de fichiers en lecture seule peut utiliser   type de système de fichiers.

     

Répertoires

     

La superposition implique principalement des répertoires. Si un prénom apparaît dans les deux   systèmes de fichiers supérieur et inférieur et fait référence à un non-répertoire dans l'un ou l'autre,   alors l'objet inférieur est caché - le nom se réfère uniquement à la partie supérieure   objet.

     

Où les objets supérieurs et inférieurs 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   comme supérieure.

     

Ensuite, chaque fois qu’une requête est demandée dans un tel répertoire, le   la recherche est effectuée dans chaque répertoire réel et le résultat combiné   est mis en cache dans le dentry appartenant au système de fichiers superposé. Si les deux   les recherches effectives trouvent les répertoires, les deux sont stockés et un fusionné   répertoire est créé, sinon un seul est stocké: le supérieur si   existe, sinon le plus bas.

     

Seules les listes de noms provenant de répertoires sont fusionnées. Autre contenu   tels que les métadonnées et les attributs étendus sont signalés pour la partie supérieure   répertoire uniquement. Ces attributs du répertoire inférieur sont masqués.

    
réponse donnée totti 23.06.2014 - 12:07
la source
7

J'ai étendu ces articles pour inclure un script pour overlayfs qui configure une racine fs en lecture seule.

J'espère que ça aide.

    
réponse donnée Floyd42 22.03.2012 - 16:30
la source

Lire d'autres questions sur les étiquettes