Wer nachträglich die Größe einer Linux-Partition verändern möchte, kann ein blaues Wunder erleben. Will man nach dem Booten einer Live-CD wie GParted etwa die Größe der ersten Partition ändern, dann geht das nur, wenn man die nachfolgenden Partitionen für das Tmpfs und Swap kurzzeitig entfernt. Soweit kein großes Problem, denn die sind schnell wieder angelegt und mit den richtigen Signaturen versehen. Die Schwierigkeiten treten erst dann auf, wenn man das alte System wieder booten möchte, denn beim Neupartitionieren haben die Partitionen neue UUIDs bekommen. Eine bekannte Fehlerquelle ist die Datei
»/etc/fstab
«
, die statt Partitionsnamen auf manchen Distributionen die UUIDs der Partitionen zum Mounten verwendet. Mit einer Bootdisk oder in einer Rettungs-Shell ist dieses Problem jedenfalls recht schnell gelöst.
Auf manchen Linux-Distributionen, etwa Fedora 19, ist das Problem aber subtiler: Die UUIDs der Disk sind tief im System verankert, etwa mit dem Systemd beziehungsweise Udev, die über die UUID etwa das Swap-Device ausfindig machen. Klappt das nicht, startet der Rechner auch nicht:
Starting Dracut Emergency Shell... Warning: /dev/disk/by-uuid/.... does not exist Generating "/run/initramfs/sosreport.txt" Entering emergency mode. Exit the shell to continue.Type "journalctl" to view system logs
Die Schwierigkeit liegt darin, dass Dracut beim Erstellen der initialen RAM-Disk (initramfs) die UUIDs des Swap-Devices gespeichert hat. Nun gibt es zwei Auswege: entweder per Hand der Partition die alte UUID vergeben, die auch beim fehlgeschlagenen Boot-Vorgang zu sehen ist. Mühsam ist dabei nur, sie von Hand abzutippen, denn in der Rettungskonsole gibt es typischerweise kein simples Cut-and-Paste. Außerdem muss man dazu das Tool
»mkswap
«
verwenden, denn
»tune2fs
«
, über das man normalerweise Partitions-UUIDs setzt, funktioniert bei Swap-Partitionen nicht:
mkswap -U 6220f21b-32f8-40ac-ac8d-f82e112568f8 /dev/sda2
Der andere Weg besteht darin, mit Dracut die initiale RAM-Disk neu zu schreiben. Zuerst legt man in der Rettungs-Shell ein Verzeichnis an, um das Root-Dateisystem zu mounten. Dann mountet man die Pseudodateisysteme des Kernels, die auch im später folgenden Chroot zur Verfügung stehen sollen:
mkdir /mnt mount /dev/sda1 /mnt mount -o bind /proc /mnt/proc mount -o bind /sys /mnt/sys mount -o bind /dev /mnt/dev chroot /mnt
Nun bleibt nur noch, mit Dracut das Initramfs neu zu schreiben. Weil es die Datei schon gibt, ist der Schalter
»--force
«
dazu obligatorisch:
dracut --regenerate-all --force
Wenn man nun die Chroot-Umgebung wieder verlässt und das System rebootet, sollte es wie gewohnt starten.
Infos
Eigentlich sollte die Einführung von Partitions-UUIDs alte Probleme lösen. Manchmal tauchen dadurch aber auch neue auf.