Kategorien
Linux

aufs – zusammenfügen was zusammen gehört

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

Von der_metzger

Hi, ich bin Jan Kuehnel - Fachinformatiker für Systemintegration ,Linux-Benutzer und Blogger. Seit 2019 arbeite ich als Systemadministrator bei einem beliebten deutschen Fahrradverleih und zuvor über 10 Jahren bei einem großen deutschen Provider. Ich folge seit meiner Kindheit dem Hobby, technische Rätsel zu lösen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.