Come si usa OverlayFS?

47

Questa risposta e messaggio email indica che qualcosa chiamato" OverlayFS "è disponibile in Ubuntu 11.10 e sostituirà forzatamente aufs in Ubuntu 12.04.

Come lo uso? Dov'è la sua documentazione?

    
posta ændrük 02.03.2012 - 16:05

3 risposte

58

Modifica: dopo aver scritto questa risposta, alcune cose sono cambiate in overlayfs, ovvero l'aggiunta di un parametro obbligatorio workdir , vedi totti's rispondi di seguito per una descrizione dettagliata di questo nuovo parametro.

Sono finalmente riuscito a trovarlo. Ho trovato dei riferimenti ad esso nel sorgente del kernel, ma per qualche motivo non appare nell'albero git su kernel.org. Ma! Se si estrae il sorgente del kernel di Ubuntu in questo modo: apt-get source linux-image-3.0.0-16-generic lo si può trovare in linux-3.0.0/Documentation/overlayfs.txt . È anche disponibile nel pacchetto linux-doc in /usr/share/doc/linux-doc/filesystems/overlayfs.txt.gz .

Poiché la documentazione di aiuto effettiva è più di un "come funziona" invece di un "come montare con esso", ecco un breve riepilogo (c'è un esempio nella documentazione del kernel):

mount -t overlayfs -o [mount options] overlayfs [mountpoint for merged system]

Dove [opzioni di montaggio] possono essere:

  • lowerdir = somedir: lowerdir è la directory su cui poggerai il tuo nuovo filesystem, se ci sono duplicati questi vengono sovrascritti da (in realtà, nascosto a favore di) la versione di upperdir
  • upperdir = somedir: upperdir è la directory in cui desideri sovrapporre lowerdir con. Se esistono nomi di file duplicati in lowerdir e upperdir, la versione di upperdir ha la precedenza.
  • opzioni di montaggio standard. L'unico che ho visto dal codice è ro / rw, ma puoi sperimentare.

Una cosa che mi ha confuso all'inizio, quindi dovrei probabilmente chiarire, è che montare un overlayfs in realtà non monta un filesystem. Stavo cercando di montare un filesystem squashfs usando un mount overlayfs, ma non è così che funziona. È necessario prima montare il filesystem (nel mio caso squashfs) in una directory arbitraria, quindi utilizzare overlayfs per unire il punto di montaggio (una directory) e un'altra directory in una directory terziaria (il punto di montaggio overlayfs) (edit: questa directory "terziario" può essere effettivamente la directory upperdir =). La directory terziaria è dove vedrai i filesystem uniti (o gli alberi delle directory - è flessibile).

Esempio 1, sovrapposizione del filesystem di root

Ho lavorato su un disco di avvio ibrido di Ubuntu in cui il sistema Ubuntu di base esiste come filesystem.squashfs e ho file chiamati ubuntu.overlay kubuntu.overlay xubuntu.overlay e lubuntu.overlay. I file .overlay sono installazioni di base di detti sistemi con il contenuto di filesystem.squashfs potato (per risparmiare spazio). Poi ho modificato gli script di init per sovrapporre il file .overlay della distro corretta (da un parametro di avvio) usando overlayfs e le opzioni di cui sopra e funziona come un incantesimo!

Queste sono le righe che ho usato nei miei script di init (una volta che tutte le variabili sono state tradotte):

mkdir -p /overlay
mount -t squashfs /cdrom/casper/ubuntu.overlay /overlay
mount -t overlayfs -o lowerdir=/filesystem.squashfs,upperdir=/overlay overlayfs /

Nota che filesystem.squashfs di sopra è una directory creata da casper, non da un file.

Queste tre istruzioni creano una directory /overlay , montano un filesystem squashfs nella directory /overlay e poi usano OverlayFS per unire essenzialmente il contenuto di /overlay su / .

Esempio 2, fusione trasparente di due directory

Durante il processo di ricostruzione della mia USB live per ogni versione, utilizzo OverlayFS per risparmiare un po 'di tempo. Comincio con una directory chiamata ubuntu-base che contiene il contenuto dell'immagine ubuntu-core che è l'installazione di base. Creerò quindi le directory chiamate ubuntu, kubuntu, lubuntu e xubuntu.

Quindi, uso OverlayFS per mostrare i file di ubuntu-base nelle singole directory. Vorrei usare qualcosa di simile:

mount -t overlayfs -o lowerdir=ubuntu-base,upperdir=kubuntu overlayfs kubuntu

Questo fa apparire i file da ubuntu-base nella cartella kubuntu. Quindi, posso chroot alla cartella kubuntu e fare qualcosa come apt-get install kubuntu-desktop . Eventuali modifiche apportate durante l'installazione di OverlayFS rimarranno nella directory superiore, in questo caso nella cartella kubuntu. Quindi, una volta smontato il montaggio di OverlayFS, i file che esistono realmente in ubuntu-base ma sono "specchiati" nella cartella kubuntu si annullano a meno che non siano stati modificati. Questo mi impedisce di avere più copie dei file in ubuntu-base mentre sono ancora in grado di usarli come se esistessero fisicamente in ogni posizione.

    
risposta data Chuck R 02.03.2012 - 17:32
18

Da link :

  

Superiore e Inferiore

     

Un filesystem di sovrapposizione combina due filesystem - un filesystem 'superiore'   e un filesystem 'inferiore'. Quando un nome esiste in entrambi i filesystem, il   l'oggetto nel filesystem 'superiore' è visibile mentre l'oggetto nel file   il filesystem 'inferiore' è nascosto o, nel caso di directory,   unito con l'oggetto 'superiore'.

     

Sarebbe più corretto fare riferimento a una directory superiore e inferiore   tree 'piuttosto che' filesystem 'in quanto è del tutto possibile per entrambi   gli alberi delle directory devono essere nello stesso file system e non c'è   requisito che venga data la radice di un filesystem per upper o   inferiore.

     

Il filesystem inferiore può essere qualsiasi filesystem supportato da Linux e lo fa   non ha bisogno di essere scrivibile. Il filesystem inferiore può anche essere un altro   overlayfs. Il filesystem in alto sarà normalmente scrivibile e se lo è   è necessario supportare la creazione di trusted * attributi estesi, e   deve fornire d_type valido nelle risposte readdir, quindi NFS non è adatto.

     

Un overlay di sola lettura di due filesystem di sola lettura può usare qualsiasi   tipo di filesystem.

     

directory

     

La sovrapposizione riguarda principalmente le directory. Se un nome dato appare in entrambi   filesystem superiore e inferiore e si riferisce a una non-directory in entrambi,   quindi l'oggetto inferiore è nascosto - il nome si riferisce solo alla parte superiore   oggetto.

     

Dove entrambi gli oggetti superiore e inferiore sono directory, una directory unita   è formato.

     

Al momento del mount, le due directory fornite come opzioni di mount "lowerdir" e   "upperdir" sono combinati in una directory unita:

mount -t overlay overlay -olowerdir=/lower,upperdir=/upper,workdir=/work /merged
     

Il "workdir" deve essere una directory vuota sullo stesso filesystem   come upperdir.

     

Quindi ogni volta che viene richiesta una ricerca in tale directory unita, il file   la ricerca viene eseguita in ogni directory effettiva e il risultato combinato   è memorizzato nella cache della denteria appartenente al filesystem di sovrapposizione. Se entrambi   le ricerche effettive trovano le directory, entrambe sono archiviate e unite   la directory viene creata, altrimenti ne viene memorizzata solo una: la superiore se si   esiste, altrimenti il ​​più basso.

     

Solo le liste di nomi delle directory sono unite. Altro contenuto   come i metadati e gli attributi estesi sono riportati per la parte superiore   solo directory. Questi attributi della directory inferiore sono nascosti.

    
risposta data totti 23.06.2014 - 12:07
7

Ho esteso questi artikels per includere uno script per overlayfs che imposta un fs root di sola lettura.

Spero che aiuti.

    
risposta data Floyd42 22.03.2012 - 16:30

Leggi altre domande sui tag