Von ext4 zu btrfs – Ein Versuch

Dieser Beitrag wartet schon seit längerer Zeit darauf, veröffentlicht zu werden. Anfangs wollte ich lediglich über das Dateisystem btrfs schreiben, aber darüber gibt es im Internet bereits genug zu finden. Es gibt eine wunderbare Dokumentation dazu, weshalb sich dieser Beitrag vorwiegend damit befasst, was man unter keinen Umständen machen sollte. Eine Liste persönlicher Fehlentscheidungen oder alternativ auch: Wie man zwei Terabyte Daten mit möglichst großem Aufwand untauglich macht.

Vorweg, da der restliche Artikel eher negativ-sarkastisch behaftet ist: Btrfs ist keineswegs unbrauchbar. Nach einem mittlerweile mehrmonatigem Einsatz auf diversen Datenträgern (sowohl HDDs als auch SSDs) hat sich btrfs für mich als genauso stabil erwiesen wie ext4, ohne Nachteile in der Performance zu zeigen. Dafür hat man aber noch einige Vorteile, etwa Copy-on-Write (COW) oder auch die Möglichkeit Snapshots anzulegen.

Die Situation

Es war ein langweiliger Samstagabend – wie immer, wenn ich etwas Dummes vorhabe – in der ich mich entschied knapp zwei Terabyte Daten, lagernd auf einer mittels luks verschlüsselten ext4-Partition, in ein btrfs-Dateisystem zu konvertieren. Backups sind, wie üblich, nicht vorhanden, die Daten daher auch nicht so wichtig.

Die Warnung im btrfs-Wiki, nach dem eine Konvertierung von ext4 auf btrfs mit meinem Kernel (irgendwas mit einer Versoin >4.x.y) nicht mehr durchgeführt werden sollte, habe ich selbstverständlich ignoriert.

Die Festplatte, wie oben beschrieben, fast randvoll. Anders gesagt: 12GB freier Speicher sollten reichen, um eine Konvertierung von ext4 auf btrfs durchzuführen. Munkelt man doch in den dunklen Ecken des Internets, dass auch ein Gigabyte freier Speicher vollkommen ausreichend wäre – selbst bei knapp zwei Terabyte an Daten die es zu konvertieren gilt.

Die Konvertierung

Schnell noch das Dateisystem mittels fsck überprüft – ansonsten ist eine Konvertierung nicht möglich – und schon ging es los. Die Konvertierung selbst dauerte gute zehn Stunden, was eine mittlere Geschwindigkeit von 55MB/s ergab. Aber funktionierte das „neue“ Dateisystem denn auch?

Ein Mountvorgang sollte Gewissheit schaffen. Also einen Terminal geöffnet und den entsprechenden mount-Befehl eingegeben. Während ich fiebernd auf die Ausgabe im Terminal wartete drehte die Festplatte hoch, der Schreib-/Lesekopf wild um sich schlagend. Sekunden vergingen – bis nach einer gefühlten kleinen Ewigkeit endlich der Inhalt präsentiert wurde.

3,6 Terabyte Daten. An der Stelle die erste Verwunderung, bis mir klar wurde, dass btrfs ja etwas mehr kann als ext4. Bei der Konvertierung wird automatisch ein Snapshot angelegt, um diese revidieren zu können. Und da der Snapshot gleich miteingehängt wird haben wir hier zweimal zwei Terabyte an Daten oder, wenn man es richtig umrechnet (Binärpräfixe, man kennt das ja), zweimal 1,8 Terabyte.

Was man nicht machen sollte

Mutig, wie man an einem Sonntagmorgen nach einer langen Nacht eben sein kann, wollte ich die Konvertierung natürlich endgültig abschließen. Der Snapshot wurde kurzerhand gelöscht, der Spaß konnte beginnen. Unerfahren, wie ich mit dem Dateisystem war, wollte ich dieses zuerst einmal defragmentieren. Das geht bei btrfs online, d.h. im eingehängten Zustand, und brach aufgrund der vollen Festplatte auch innerhalb kürzester Zeit wieder ab. Nicht so schlimm, dachte ich, man kann ja auch noch ein balance ausführen. Unwissend, wofür dieser Befehl überhaupt gut sei, gab ich ihn voller Optimismus im Terminal ein und drückte Enter.

Kurze Zeit später schleuderte mir dmesg auch schon die ersten Fehlermeldungen entgegen. Das Dateisystem wurde automatisch ausgehängt, der Kernel verfiel in Panik, ich nur wenige Sekunden darauf ebenso. Die Festplatte einfach neu einhängen? Unmöglich.

Was man auf keinen Fall machen sollte

Ein erneuter Mountversuch wies auf einen fehlerhaften Superblock hin. Gut, kein Problem, btrfs hat ja mehrere davon, verteilt über das ganze Dateisystem. Denkste. Ein rescue super-recover sagt alles ist in Ordnung, Superblöcke sind doch alle da.

Etwas verwundert also einen check gestartet. Dieser brach im Prinzip instant wieder ab. Hm, scheiße. Gut, versuchst du eben ein chunk-recover. Und tatsächlich, das lief durch. Also erneut versucht die Festplatte einzuhängen, hörbar drehten wieder die einzelnen Platten hoch, der Schreib-/Lesekopf schlug erneut wild um sich weil irgendwelche Metadaten gelesen werden mussten. Dem Kernel ist nicht ganz wohl, der Vorgang bricht ab, das Dateisystem sei beschädigt. Mir wird ebenfalls etwas unwohl (als ob sich das zu diesem Zeitpunkt noch hätte steigern können).

Rettung naht

Ratlos, nachdem ich alle mir bekannten Optionen durchprobiert hatte, startete ich meinen IRC-Client. Um Hilfe fragen, irgendjemand™ weiß schon, wie man mein Problem lösen könnte. Und tatsächlich, ein restore sollte Wunder bewirken. Also eine baugleiche Festplatte organisiert, auf der die Wiederherstellung stattfinden sollte, den Befehl eingegeben und Enter gedrückt. Und dann gewartet. Sehr, sehr lange. Seit geraumer Zeit war auch schon nicht mehr Sonntag, falls sich jemand fragt. Nach etlichen Stunden und einer handvoll Warnungen waren die Daten wiederhergestellt. Lesbar, bis auf ein paar Ausnahmen.

Aftercare (nicht das, was ihr jetzt denkt)

Da ich mich – trotz diesem Fehlschlag (oder darf man schon von Fehlschlägen sprechen?) – weiter mit dieser mysteriösen Technologie befassen wollte, wurde die Festplatte mit defektem Dateisystem neu formatiert. Erst ein neues luks-Dateisystem (nicht, dass btrfs noch irgendwelche magischen Reste erkennt), darauf dann btrfs. Anschließend von der nachträglich angefertigten Sicherung die Daten zurückkopiert, was nicht mehr lesbar war natürlich ausgelassen. Daten, die ich wirklich nicht mehr benötigte, wurden ebenfalls unterschlagen. Und seitdem rennt das Ding.

Fazit

Läuft doch. Backups? Pah! Und vielleicht höre ich irgendwann doch einmal auf meine innere Stimme der Vernunft, wenn mein Spieltrieb mich wieder nicht in Ruhe lässt. Bis dahin werde ich allerdings noch einige Dinge bis auf ihre Grenzen testen – meine Nerven inklusive ;)


Für alle, die bis hierher durchgehalten haben: Natürlich ist der Artikel etwas überspitzt formuliert. Er soll unterhalten, das war auch schon bei einem anderen Artikel so, falls sich jemand erinnern kann. Das macht die Artikel allerdings nicht weniger wahr. Eventuell wäre eine eigene Kategorie für Artikel dieser Art nicht schlecht, alias „Dummes aus dem Leben“ oder „Des Administrators Wahnsinn“. Man kennt das ja…