GRUB Bootloader bootet nicht von LVM Volume

Aus Wiki Thomas-Krenn.AG
Wechseln zu: Navigation, Suche

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):

Grub lvm problem 1.png

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:

Grub lvm problem 2.png

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:

Grub lvm problem 3.png

Verlässt man nun die build-in shell mit exit. Lädt das Betriebssystem ohne Probleme in den Login-Prompt:

Grub lvm problem 4.png

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:

Grub lvm problem 5.png

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


Share/Save/Bookmark  Feedback zu diesem Artikel geben
Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
Kategorien
Drucken/exportieren
Werkzeuge