Linux
Legacy
Befehe/Hilfsprogramme
Befehl | Beschreibung |
update-grub | Unter Debian basierten Distributionen.
Sucht nach Kerneln in /boot und initrd-Images und updated die menu-lst in dem es alle hinzufügt (existierende Einstellungen werden nicht überschrieben). |
Parameter
Konfigurationsparameter
Parameter | Beschreibung |
#kopt | Kernel-Optionen - was hinter kopt angegeben wird, wird automatisch für jeden gefunden Kernel als Kernel-Parameter hinzugefügt.
Das # ist korrekt, die Zeile wird trotzdem interpretiert - es ist da weil nicht grub selbst die Zeiel interpretieren soll, sondern update-grub wenn es die menu-lst neu generiert.
Syntax: #kopt=root=UUID=djada4f5dsf45s3f4s5f4sdfs ro
Oben stehendes Beispiel fügt beim ausführen von update-grub an alle Kernel-Einträge root=root=UUID=djada4f5dsf45s3f4s5f4sdfs ro als Kernel-Parameter an und setzt damit das root-Device.
Ein Eintrag würde dann so aussehen linux /boot/vmlinuz-3.5.0-25-generic root=UUID=djada4f5dsf45s3f4s5f4sdfs ro
Man kann hinter#kopt= beliebige Parameter angeben die dem Kernel mit übergeben werden, üblich ist vor allem das Setzen des root-Devices auf diesem Weg.
Man kann dies auch nur für bestimte Kernel machen (sie die man page von menu-lst).
Es gibt zwei root-Parameter die relevant sind.
#groot definiert wo grub selbst das Kernel-Image sucht - sprich bevor der Kernel gestartet wurde.
#kopt=root= bzw. der daraus eventuell resultierende Kernel-Parameter root= definiert wo der Kernel nach dem Start (des Kernels selbst, das heißt grub ist hier bereits raus) sein root-Dateisystem sucht - die /etc/fstab kann er hier noch nicht nutzen, da die ja selbst auf dem root-Dateisystem liegt
|
#groot | Root-Device auf dem grub nach dem Kernel-Image suchen soll
Der Parameter setzt global auf welchem Device grub nach dem jeweiligen Kernel-Image und der initrd suchen soll. Der Parameter ist richtig mit # davor, da er nicht durch grub selbst ausgewertet wird, sondern durch update-grub .
Update-Grub schreibt dann in jede „menuentry“ Sektion den Parameter root= dessen Wert #groot entspricht.
Beispiel: #groot=(hd0,0)
Resultiert in: title Debian GNU/Linux, kernel 3.2.35
root (hd0,0)
kernel /boot/vmlinuz-3.2.35 root=UUID=88af3447-abb9-4b68-9d7d-b7ea11a2bfe2 ro intel_iommu=off panic=10 oops=panic
initrd /boot/initrd.img-3.2.35
Der root-Parameter wurde entsprechend #groot gesetzt.
Die Angabe erfolgt nach dem Schema groot=(hdFestplattennummer,Partitionsnummer)
Festplattennummer → ergibt sich aus der Reihenfolge der Platen wie sie das BIOS sieht, beginnend bei 0 → dierste Platte ist 0, die zweite 1 usw.
Partitionsnummer → Die Nummer der Paritition auf der Festplatte (beginnend bei 0) → erste Partition 0, zweite 1 usw.
Es gibt zwei root-Parameter die relevant sind.
#groot definiert wo grub selbst das Kernel-Image sucht - sprich bevor der Kernel gestartet wurde.
#kopt=root= bzw. der daraus eventuell resultierende Kernel-Parameter root= definiert wo der Kernel nach dem Start (des Kernels selbst, das heißt grub ist hier bereits raus) sein root-Dateisystem sucht - die /etc/fstab kann er hier noch nicht nutzen, da die ja selbst auf dem root-Dateisystem liegt
|
GRUB_HIDDEN_TIMEOUT_QUIET | Wird das auf „true“ gesetzt erscheint das Menü von Grub nicht mehr.
Statt dessen kommt ein Count-Down innerhalb dessen die Space-Taste gedrückt werden kann und das Menü erscheint.
GRUB_HIDDEN_TIMEOUT= definiert wie viele Sekunden der Countdown läuft |
GRUB_HIDDEN_TIMEOUT | Wenn GRUB_HIDDEN_TIMEOUT_QUIET aktiviert ist, definiert GRUB_HIDDEN_TIMEOUT wie viele Sekunden gewartet wird um Space zu drücken, bevor gebootet wird |
Troubleshooting
Gave up waiting for root device
Problem:
Mögliche Ursachen:
Im optimalen Fall kommt nach dem „Gave up waiting for root device“ und den Hinweisen was mögliche Ursachen sind noch ein Hinweis was das Problem ist oder man kann aus davor gelaufenen Meldungen ersehen das ein Kernel-Modul nicht geladen wurde oder fehlgeschlagen ist oder ähnliches
startet das System zu schnell neu → man kann die letzet Zeile eventuell nicht mehr lesen
im grub als kernel-Parameter für den menu-entry panic=20 anfügen → das lässt den Kernel 20 Sekunden warten vor dem neustart
siehe nächste Sektion wie man die Parameter editieren kann
es kann sein das auch danach keine weitere Meldung sichtbar ist (hängt vom Kernel ab)
Treiber für die Festplatten oder Dateisystem nicht im initrd entahlten
Falsche Festplatte in grubs Konfiguration (Parameter root=) hinterlegt für diesen menuentry
die Initatlisierung des Festplatte dauert länger als der Kernel wartet
Falsche Festplatte/Partition im root-Kernel-Parameter:
Es gibt 2 Möglichkeiten das Problem zu beheben:
Durchprobieren:
in der Regel (VMs haben in der Regel andere Namenschemas und einige spezielle Treiber benutzen auch andere) werden die Festplatten /dev/sdXY oder /dev/hdXY bezeichnet
wenn man weiß die wievielte Parition das root-Dateisystem enthält hat man Y (1 → erste Partition)
X ist ein Buchstabe, wobei a für die erste Festplatte steht, b für die zweite usw.
es kann sein das die Plate entweder als /dev/hdXY oder /dev/sdXY bezeichnet wird → hängt vom Treiber ab, muss man durchprobieren
Wenn grub staret und ein Eintrag ausgewählt ist „e“ drücken → editieren
dann zu Zeile „linux…“ scrollen
zum „root-Parameter scrollen
löschen was da steht
geratenen Eintrag eingeben → root=/dev/hda1
F10 drücken → bootet den geänderten Eintrag
wiederholen bis System bootet
UUID ermitteln:
Ein Live-Medium mit Linux starten
herausfinden was die root-Partition ist
in der Regel findet man die Paritionen und Platten die das Sytsem gefunden hat auf dem Desktop oder Dateimanager bei graphischen Live-CDs
dann einfach gucken welches der Partition opt, etc, var usw. enthält
blkid /dev/gefundene Bezeichnung machen
die UUID notieren
wieder mit dem eigentlichen System starten
im grub einen Eintrag markieren (nicht Enter drücken)
„e“ drücken → editieren
zur Zeile „linux…“ scrollen
root-Parameter suchen und das was dahinter steht (bi zum leerzeichen) löschen
dann so editieren das da steht root=UUID=hier die nitierte UUID
F10 drücken → das startet den modifzierten Eintrag
Nach dem Neustart (wenn System gestartet):
Shell öffnen
mount → Zeile “… on /„ suchen
das was bei .. steht nehmen und damit blkid … machen → zum Beispiel blkid /dev/sda
die UUID notieren
vim /etc/grub/menu.lst
Parameter #kopt editieren → da steht etwas von #kopt=root=
das was hinter root= steht löschen (aber nur bis zum nächsten Leerzeichen, die Parameter dhainter müssen bleiben)
auf root=UUID=UID die notiert wurde eingeben ändern
speichern
update-grub aufrufen
neustarten → es sollte jetzt gehen
Alte Kernel vor 2.6? kennen UUID noch nicht und das vorgehen oben wird scheitern. Es muss dann immer mit dem devicenamen /dev/sdXY gearbeitet werden, anstatt UUID
HowTo
Siehe auch
Automatische Bootloader-Reparatur oder Grub von CD installieren
boot-repair-disk