Konvertierung ext4 zu Btrfs

Btrfs ist ein neueres Dateisystem, welches unter anderem von Andrew Morton, langfristig als ext4 als vorherrschendes Dateisystem im Linux-Umfeld ersetzen könnte. Btrfs ist ein Copy-on-Write System das zahlreiche Gemeinsamkeiten mit ZFS hat. Auch hat es viele Funktionen bereits integriert, welche bei ext4 nur über andere Lösungen möglich waren. Das sind zum Beispiel integriertes RAID, Schnapschüsse oder Datenkompression.

Das Ganze war für mich Grund genug, sich das Dateisystem einmal näher anzusehen. Dabei hat es mich überzeugt, was dazu führte, dass ich praktisch alle Systeme umgestellt habe.

Btrfs bringt ein Tool zum Konvertieren von bestehenden ext-Partitionen in brtfs mit. Das Problem hierbei ist, dass dies Entwickler mit der Kernelversion 4 von einem Einsatz abraten. Es kann hier zu einem Datenverlust kommen. Bei einem Test bei mir kam es jedoch gar nicht so weit. Die Konvertierung brach ziemlich schnell mit einem kryptischen Fehler reproduzierbar ab.

Alternative Lösung ohne Datenverlust

Ich habe mich dann daran gesetzt, eine alternative Lösung zu suchen. Gefunden habe ich diese dann in einer DVD von Ubuntu 14.10. Diese Version ist wichtig, ist diese doch die letzte, welche mit einem Kernel der 3er Linie ausgeliefert wird. Allerdings liegt diese iso-Datei nicht mehr auf allen Spiegel-Servern. Das heißt, man muss hier unter Umständen etwas suchen, bis man einen Mirror gefunden hat, der auch ältere Versionen vorhält.

Vor der Umstellung sollte man auf jeden Fall prüfen, ob das System btrfs fähig ist. Bei Arch Linux, welches ich verwende, muss das Paket btrfs-progs installiert sein. Will man eine root-Partition umwandelt muss man auch prüfen, ob btrfs beim booten vorhanden ist. Das heißt, man muss die mkinitcpio.conf entsprechend modifizieren und in die HOOKS btrfs ergänzen. Danach muss mit mkinitcpio -p linux das initrd neu erstellt werden.

Hat man die entsprechende Ubuntu-Distributions-Datei heruntergeladen und auf eine DVD gebrannt, so bootet man von dieser. Da die Installations-DVD auch eine Live-Version beinhaltet muss man Ubuntu nicht installieren, sondern kann das Ganze aus dem Arbeitsspeicher durchführen.

Partition konvertieren

Ist Ubuntu gestartet und hat man den grafischen Desktop vor sich, so startet man eine Konsole (Tastenkombination Strg + Alt + T). Der Platzhalter /dev/sdXY muss natürlich durch das die korrekte Bezeichnung der Partition ersetzt werden! Dort geben wir folgende Befehle ein:

sudo fsck.ext4 -f /dev/sdXY
sudo btrfs-convert /dev/sdXY

Zuerst prüfen wir, ob die Partition fehlerfrei ist. Ist das der Fall, so starten wir die Konvertierung. Diese kann einige Zeit in Anspruch nehmen. Je nach Datenvolumen reden wir hier von Stunden bis Tage (wenn sich das Volumen im TeraByte-Bereich befindet).

Wurde die Konvertierung erfolgreich durchgeführt, so können wir die Partition mounten und uns das Ganze anschauen. Dazu legen wir einen entsprechenden Ordner an:

sudo mkdir /mnt/btrfs
sudo mount -t btrfs /dev/sdXY /mnt/btrfs
ls -lah /mnt/btrfs

Jetzt sollten wir den Inhalt der Partition sehen, welche identisch sein sollte mit dem vor der Konvertierung. Zusätzlich existiert noch ein Ordner ext2_saved. Dort befindet sich ein Subvolume mit einem ext4-Image und dem Zustand vor der Konvertierung. Zum Vergleich können wir das ebenfalls mounten.

Zuerst wird das Subvolume eingebunden und dann über das Loop-Device das Image. Das Ganze schaut dann wie folgt aus:

sudo mkdir /mnt/ext2_saved
sudo mount -t btrfs -o subvol=ext2_saved /dev/sdXY /mnt/ext2_saved
sudo mkdir /mnt/ext4
sudo mount -t ext4 -o loop,ro /mnt/ext2_saved/image /mnt/ext4
ls -lah /mnt/ext4

Unter /mnt/ext4 befindet sich jetzt das alte ext4 Dateisystem.

Als nächstes binden wir das Subvolume und das Image wieder aus:

sudo umount /mnt/ext4
sudo umount /mnt/ext2_saved

Nun haben wir drei Möglichkeiten:

  1. Wir arbeiten mit Btrfs und lassen das Image stehen. Es kann jederzeit zu ext4 zurückgegangen werden. Es gehen jedoch alle Änderungen, die in der Zwischenzeit durchgeführt worden sind, verloren. Das ext4 Image kann später jederzeit durch das Löschen des Subvolumes entfernt werden. Hier fortfahren.

  2. Aktion rückgängig machen und zurück zu ext4. Das Ganze wäre, wie wenn nichts geschehen wäre. Hier fortfahren.

  3. Konvertierung endgültig machen und nur noch mit Btrfs arbeiten. Hier fortfahren.

Umwandlung rückgängig machen

In diesem Fall spielen wir einfach die Daten aus dem Snapshot zurück. Dazu müssen wir jedoch auch das Btrfs System aushängen.

sudo umount /mnt/btrfs
sudo btrfs-convert -r /dev/sdXY
sudo mount -t ext4 /dev/sdXY /mnt/ext4

Jetzt ist der Ursprungszustand wieder hergestellt. Das System sollte wie gewohnt booten.

Konvertierung endgültig machen

Wenn alle Daten korrekt konvertiert wurden kann man das Subvolume löschen. Dazu muss das Btrfs-Dateisystem noch eingebunden sein. Dann erfolgt das Löschen einfach mit folgendem Befehl:

sudo btrfs subvolume delete /mnt/btrfs/ext2_saved

Wurde das Subvolume gelöscht sollte man die Änderungen in die fstab übernehmen.

Änderungen in die fstab übernehmen

Bleibt man bei Btrfs sollte man das auch in die fstab übernehmen. Das ist besonders dann wichtig, wenn man mit UUIDs arbeitet. Diese hat sich bei der Partition geändert. Auch das Dateisystem ist ja nicht mehr ext sondern btrfs.

Hat man nicht die root-Partiton umgewandelt, so muss man diese nun einbinden und die fstab mit einem Editor seiner Wahl ändern. Zusätzlich können noch Mount-Optionen angegeben werden. Interessant sind Folgende:

Option Wirkung
compress Aktiviert die Komprimierung auf der Partition
compress-force Erzwingt die Komprimierung auch für Dateien die eigentlich nicht komprimiert werden
ssd Optimierung für SSDs

Ist das alles erledigt, so kann man das System neu starten. Hat man alles richtig gemacht, so startet dieses wie gewohnt nun mit Btrfs.

Nützliche Funktionen

Vor allem wenn man größere Aktionen durchführt und das Subvolume löscht kann es sinnig sein, die Daten neu über die Platte zu verteilen und auch zusammenhängend zu schreiben. Möchte man die Daten komprimieren, kann man beim defragment auch noch zusätzlich den Parameter -c übergeben.

sudo btrfs filesystem defragment -rv /mnt/btrfs
sudo btrfs balance start -v /mnt/btrfs

Auch diese Befehle können unter Umständen sehr viel Zeit in Anspruch nehmen. Also bitte etwas Geduld mitbringen.

Kommentare

Bitte addieren Sie 5 und 1.