Stört die Last eines im Hintergrund laufendes »balance
«
zu sehr, lässt es sich abbrechen, für dieses Beispiel wäre ein »btrfs balance stop /mnt
«
zu verwenden. Es stellt sich heraus, dass alle Kommandos für »balance
«
außer »start
«
in Ubuntu 12.04 einen Fehler erzeugen. Um das zu beheben, müsste ein aktuellerer Kernel her. Neuere Kernel ab der Version 3.3 erlauben es dann auch, ein »balance
«
temporär anzuhalten und zu einem späteren Zeitpunkt wieder fortzusetzen oder auch, den aktuellen Fortschritt des Prozesses anzuzeigen. Ebenso ist ein unfreiwilliger Abbruch eines Balance-Vorganges, etwa durch einen Stromausfall, nicht kritisch, und die Aktion wird beim nächsten Mount des Dateisystems automatisch fortgeführt (ab Kernel 3.3 verhindert das die Mount-Option »skip_balance
«
). Im praktischen Betrieb von Btrfs wird bei der Dimensionierung eines neuen Dateisystems der zusätzliche Platzbedarf für Metadaten Fall einkalkuliert werden müssen. Mit wie viel zu rechnen ist, wird wohl nur die Erfahrung zeigen können. Bekannt ist: Besonders hungrig auf Metadaten erweisen sich viele kleine Dateien, weil diese Daten direkt in den Metadaten-Bereichen abgelegt werden (auch leere Dateien). Außerdem sind Snapshots in dieser Hinsicht sehr anspruchsvoll.
Für das Management von Speicherplatz auf modernen Linux-Systemen ist LVM fixer Bestandteil im Portfolio vieler Systembetreuer geworden. Soll ein Unterverzeichnis in ein eigenes Dateisystem ausgelagert werden, sei es aus Sicherheits- oder aus rein organisatorischen Gründen, wird mit LVM ein eigenes Logical Volume erzeugt und darauf ein neues Dateisystem angelegt. Einen recht ähnlichen Mechanismus bietet Btrfs in der Form von »Subvolumes
«
, mit dem Unterschied: Hier entfällt das gesonderte Anlegen eines neuen Dateisystems.
Ein Subvolume verhält sich praktisch wie ein Verzeichnis. Es besitzt einen Namen und befindet sich irgendwo in einem schon bestehenden Pfad auf einem bereits bestehenden Volume.
Zum Start enthält jedes neue Btrfs-Dateisystem genau ein Subvolume, das sogenannte »Top-Level-Volume
«
mit der fixen Subvolume-ID 5. Dieses spezielle Subvolume wird auch standardmäßig beim Einhängen dieses Dateisystems verwendet. Praktisch verhält sich ein Subvolume wie ein vollwertiges eigenes Btrfs-Dateisystem, das sich aber seine Metadaten mit dem Top-Level-Volume teilt. Subvolumes können fast beliebig viele angelegt werden, das theoretische Limit liegt bei 264 256 Subvolumes pro Btrfs-Dateisystem.
Mit der Kommando-Gruppe »btrfs subvolume
«
können Subvolumes angelegt, gelöscht und aufgelistet werden. Sie sind auch an beliebiger Stelle im Verzeichnisbaum einzuhängen und können verschiedene Mount-Parameter verwenden (alle generischen und subvol,subvolid) (siehe Abbildung 5):
btrfs subvolume create /mnt/subvol_test btrfs sub list /mnt mkdir /mnt2 && mount -t Btrfs -o subvol=subvol_test /dev/vdb /mnt2
Die Ausgabe von »df -h
«
errinnert an Bind-Mounts. Dementsprechend besteht ein Weg, herauszufinden, welches Subvolume an welcher Stelle eingehängt ist, auch darin, einen Blick in »/proc/self/mountinfo
«
zu werfen (siehe Abbildung 6). Ein Subvolume, das sich nicht auf oberster Ebene seines Eltern-Volumens befindet, muss über seine ID mittels der Mount-Option »subvolid=ID
«
eingehängt werden. Dabei ist ein nicht unwichtiges Detail: Für das Anlegen von Subvolumes reichen normale Benutzerrechte. Mittels einer speziellen Btrfs-Mount-Option des Eltern-Subvolumes ist auch das Löschen des Subvolumes erlaubt.
Wer unter LVM Logical Volumes zur Begrenzung des maximalen Platzverbrauches eines bestimmten Bereiches in der Ordnerstruktur eingesetzt hat, wird mit Btrfs noch länger keine Freude haben: Es gibt noch keine Möglichkeit, die maximale Größe eines Subvolumes festzulegen. Wann die sogenannten Subvolume Quota Gruppen (QGroups) verfügbar sein werden, ist noch offen, die entsprechenden Patches existieren bereits.
Individuelle Snapshots von Teilen eines Dateisystems sind wohl einer der Hauptgründe für den Einsatz von Subvolumes. Dabei handelt es sich bei Snapshots um zum Zeitpunkt der Erstellung eingefrorene Abbilder eines Subvolumes, wie man sie schon vom LVM kennt. Im Gegensatz zu normalen Subvolumes sind Snapshots also nicht leere Ordner, sondern mit den Daten des Quell-Subvolumes zum Zeitpunkt der Snapshot-Erzeugung befüllt. Dabei handelt es sich zu Beginn der Existenz eines Snapshots fast ausschließlich um Referenzen auf die Daten-Blöcke des Quell-Subvolumes.