Benutzer-Werkzeuge

Webseiten-Werkzeuge


grub

Linux

Legacy

  • Konfigurationsdatei: /boot/grub/menu.lst

Befehe/Hilfsprogramme

Befehl Beschreibung
update-grubUnter 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
#koptKernel-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

#grootRoot-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_QUIETWird 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_TIMEOUTWenn 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:

  • Nach dem der Kernel geladen hat kommt: „Gave up waiting for root device“
  • Danach Neustart oder man kommt auf eine abgespeckte Shell

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
  • Live-Medium starten, UUID ermitteln und UUID beim booten im root-Parameter angeben

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.
    • das muss man durchprobieren → in der Regel kann man bei d aufhören
  • 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

In das Grub Menu kommen wenn es nicht angezeigt wird

  • Während des Starts des Systems kommt in der Regel ein Count-Down (unter Umständen nur von 3 auf 1)
  • während der Zeit die Esc-Tase immer wieder drücken

Siehe auch

  • Automatische Bootloader-Reparatur oder Grub von CD installieren boot-repair-disk
grub.txt · Zuletzt geändert: 2016/05/21 16:50 von root