Root-Dateisystem auf BTRFS umstellen

Da für das Projekt alle Komponenten und Dienste in Docker-Containern laufen sollen und Docker seit einiger Zeit die Overlay-Fähigkeiten von BTRFS nutzen kann, ist es einen Versuch wert, auf dem Server (Docker Host) direkt BTRFS einzusetzen, um den Overhead für das Layering so gering wie möglich zu halten.

Nach der Installation des minimalen Ubuntu-Images gibt es auf der SSD vier Partitionen, wobei /dev/sda3 das Betriebssystem enthält und /dev/sda4 eine unformattierte Partition mit dem restlichen Speicherplatz darstellt. Das installierte Image bringt leider immer das Betriebssystem auf einer EXT4 Partition mit. Das gilt es nun auf BTRFS umzustellen. Die folgenden Schritte beschreiben das Vorgehen:

Die GParted-DVD booten

Im Netcup SCP befindet sich im Fundus der DVD-Images eine GParted-DVD, einem komfortablen Tool zur Veränderung der Partitionierung von HDDs und SSDs. Dieses Image lädt man in das virtuelle DVD-Laufwerk und startet den Server neu. Es ist ein erzwungener Neustart erforderlich, damit die KVM die DVD auch wirklich bootet.

Die Arbeit mit GParted kommt ein wenig später. Die Vorarbeiten erfolgen im Konsolenfenster, das sich über das Kontextmenü auf dem Desktop öffnen lässt.

Das Root-Dateisystem auf BTRFS umstellen

Zuerst muss das Root-Dateisystem gemountet werden:

mount /dev/sda3 /mnt

Mit dem Ubuntu-Image wurde auch noch eine größere unformattierte Partition angelegt. Diese formattiert man mit ext4 und mountet sie. Diese Partition dient als Puffer für den Umzug des Root-Dateisystems:

mkfs.ext4 /dev/sda4
mkdir /mnt2
mount /dev/sda4 /mnt2

Jetzt das Root-Dateisystem dorthin sichern:

rsync -avxHAX --progress /mnt/. /mnt2/

Die Installation liegt nun trocken auf der großen Partition /dev/sda4. Wir können nun /dev/sda3 aushängen, mit BTRFS formattieren und wieder einhängen. Ich verzichte dabei bewusst auf die Duplizierung von Metadaten, da dies bei SSDs aufgrund der von SSDs selbst durchgeführten Deduplizierung von Daten nicht empfohlen wird und sogar zu negativen Effekten führen kann.

umount /mnt
mkfs.btrfs -f -m single /dev/sda3
mount /dev/sda3 /mnt

Danach das Root-Dateisystem wieder herstellen:

rsync -avxHAX --progress /mnt2/. /mnt/

An diesem Punkt befindet sich das Root-Dateisystem schonmal auf BTRFS, nur passt die Partitionsgröße noch nicht.

Umräumen mit GParted

Mit GParted lässt sich auf einfache Weise /dev/sda4 löschen und /dev/sda3 auf das maximal mögliche Maß vergrößern.

Bootloader reparieren

Mit der geänderten Partionstabelle kommt der Bootloader nicht mehr zurecht. Der Bootloader GRUB muss neu installiert werden. Dazu folgt man am besten den Anweisungen, die Ubuntu für diese Fälle anbietet. In Kürze sind das:

mount /dev/sda3 /mnt
mount -o bind /dev /mnt/dev
mount -o bind /sys /mnt/sys
mount -o bind /proc /mnt/proc
chroot /mnt /bin/bash
nano /etc/fstab          # siehe unten
grub-install /dev/sda
update-grub /dev/sda

Aufgrund der Formattierung von /dev/sda3 hat sich die UUID geändert. Die UUID der Partition verrät das Tool blkid. Diese UUID muss noch in /etc/fstab anstelle der alten UUID eingetragen werden. Ferner muss bei den Mountoptionen ssd hinzugefügt und errors=remount-ro entfernt werden.

Abschluss

Fast fertig:  Im Netcup SCP die Bootsequenz des Servers zurückstellen und den Server neu starten. Wenn alles gut gegangen ist, läuft Ubuntu danach vollständig auf BTRFS.

Schreibe einen Kommentar