Wer kennt das nicht, man hat nach und nach mehre Festplatten in seinen Homeserver nachgeschoben, der Platz reicht eigentlich, nur ist er auf viele Platten verteilt. Das ganze ist unübersichtlich, weil man auf jeder Platte einen Backup-Ordner hat und es nervt ganz gewaltig. Das Vollbackup vom Notebook passt ungeteilt sowieso nicht mehr auf den Server, der Verschnitt ist einfach zu groß. Was also tun?
Die erste, offensichtliche Lösung: Daten löschen. Gut, wenn das ausscheidet könnte man natürlich eine richtig große Platte kaufen, aber der Platz ist doch eigentlich da und Festplatten immernoch recht teuer.
Der zweite Ansatz wäre ein Raid0 aus allen Platten zu bauen. Hier tauchen nun aber gleich mehrere Probleme auf. Zum Einen müsste man die Daten irgendwo zwischenlagern und dann wieder zurückkopieren – zum Anderen sind meist alle Daten verloren, sobald eine der Platten ausfällt. Hinzu kommt, dass diese Aktionen sehr viel Zeit brauchen.
Der dritte Ansatz besteht in einem speziellen Union-Dateisystem.
Was ist ein Union-Dateisystem?
Das ursprüngliche Union-FS wurde entwickelt, damit Live-Distributionen einen nur lesbaren Verzeichnisbaum mit einem Verzeichnisbaum im RAM überlagern konnten, so dass man Dateien ändern konnte. Die veränderten Dateien lagen dann im RAM, das Linuxsystem konnte überall schreiben. Auch für Rechner die per Netz booten ist dies attraktiv, da nur die geänderten Daten lokal liegen müssen und das Betriebssystem per NFS geladen werden kann.
Das klassische Union-FS wurde inzwischen mehrfach neu implementiert und am Ende kam aufs dabei heraus, das advanced multi layered unification filesystem. Und das tolle: Es ist bereits im Kernel und die aufs-tools sind ein Debian-Paket!
Das advanced multi layered unification filesystem
Mit aufs ist es nun möglich, mehrere Dateisysteme auch schreibbar zu vereinigen, das heisst dass nicht eine unveränderbare Basis mit einem weiteren Dateisystem überlagert wird sondern mehrere veränderbare Dateisysteme vereinigt werden können.
Doch wie bestimmt aufs nun, auf welchem der darunterliegenden Dateisysteme eine neu erzeugte Datei angelegt wird? Und was passiert beim Kopieren oder Modifizieren von Dateien?
Im Gegensatz zu Unionfs, wo derartige Operationen immer im Kopieren der Originaldatei in die oberste Ebene des Stacks resultierte und sie dort verändert wurde (copy-up) lässt sich das Verhalten bei aufs konfigurieren.
Neben round-robin kann die Entscheidung auch anhand des noch verfügbaren Platzes auf den Dateisystemen erfolgen. Das bedeutet, dass eine neue Datei immer auf dem Dateisystem angelegt wird, auf dem noch am meisten Platz verfügbar ist.
Die Mountoptionen für dieses Verhalten:
mount -t aufs -v -o br:/mnt/fs1=rw:/mnt/fs2=rw,create=mfs:60,sum none /mnt/aufs
Hier werden fs1 und fs2 nach aufs gemounted und alle 60 Sekunden geprüft welches am meisten Platz hat. Ausserdem wird bei df die Summe des Platzes aller Dateisysteme angezeigt.
Fällt nun eine der Platten aus, sind wenigstens nicht alle Daten weg. Ausserdem lassen sich verschiedene Dateisysteme kombinieren und die Platten jederzeit auch einzeln weiternutzen. Man kann zur Laufzeit Platten per remount-Befehl hinzufügen, etc.
Viel Spaß mit der neuen Freiheit!