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.