AuFS – Another Union File System (Ein anderes vereinigendes Dateisystem).
Ein solches „Union Dateisystem“ nimmt Existierende Dateisysteme und zeigt ein anderes Dateisystem „darüber“ an. Es ermöglicht das Dateien und Verzeichnisse von verschiedenen Dateisystemen im gleichen Mountpfad angezeigt zu werden. Bei dieses Verfahren landen neue und neuere Dateien im „darüber“ eingebundenen Dateisystem. Dateien gleichen Namens im „darüber“ liegenden Dateisystem versperren den Zugriff auf die Dateien gleichen Namens im „darunter“ liegenden Dateisystem.
Das Dateisystem AuFS wird auch von vielen Open Source Projekten wie Knoppix und Slax sowie vielen anderen Linux LiveCDs und USB Distributionen.
In meinem Beispiel verwende ich Debian, auf allen Debian basierten Linux Distributionen wie Ubuntu und Linux Mint kannst Du genauso vorgehen.
sudo apt install aufs-tools
Wie AuFS funktioniert
Das erste Beispiel zeigt wie zwei Verzeichnisse, /tmp/dir1 und /tmp/dir2 in gleichen Verzeichnis Pfad /tmp/aufs gemounted, also eingebunden werden.
mkdir /tmp/{dir1,dir2,aufs}
touch /tmp/{dir1/eins,dir2/zwei}
mount -t aufs -o br=/tmp/dir1:/tmp/dir2 none /tmp/aufs/
Der erste der beiden Befehle, mkdir, erstellt die beiden Verzeichnisse im Verzeichnis tmp. Der zweite Befehl legt je eine Testdatei in die beiden im Dritten, dem Befehl mount -t aufs eingebundenen beiden Verzeichnisse, die zu dem Verzeichnis /tmp/aufs eingebunden werden.
Dieser mount-Befehl spezifiziert die beiden Verzeichnisse “/tmp/dir1″ und „/tmp/dir2” welche in das Verzeichnis “/tmp/aufs” eingebunden wird. Das Zielverzeichnis “/tmp/aufs” wird nach dem erfolgreichen mount-Befehl den Inhalt der beiden Verzeichnisse “/tmp/dir1” und “/tmp/dir2” enthalten.
In dem oben angegebenen mount-Befehl werden die folgenden Optionen verwendet.:
- -t aufs Der typ des Dateisystems ist aufs
- -o gibt an, das die Optionen für das zuvor angegebene Dateisystem folgen
- br= steht für „branch“, was am besten mit Verzweigung übersetzt werden kann. Die einzelnen Zweige werden mit einem Semikolon getrennt. Eine beim Befehl mount angegebene verzweigung bezeichnet ein Verzeichnis im Dateisystem.
- none bezieht sich darauf das kein Dateisystem sondern Verzeichnisse eingebunden werden sollen
Da wir vor dem Einbinden der Verzeichnisse mittels touch zwei Dateien angelegt haben können wir mittels ls -l nachschauen was genau passiert ist.
ls -l /tmp/dir1/
-rw-r--r-- 1 root root 0 Sep 3 18:29 eins
ls -l /tmp/dir2/
-rw-r--r-- 1 root root 0 Sep 3 18:29 zwei
ls -l /tmp/aufs/
-rw-r--r-- 1 root root 0 Sep 3 18:29 eins
-rw-r--r-- 1 root root 0 Sep 3 18:29 zwei
Die beiden Dateien namens eins und zwei erscheinen auch im Verzeichnis /tmp/aufs.
Wenn wie in diesem ersten Beispiel keine anderen Rechte festgelegt wurden ist das erste angegebene Verzeichnis beschreibbar und das zweite Verzeichnis nur zum lesen eingebunden.
Beim anlegen zweier Dateien im Ordner /tmp/aufs werden diese im Verzeichnis /tmp/dir1 abgelegt.
touch /tmp/aufs/test{1,2}
ls -l /tmp/aufs/
-rw-r--r-- 1 root root 0 Sep 3 18:29 eins
-rw-r--r-- 1 root root 0 Sep 3 18:37 test1
-rw-r--r-- 1 root root 0 Sep 3 18:37 test2
-rw-r--r-- 1 root root 0 Sep 3 18:29 zwei
ls -l /tmp/dir{1,2}/
/tmp/dir1/:
total 0
-rw-r--r-- 1 root root 0 Sep 3 18:29 eins
-rw-r--r-- 1 root root 0 Sep 3 18:37 test1
-rw-r--r-- 1 root root 0 Sep 3 18:37 test2
/tmp/dir2/:
total 0
-rw-r--r-- 1 root root 0 Sep 3 18:29 zwei
Beim löschen einer Datei vom Laufwerk /tmp/aufs erscheint diese nicht mehr im Verzeichnis /tmp/aufs ist jedoch noch immer im Verzeichnis /tmp/dir2 vorhanden. Bei dem Löschen einer Datei welche im Verzeichnis /tmp/dir1 abgelegt wurde wird diese auch im Verzeichnis /tmp/dir1 gelöscht.:
rm /tmp/aufs/{eins,zwei}
ls /tmp/{dir1,dir2,aufs}
/tmp/aufs:
test1 test2
/tmp/dir1:
test1 test2
/tmp/dir2:
zwei
Vereinheitlichte Heimatverzeichnisse
Nach einiger Zeit in Betrieb enden die meisten Systemeadministratoren mit Systemen mit vienen Festplatten über die die Daten der Benutzer verteilt liegen. Manchmal ist es jedoch sinnvoll sich einen einfachen Überblick zu verschaffen und die Administration auf diese weise zu vereinfachen.
In diesem Heispiel gibt es die beiden Datenträger /home und /home1 mit den Heimatverzeichnissen der Benutzer:
- /home das Heimatverzeichnis der Benutzer „metzger“ und “metzger” und “sysadmin” auf der Festplatte /dev/sdb1
- /home1 das Heimatverzeichnis des Benutzers „test“ auf der Festplatte /dev/sdb2
mount -t aufs -o br=/home=rw:/home1=rw -o udba=reval none /common/
ls -l /common/
drwxr-xr-x 39 metzger metzger 4096 Sep 3 18:44 metzger
drwxr-xr-x 26 sysadmin sysadmin 4096 Sep 3 18:51 sysadmin
drwxr-xr-x 2 root root 4096 Sep 3 19:36 test
Der oben mount Befehl in diesem aufruf enthält die extra Option “udba” welche ausgeschrieben auf den “User’s Direct Branch Access” verweisst, den direkten Zugriff eines Benutzers auf das Dateisytem. Nicht der Zugriff über das AuFS ist damit gemeint, sondern in diesem Beispiel der direkte Zugriff auf das Verzeichnis /home oder /home1.
Die folgenden Werte sind für die Option udba möglich.:
- udba=none Mit dieser Option ist der Zugriff auf das Dateisystem am schnellsten, es wird aber veränderungen durch das erstellen von Ordnern oder Dateien im Verzeichnis /home oder /home1 nicht im AuFS Verzeichnis /common anzeigen.
- udba=reval Mit dieser Option wird AuFS bei jedem Zugriff auf das Verzeichnis /common die Verzeichnisse und Unterverzeichnisse von den Ordnern /home und /home1 auf Veränderungen prüfen und die Änderungen im Verzeichnis /common berücksichtigen.
- udba=notify Mit dieser Option nutzt AuFS die Linux Funktion inotify für alle Ordner in den verknüpften Verzeichnissen. Diese Option bietet die Vorteile der Option udba=reval ohne die Performance so stark wie diese Otion zu beeinflussen.
touch /home/metzger/test
ls -l /common/metzger/
.
..
-rw-r--r-- 1 root root 0 Mar 25 17:17 test
Der Befehl touch erstellt die Datei „test“ im Heimatverzeichnis meines Benutzers „metzger“. Da beim einbinden des Dateisystems die Option “udba=retval” verwendet wurde wird die Datei sowohl unter /home/metzger als auch im Ordner /common/metzger angezeigt sobald die Datei erstellt wurde.
Zusätzlich haben wir die Option „rw“ (readwrite) für beide Dateisysteme angelegt. Eine Datei die im Ordner /common/test/ angelegt wird wird Physisch im Ordner “/home1/test/” angelegt werden. Dies trifft auf alle Verzeichnisse existierenden Verzeichnisse zu. Neu angelegte Dateien oder Verzeichnisse im Verzeichnis /common landen auf erste angegebenen Dateisystem /home
touch /common/test/Testing
ls -l /home1/test/
-rw-r--r-- 1 root root 0 Mar 25 18:26 Testing
Nur lesend mounten
Beim mounten kann für jeden auch für jede Verzweigung, jeden branches einzeln festgelegt werden welche ob nur leserechte (ro) oder lese und Schreibrechte (rw) vergeben werden sollen.
mount -t aufs -o br=/tmp/dir1=rw:/tmp/dir2=ro -o udba=reval none /tmp/aufs/
In dem obigen Aufruf wird festgelegt das das Verzeichnis /tmp/aufs das Verzeichnis /tmp/dir1 beschreibbar und das Verzeichnis “/tmp/dir2” nur zum lesen engebunden bekommt. Jedwede Änderungen im Verzeichnes /tmp/aufs landet auf dem Datenträger /tmp/dir1 da dies das zum schreiben geöffnete Verzeichnis ist. Die Dateien im Verzeichnis /tmp/dir2 können über das Verzeichnis /tmp/aufs nicht verändert werden.
Mit den Folgenden Aufrufen kann dies geprüft werden.
echo "Eine neue Datei" > /tmp/dir2/1.txt
cat /tmp/aufs/1.txt
Eine neue Datei
echo "Diese Datei wurde geändert" >> /tmp/aufs/1.txt
cat /tmp/dir2/1.txt
Eine neue Datei
cat /tmp/dir1/1.txt
Eine neue Datei
Diese Datei wurde geändert
Erläuterung zur obigen Befehlsabfolge im Deteil:
- Im Verzeichnis /tmp/dir2/ wird eine Datei mit dem Namen 1.txt und dem Inhalt „Eine neue Datei“ angelegt
- Diese neue Datei wird auch im „union mount Verzeichnis“ /tmp/aufs angezeigt da beim mounten die Option udba=retval angegeben wurde (die Beschreibung ist einige Zeilen weiter oben im Text)
- Wir schreiben zusätzlich den Text „Diese Datei wurde geändert“ in die Datei 1.txt im über das AuFS im Verzeichnis /tmp/aufs
- Da das Dateisystem /tmp/dir2 nur zum lesen eingebunden ist nimmt sich AuFS den Inhalt aus der Datei /tmp/dir2 und legt den Inhalt, zusammen mit der Ergänzung im Verzeichnis /tmp/dir1 ab.
- Im Verzeichnis /tmp/dir2 erscheint die soeben gemachte änderung nicht in der Datei 1.txt
- Im Verzeichnis /tmp/dir1 erscheint der vollständige, ergänzte Inhalt der Datei “1.txt”
Round Robin – abwechselnd wechselnde Ziele
Wen wir mehr als zwei Dateisysteme einbinden welche wir als beschreibbar deklarieren können wir aus mehreren vordefinierten Regeln währen wo und nach welchen Regeln die Dateien auf den Dateisytemen angelegt werden sollen.
mount -t aufs -o br=/tmp/dir1=rw:/home/metzger=rw -o udba=reval -o create=rr none /tmp/aufs-root/
Mit der Option “create=rr” legen wir fest das die Dateien im Rundlauf-Verfahren, oder in der englischen Bezeichnung Round-Robin, gespeichert werden sollen. Im Rundlauf-Verfahren wird die erste gespeicherte Datei im ersten Dateisystem, die zweite Datei im zweiten Dateisystem und die dritte Datei wieder im ersten Dateisystem abgelegt. Wenn ich fünf Dateien erstelle landen die erste, dritte und fünfte Datei im Dateisystem “/tmp/dir1” sowie die zweite und vierte Datei im zweiten Dateisytem “/home/metzger”.
touch /tmp/aufs/first-round-robin
touch /tmp/aufs/second-round-robin
ls -l /tmp/dir1/first-round-robin
-rw-r--r-- 1 root root 0 Mar 25 21:53 /tmp/dir1/first-round-robin
ls -l /home/metzger/second-round-robin
-rw-r--r-- 1 root root 0 Mar 25 21:54 /home/metzger/second-round-robin
Links