GRUB Bootloader bootet nicht von LVM Volume
Bei der Installation von Debian Linux auf ein LVM Volume kann es in manchen Fällen zu Problemen beim Booten kommen. So lädt zwar der Bootloader GRUB (GRUB 2) noch ohne Probleme, aber der Versuch das Betriebssystem zu booten scheitert.
Inhaltsverzeichnis |
Ausgangssituation
Nach der Installation eines Debian Linux 6.0 64-bit mit der geführten Partitionierung und Verwendung von LVM kann der Bootloader GRUB nicht in das Betriebssystem booten. Er bringt stattdessen folgende Fehlermeldungen und wechselt in die build-in shell (ash):
Wie man sieht findet der Bootloader unter /dev/mapper das root-Verzeichnis nicht und beendet den Bootvorgang indem er in die BusyBox springt. Eine Überprüfung des Verzeichnisses /dev/mapper bestätigt, dass kein root-Verzeichnis vorhanden ist:
Fehlerursache
Der Bootloader GRUB 2 kann die Module für LVM nicht schnell genug laden und es entsteht eine Race Condition.
Fehlerbehebung
Ein nachträgliches Aktivieren der Volumes kann mit folgendem Kommando in der build-in shell gemacht werden:
vgchange -ay
Anschließend sind die Volumes auch in /dev/mapper aufgeführt:
Verlässt man nun die build-in shell mit exit. Lädt das Betriebssystem ohne Probleme in den Login-Prompt:
Alternative Fehlerbehebung
Alternativ zum oben genannten Lösungsansatz ist es auch möglich im Bootloader-Menü den entsprechenden Eintrag zu editieren (durch drücken der Taste "e" beim entsprechenden Eintrag) und dort eine Verzögerung beim Initialisieren der Root-Partition einzustellen. Dieses erreicht man mittels dem Parameter rootdelay=<Zeit in Sekunden>. Hierbei sollte ein Wert von 5 Sekunden praktikabel sein:
Nach Betätigen von "ctrl-x" bootet das System wieder ohne Probleme in den Login-Prompt.
Dauerhafter Eintrag in /etc/default/grub
Um nicht bei jedem Boot-Vorgang per Hand eingreifen zu müssen, trägt man am Besten den rootdelay dauerhaft in der Datei /etc/default/grub ein:
root@rs9000076799:~# cat /etc/default/grub
# If you change this file, run 'update-grub' afterwards to update # /boot/grub/grub.cfg. GRUB_DEFAULT=0 GRUB_TIMEOUT=5 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="quiet rootdelay=5" GRUB_CMDLINE_LINUX="rootdelay=5" . . .
Nach abschließendem Update des GRUB Bootloaders per update-grub prüft man noch die Datei /boot/grub/grub.cfg, ob der rootdelay auch wirklich eingetragen wurde:
.
.
.
### BEGIN /etc/grub.d/10_linux ###
menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-amd64' --class debian --class gnu-linux --class gnu --class os {
insmod part_gpt
insmod ext2
set root='(hd0,gpt2)'
search --no-floppy --fs-uuid --set c9f5e53e-d2b5-4614-bc30-f4614aa4facd
echo 'Loading Linux 2.6.32-5-amd64 ...'
linux /vmlinuz-2.6.32-5-amd64 root=/dev/mapper/rs9000076799-root ro rootdelay=5 quiet rootdelay=5
echo 'Loading initial ramdisk ...'
initrd /initrd.img-2.6.32-5-amd64
}
menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os {
insmod part_gpt
insmod ext2
set root='(hd0,gpt2)'
search --no-floppy --fs-uuid --set c9f5e53e-d2b5-4614-bc30-f4614aa4facd
echo 'Loading Linux 2.6.32-5-amd64 ...'
linux /vmlinuz-2.6.32-5-amd64 root=/dev/mapper/rs9000076799-root ro single rootdelay=5
echo 'Loading initial ramdisk ...'
initrd /initrd.img-2.6.32-5-amd64
}
### END /etc/grub.d/10_linux ###
.
.
.
Jetzt ist die Einstellung permanent und ein Eingreifen per Hand während des Bootvorgangs ist nicht mehr notwendig.
weiterführende Information
Bug-Report auf bugs.debian.org





