KVM etabliert sich als Standardlösung zur Virtualisierung unter Linux. Der ADMIN-Schwerpunkt hilft beim Bau virtueller Linux-Maschinen, stellt das ... (mehr)

In einem Schritt

Bei Btrfs erledigt das Werkzeug »btrfs« , diesmal mit dem Schalter »device add« , die ganze Arbeit in einem Schritt. Dieser Befehl fügt eine unbenutzte Festplatte zu dem Root-Dateisystem hinzu:

btrfs device add /dev/vde /

Die Blockgeräte müssen auch nicht alle die gleiche Größe besitzen. Je nach verwendetem RAID-Level, das für Daten und Metadaten unterschiedlich sein kann, wird die mögliche Gesamtkapazität bei unterschiedlicher Festplattengröße dann variieren. Wie in Abbildung 10 zu erkennen, ist auf der gerade hinzugefügten Festplatte noch kein Platz zugewiesen. Das vergrößerte Dateisystem könnte jetzt schon verwendet werden. Um die Daten und Metadaten auf alle Blockgeräte gleichmäßig zu verteilen, ist aber ein Rebalance empfehlenswert. Der Vollständigkeit halber sei hier auch erwähnt, dass Btrfs auch auf einem LVM Logical Volume oder einem Linux Software-RAID installiert werden kann. Speziell beim Umgang mit Logical Volumes darf natürlich die einfache Möglichkeit des Online-Vergrößerns und auch Online-Verkleinerns nicht fehlen. Das gelingt mithilfe von »btrfs filesystem resize« .

Abbildung 10: Das Hinzufügen von zusätzlichen Blockgeräten verteilt noch keine bestehenden Daten neu. Die Platz der hinzugefügten Festplatte ist aber unmittelbar verfügbar.

Seit Kernel 3.3 kann ein Rebalance auch den RAID-Level der Daten und/oder Metadaten eines schon bestehenden Volumes ändern. Um auch diese neuen Funktionen auszutesten und auch zahlreiche Verbesserungen bei der Geschwindigkeit und Fehlerbehandlung nutzen zu können, werden die weiteren Tests in diesem Artikel mit einem 3.4er Kernel aus dem Mainline-Kernel-Archiv [6] von Ubuntu durchgeführt.

Eine gleichmäßige Verteilung der Daten und Metadaten bedeutet in diesem Fall eine Duplizierung, um Redundanz durch RAID 1 zu erreichen. Zu diesem Zweck müssen auch alle Daten bewegt werden. Seit Kernel 3.3 kann festgelegt werden, ob nur mehr bestimmte Teile des Dateisystems ausbalanciert oder dessen RAID-Konfiguration verändert werden soll. Ein vollständiges und bei vielen Daten zeitaufwändiges, komplettes Ausbalancieren ist nicht mehr immer notwendig.

Eine Frage der Balance

Folgendes Kommando konvertiert ein nicht-redundantes Root-Dateisystem in ein redundantes. Der Schalter »-d« bestimmt hierbei die Modifikation, die an den Daten durchgeführt wird, während »-m« die Anwendung auf Metadaten festlegt:

btrfs fi balance start -dconvert=raid1 -mconvert=raid1 /

Wie in Abbildung 11 zu erkennen ist, verteilen sich Daten und Metadaten jetzt schön gleichmäßig über beide Blockgeräte. Es fällt allerdings auch auf, dass trotz des geringen Metadatenverbrauches 9 GByte dafür zugewiesen sind. Ein spezifisches Balance der Metadaten sollte hier Abhilfe schaffen. Mit dem folgenden Befehl werden nur die Metadaten-Chunks optimiert:

btrfs fi balance start -m /

Leider führte dieser Befehl auf dem Testsystem dazu, dass das System nicht mehr reagierte und Meldungen über hängende Btrfs-Kernel-Tasks auf der Konsole protokollierte. Nach einem Reset des Systems nach einigen Stunden Wartezeit startete alles problemlos, und der Balance-Prozess war offensichtlich erfolgreich. Passiert ein System-Absturz während des Ausbalancierens, wird der Prozess nach dem Systemstart automatisch im Hintergrund fortgesetzt, falls er noch nicht abgeschlossen war. Wie bereits erwähnt, gibt es auch die Möglichkeit, den aktuellen Fortschritt anzuzeigen, den Balance-Prozess zu pausieren oder auch komplett abzubrechen.

In Abbildung 12 kann man erkennen, dass nur mehr 2 GByte pro Blockgerät für Metadaten zugewiesen sind und damit 7 GByte pro Festplatte wieder freigemacht wurden. Diese Werte sind für ein RAID 1 mit zwei Replikas dann immer mal zwei zu nehmen, da ja alle Daten und Metadaten gespiegelt sind. Ein einfaches »df -h /« zeigt deshalb doppelt so viel an verbrauchtem Plattenplatz an. Dieser Wert beinhaltet auch die redundanten Metadaten. Im Ausgleich dazu wird aber auch die Summe aller Blockgeräte des Volumes als Dateisystemgröße angezeigt. Wie der Wert des noch verfügbaren Platzes zustande kommt, ist unklar und konnte trotz intensiver Recherche des Autors auch nicht herausgefunden werden. Wer kurz nachrechnet, bemerkt, dass hier etwa 8 GByte fehlen:

Abbildung 11: Das Ausbalancieren inklusive der Konvertierung in ein RAID 1 erledigt ein einziger Befehl. Nachher zeigt sich eine gleichmäßige Verteilung und auch eine Verbesserung beim Platzverbrauch.
Abbildung 12: Ein erneutes Balance, diesmal nur der Metadaten, gewinnt 7 GByte der 9 GByte zur allgemeinen Verwendung zurück – pro Blockgerät.
root@maibutter:~# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/m/maibutter-root 60G 4.8G 47G 10% /

Die Anzahl der Replikas einer Datei für RAID 1 und eines Stripes für RAID 10 ist übrigens immer zwei, unabhängig von der Anzahl der Platten im Pool. Hier soll in Zukunft auch noch die Option für mehr als zwei Kopien hinzukommen. RAID 5 und RAID 6 wird wohl nicht vor Kernel 3.6 verfügbar sein.

Bei der Verwendung von mehreren Blockgeräten für ein Btrfs-Dateisystem ist auch zu beachten, dass nur das Laden des Btrfs-Kernel-Modules für den Kernel nicht ausreicht, um alle zusammengehörigen Geräte eines Dateisystems zu erkennen. Dazu müssen alle Blockgeräte (es können auch nur ganz bestimmte angegeben werden) mit »btrfs device scan« gescannt werden. Damit das auch für ein Root-Dateisystem funktioniert, muss dieser Befehl in der Startumgebung, also der »initrd« eines Systems, ausgeführt werden. Das hier verwendete Ubuntu 12.04 hat das bereits integriert. Dann ist es auch unerheblich, welches der Geräte man bei einem »mount« angibt, um das Dateisystem einzuhängen.

Ähnliche Artikel

comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023