Diese Antwort und E-Mail-Nachricht zeigen an, dass etwas mit dem Namen "OverlayFS" in Ubuntu 11.10 verfügbar ist und aufs in Ubuntu 12.04 mit Nachdruck ersetzt.
Wie benutze ich es? Wo ist die Dokumentation?
Diese Antwort und E-Mail-Nachricht zeigen an, dass etwas mit dem Namen "OverlayFS" in Ubuntu 11.10 verfügbar ist und aufs in Ubuntu 12.04 mit Nachdruck ersetzt.
Wie benutze ich es? Wo ist die Dokumentation?
Antworten:
Edit: Da diese Antwort zu schreiben, einige Dinge in overlayfs geändert haben, nämlich die Zugabe eines gewünschten Parameters workdir
finden totti Antwort unten für eine detaillierte Beschreibung dieser neuen Parameter.
Ich habe es endlich geschafft, es zu finden. Ich habe in der Kernelquelle Verweise darauf gefunden, aber aus irgendeinem Grund wird es nicht im Git-Baum auf kernel.org angezeigt. Aber! Wenn Sie die Ubuntu-Kernelquelle wie folgt herunterladen: apt-get source linux-image-3.0.0-16-generic
Sie finden sie in linux-3.0.0/Documentation/overlayfs.txt
. Es ist auch im linux-doc-Paket in verfügbar /usr/share/doc/linux-doc/filesystems/overlayfs.txt.gz
.
Da es sich bei der eigentlichen Hilfedokumentation eher um eine "Funktionsweise" als um eine "Vorgehensweise zum Mounten" handelt, folgt eine kurze Zusammenfassung (in der Kerneldokumentation gibt es ein Beispiel):
mount -t overlayfs -o [mount options] overlayfs [mountpoint for merged system]
Wo [Einhängeoptionen] sein können:
Eine Sache, die mich anfangs verwirrt hat, daher sollte ich wahrscheinlich klarstellen, dass das Mounten eines Overlays kein Dateisystem mounten kann. Ich habe versucht, ein Squashfs-Dateisystem mit einem Overlayfs-Mount zu mounten, aber so funktioniert das nicht. Sie müssen zuerst das Dateisystem (in meinem Fall squashfs) in ein beliebiges Verzeichnis mounten und dann mit overlayfs den Mount-Punkt (ein Verzeichnis) und ein anderes Verzeichnis in ein tertiäres Verzeichnis (den overlayfs-Mount-Punkt) mischen (bearbeiten: dieses "tertiäre" Verzeichnis) kann eigentlich das Verzeichnis upperdir = sein). Im tertiären Verzeichnis sehen Sie die zusammengeführten Dateisysteme (oder Verzeichnisbäume - es ist flexibel).
Ich habe an einer Ubuntu-Hybrid-Bootdiskette gearbeitet, auf der das Ubuntu-Basissystem als filesystem.squashfs existiert, und ich habe Dateien mit den Namen ubuntu.overlay kubuntu.overlay xubuntu.overlay und lubuntu.overlay. Die Overlay-Dateien sind Basisinstallationen dieser Systeme, bei denen der Inhalt von filesystem.squashfs (aus Platzgründen) beschnitten ist. Dann habe ich die Init-Skripte modifiziert, um die Overlay-Datei der richtigen Distribution (von einem Boot-Parameter) mit Overlayfs und den obigen Optionen zu überlagern, und es funktioniert wie ein Zauber!
Dies sind die Zeilen, die ich in meinen Init-Skripten verwendet habe (sobald alle Variablen übersetzt wurden):
mkdir -p /overlay
mount -t squashfs /cdrom/casper/ubuntu.overlay /overlay
mount -t overlayfs -o lowerdir=/filesystem.squashfs,upperdir=/overlay overlayfs /
Bitte beachte , dass oberhalb filesystem.squashfs ist ein Verzeichnis von casper erstellt, keine Datei.
Diese drei Anweisungen erstellen ein /overlay
Verzeichnis, /overlay
hängen ein squashfs-Dateisystem in das Verzeichnis ein und verwenden dann OverlayFS, um den Inhalt von /overlay
over im Wesentlichen zusammenzuführen /
.
Während ich mein Live-USB für jedes Release neu aufbaue, nutze ich OverlayFS, um eine Menge Zeit zu sparen. Ich beginne mit einem Verzeichnis namens ubuntu-base, das den Inhalt des Ubuntu-Core-Images enthält, das die einfachste Installation darstellt. Ich werde dann Verzeichnisse mit den Namen ubuntu, kubuntu, lubuntu und xubuntu erstellen.
Dann verwende ich OverlayFS, damit die Dateien aus der Ubuntu-Basis in den einzelnen Verzeichnissen angezeigt werden. Ich würde so etwas verwenden:
mount -t overlayfs -o lowerdir=ubuntu-base,upperdir=kubuntu overlayfs kubuntu
Dadurch werden die Dateien von Ubuntu-Base im Kubuntu-Ordner angezeigt. Dann kann ich chroot
in den kubuntu ordner und sowas machen apt-get install kubuntu-desktop
. Alle Änderungen, die in diesem OverlayFS-Mount vorgenommen werden, verbleiben im oberen Verzeichnis, in diesem Fall im Kubuntu-Ordner. Sobald ich die OverlayFS-Bereitstellung aufgehoben habe, werden die Dateien, die tatsächlich in Ubuntu-Base vorhanden sind, aber im Kubuntu-Ordner "gespiegelt" sind, ausgeblendet, sofern sie nicht geändert wurden. Dies verhindert, dass ich mehrere Kopien der Dateien in Ubuntu-Base haben muss, während ich sie weiterhin so verwenden kann, als ob sie physisch an jedem Ort existieren würden.
overlay
nicht mitoverlayfs
Von https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt :
Obere und untere
Ein Overlay-Dateisystem kombiniert zwei Dateisysteme - ein 'oberes' Dateisystem und ein 'unteres' Dateisystem. Wenn in beiden Dateisystemen ein Name vorhanden ist, ist das Objekt im 'oberen' Dateisystem sichtbar, während das Objekt im 'unteren' Dateisystem entweder ausgeblendet oder bei Verzeichnissen mit dem 'oberen' Objekt zusammengeführt ist.
Es wäre richtiger, auf einen oberen und unteren 'Verzeichnisbaum' als auf ein 'Dateisystem' zu verweisen, da sich beide Verzeichnisbäume durchaus im selben Dateisystem befinden können und es nicht erforderlich ist, das Stammverzeichnis eines Dateisystems anzugeben entweder oben oder unten.
Das untere Dateisystem kann jedes von Linux unterstützte Dateisystem sein und muss nicht beschreibbar sein. Das untere Dateisystem kann sogar ein anderes Overlay sein. Das obere Dateisystem ist normalerweise beschreibbar. Falls dies der Fall ist, muss es die Erstellung vertrauenswürdiger * erweiterter Attribute unterstützen und in readdir-Antworten einen gültigen d_type bereitstellen, sodass NFS nicht geeignet ist.
Eine schreibgeschützte Überlagerung von zwei schreibgeschützten Dateisystemen kann einen beliebigen Dateisystemtyp verwenden.
Verzeichnisse
Beim Überlagern handelt es sich hauptsächlich um Verzeichnisse. Wenn ein gegebener Name sowohl im oberen als auch im unteren Dateisystem vorkommt und auf ein Nicht-Verzeichnis verweist, wird das untere Objekt ausgeblendet - der Name bezieht sich nur auf das obere Objekt.
Wenn sowohl obere als auch untere Objekte Verzeichnisse sind, wird ein zusammengeführtes Verzeichnis gebildet.
Beim Einhängen werden die beiden als Einhängeoptionen angegebenen Verzeichnisse "lowerdir" und "upperdir" zu einem zusammengeführten Verzeichnis zusammengefasst:
mount -t overlay overlay -olowerdir=/lower,upperdir=/upper,workdir=/work /merged
Das "workdir" muss ein leeres Verzeichnis auf demselben Dateisystem sein wie upperdir.
Wann immer eine Suche in einem solchen zusammengeführten Verzeichnis angefordert wird, wird die Suche in jedem tatsächlichen Verzeichnis durchgeführt und das kombinierte Ergebnis wird in dem Eintrag zwischengespeichert, der zu dem Überlagerungsdateisystem gehört. Wenn beide tatsächlichen Suchvorgänge Verzeichnisse finden, werden beide gespeichert und ein zusammengeführtes Verzeichnis wird erstellt, andernfalls wird nur eines gespeichert: das obere, falls vorhanden, das untere.
Es werden nur die Namenslisten aus Verzeichnissen zusammengeführt. Andere Inhalte wie Metadaten und erweiterte Attribute werden nur für das übergeordnete Verzeichnis gemeldet. Diese Attribute des unteren Verzeichnisses sind ausgeblendet.
Ich habe diese Artikel um ein Skript für Overlays erweitert, mit dem schreibgeschützte Root-Fs eingerichtet werden.
Ich hoffe es hilft.
Minimal lauffähiges Beispiel
# 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
Ausgabe des ersten ls
mit dem mount:
lower:
lost+found lower-file
overlay:
lost+found lower-file overlay-file upper-file
upper/upper:
overlay-file upper-file
upper/work:
work
Ausgabe der Sekunde ls
ohne Mount:
lower:
lost+found lower-file
upper/upper:
overlay-file upper-file
upper/work:
work
Interpretation:
work/
Verzeichnis), den wir nicht interessieren solltenBeispiel angepasst aus: Beispiel OverlayFS-Verwendung
Hier ist ein komplexeres Beispiel mit mehreren unteren Ebenen: Overlayfs werden mit mehreren Ebenen neu geladen (Migration weg von aufs)
Getestet unter Ubuntu 18.04, Linux-Kernel 4.15.0.
mount -t overlayfs -o rw,uppderdir=x,lowerdir=y overlayfs /mount/point
. Darüber hinaus bin ich ahnungslos. Ich bastele daran in einem Live-System, aber ich habe es noch nicht geschafft, es zum Laufen zu bringen. Ich wünschte, ich könnte genau herausfinden, was "oberes Verzeichnis" und "unteres Verzeichnis" bedeuten. Ich habe nichts gefunden.