ADMIN-Tipp: Ärger mit Disk-UUIDs

Jede Woche erscheint in unserem Newsletter ein neuer ADMIN-Tipp. Eine Sammlung aller Tipps finden Sie im Archiv der ADMIN-Tipps.

Eigentlich sollte die Einführung von Partitions-UUIDs alte Probleme lösen. Manchmal tauchen dadurch aber auch neue auf.

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 intialen 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 Rettungs-Konsole gibt es typischerweise kein 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 wieder wie gewohnt starten.

17.12.2013
comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023