Der Bootmanager GRUB

Supportdatenbank (fhassel_grub_overview)
Bezieht sich auf

SuSE Linux: Versionen ab 8.1

Anliegen

Sie möchten Anwendungsmöglichkeiten und Funktionsweise des Bootmanager Grub kennenlernen, der ab SuSE Linux Version 8.1 der Standard Bootmanager geworden ist.

Hintergründe und Funktionsweise

Der Name Grub steht für Grand Unified Bootloader. Wie der Bootmanager Lilo besteht auch Grub im wesentlichen aus zwei Stufen: eine erste Stufe (512 Byte groß), die in den MBR oder den Bootsektor einer Partition geschrieben wird, und eine größere zweite Stufe (stage2), die im Anschluß geladen wird und den eigentlichen Programmcode enthält.

Der größte Unterschied zu LILO besteht darin, dass Grub mehrere Dateisysteme direkt unterstützt (u. a. alle Dateisysteme, die unter SuSE Linux verwendet werden können sowie vfat). Dadurch, dass Grub noch vor dem Booten auf das Dateisystem zugreifen kann, ist es nicht notwendig, Grub nach dem Verändern der Grub-Konfigurations-Datei neu zu installieren. Grub liest beim Booten den Inhalt der Menü-Datei neu ein.
Auch wenn ein neuer Kernel (/boot/vmlinuz) installiert bzw. die initiale Ramdisk (/boot/initrd) verändert wird, findet Grub diese selbständig. Für Grub ist es egal, wo der Kernel physikalisch liegt, solange nur die Angabe der Partition und der Pfad des zu bootenden Kernels in der Menüdatei richtig eingetragen ist. Daher entfällt die Neuinstallation des Bootloaders z. B. nach dem Kernel kompilieren.

Ein weiterer sehr großer Vorteil von Grub ist die Möglichkeit des Editierens aller Boot-Parameter noch vor dem Booten. Dies ist praktisch, falls beim Editieren der Menüdatei Fehler gemacht wurden.

Weiterhin ist es sogar möglich, die Bootkommandos in eine Art Eingabeaufforderung einzugeben. Damit lassen sich auch Betriebssysteme booten, für die (noch) kein Eintrag im Bootmenü existiert. Grub bietet hierbei die Möglichkeit, die Lage und Bezeichnung des Kernels und der initrd noch vor dem Booten festzustellen.

Im Folgenden soll nach einem Kurzüberblick über den Grub Bootprozess zunächst die Konfiguration mittels YaST2 erläutert werden. Anschließend wird der Aufbau der eigentlichen Konfigurationsdatei (die Datei /boot/grub/menu.lst) erklärt. Es folgt die Erläuterung der Dateien /boot/grub/device.map, in welcher die Zuordnung der Massenspeichergeräte zu den BIOS-Device-Namen festgelegt wird, sowie der Datei /etc/grub.conf, die hauptsächlich von YaST2 benutzt wird. Es wird desweiteren kurz angerissen, auf welche Weise Grub per Hand installiert werden kann. Abschließend werden die Möglichkeiten erläutert, die das Grub Bootmenu bieten.

Der Bootvorgang und die beteiligten Teile von Grub

Beim Booten des Rechners sind zwei Teile von Grub beteiligt:

Die Möglichkeiten des Grub Boot-Menüs

Wenn Grub nach dem Booten auf dem Bildschirm erscheint, kann (wie beim Bootmanager Lilo) einfach ein Menü-Eintrag ausgewählt werden, um das entsprechende Betriebssystem zu starten. Für Linux-Systeme können, wie gewohnt, Bootparameter eingefügt werden. Grub bietet allerdings noch mehr Möglichkeiten. Wenn Sie ESC drücken, verlassen Sie den Splash-Screen und können dann mit "e" (edit) einzelne Menü-Einträge editieren.

Das Editieren von Parametern ist meist nur in "Notfällen" nötig, zum Beispiel, wenn ein Betriebssystem nicht gebootet werden kann. Die Änderungen gelten nur für dieses eine Mal, werden also nicht dauerhaft übernommen. Beachten Sie, daß beim Booten lediglich die amerikanische Tastaturbelegung zur Verfügung steht. Die Belegung der Sonderzeichen ist somit vertauscht.

Zum Editieren eines Menüeintrags drücken Sie, wie beschrieben, zunächst ESC. Wählen Sie mit Hilfe der Cursor-Tasten den zu editierenden Eintrag aus und drücken Sie "e". Falls Sie beispielsweise den "Linux"-Eintrag ausgewählt haben, werden die folgenden Zeilen ausgegeben:

   kernel (hd0,4)/vmlinuz root=/dev/hda7 vga=791
   initrd (hd0,4)/initrd

Mit den Cursor-Tasten wählen Sie eine Zeile aus. Durch ein nochmaliges Drücken von "e" kann die Zeile editiert werden. Zum Beispiel können auf diese Art und Weise Partitionsangaben und Pfadangaben korrigiert werden. Durch Drücken der Taste ENTER kommen Sie zurück in das Menü, aus dem der Eintrag mit "b" gebootet werden kann. Weitere Möglichkeiten werden in einem Hilfetext am unteren Rand (in englischer Sprache) angezeigt.

Eine weitere Möglichkeit für Experten, die allerdings sehr selten benötigt wird: Mit "c" (für "command line") finden Sie sich in der Grub Shell wieder, einer Art Eingabeaufforderung. Eine Übersicht über die zur Verfügung stehenden Kommandos bekommen Sie mit "help". Mit der Taste "ESC" kommen Sie in das Boot-Menü zurück.

Die Grub Shell ermöglicht das Starten von Betriebssystemen, die nicht im Grub-Menü zu finden sind. Praktisch ist diese Möglichkeit zum Beispiel, wenn testweise mit einem selbstkompilierten Kernel gebooten werden soll, für den (noch) kein Eintrag im Grub-Menü angelegt wurde.

Um per Grub-Shell ein System zu booten, können zum Beispiel folgende Kommandos per Hand eingegeben werden (in diesem Fall für das Booten eines Linux-System mit einer Boot-Partition auf /dev/hda5 und einer Root-Partition auf /dev/hda7):

grub> kernel (hd0,4)/vmlinuz root=/dev/hda7 vga=791

   [Linux-bzImage, setup=0x1400, size=0xe9a45]

grub> initrd (hd0,4)/initrd
   [Linux-initrd @ 0x369000, 0x863c9 bytes]

grub> boot
Die Syntax können Sie der Datei /boot/grub/menu.lst auf Ihrem System entnehmen. Eine Erläuterung finden Sie im Kapitel Beispiel der Menüdatei weiter unten im Artikel. Wichtig: Abschließend ist die Eingabe von "boot" erforderlich, damit das System gestartet wird.

Praktisch an dieser Stelle: Da Grub schon beim Booten direkt auf das Linux-Dateisystem zugreifen kann, kann (wie in der bash) bei der Eingabe von Dateinamen die TAB-Taste benutzt werden, um unvollständige Namen automatisch ergänzen zu lassen. Nützlich ist dies unter Umständen, wenn die genaue Bezeichnung von Dateien nicht bekannt ist. Weiterhin nützlich: Falls nicht bekannt ist, auf welcher Partition sich der Linux Kernel befindet, kann dieser mit den Befehlen

find /boot/vmlinuz
bzw.
find /vmlinuz
gesucht werden. Diese Kommandos würde in unserem Beispiel die folgende Ausgabe liefern:
(hd0,4)
Natürlich kann mit dem Kommando find auch nach jeder anderen Datei (wie der initrd..) gesucht werden.

Desweiteren kann sogar mit Hilfe des Befehls cat der Inhalt einzelner Dateien angezeigt werden. Zum Beispiel können Sie sich den Inhalt einer Grub-Konfigurationsdatei ausgeben lassen, allerdings auch den Inhalt jeder anderen Datei. Auch jene Dateien, auf die Linux-Benutzer ohne root-Rechte im gestarteten Linux-System keinen Zugriff haben, können eingesehen werden!

Da dies aus sicherheitstechnischen Gründen nicht immer erwünscht ist, kann in der Datei /boot/grub/menu.lst ein Passwort gesetzt werden. Hierdurch ist das Starten der Betriegssysteme aus dem Menu heraus nach wie vor möglich, jedoch werden die interaktiven Möglichkeiten ("e" und "c") für Unbefugte gesperrt. Diese werden erst nach dem Drücken von "p" und der nachfolgenden Eingabe des Passworts freigegeben. Zum Setzen eines Passworts vergleichen Sie bitte den Abschnitt Die Konfiguration von Grub mittels YaST2 weiter unten im Text.

Die Konfiguration von Grub mittels YaST2

Die einfachste Möglichkeit der Konfiguration von Grub stellt die Benutzung von YaST2 dar. Starten Sie dazu das YaST2 Kontrollzentrum mit dem Dialog Im Menüpunkt Aktuelle Konfiguration ändern können sowohl globale Einstellungen als auch Optionen zum Starten einzelner Betriebsysteme bearbeitet werden. Nach dem Auswählen dieses Menüs kann zunächst festgelegt werden, wohin Grub installiert werden soll: in den Master Boot Sektor der ersten Festplatte, auf eine Diskette, in den Bootsektor der Boot- bzw. Rootpartition oder in eine andere Partition.

Mit Weiter wechseln Sie in einen Dialog, in welchem die Wartezeit des Boot-Prompts konfiguriert sowie ein Passwort für Grub festgelegt werden kann. Bitte beachten Sie, daß dieses Passwort das Ausführen von speziellen Grub-Befehlen am Boot-Prompt schützt. Es beeinflusst nicht die Betriebssystemen-Auswahl (Mehr zum Ausführen von speziellen Grub-Befehlen am Boot-Prompt im Kapitel "Die Möglichkeiten des Grub Boot-Menüs" weiter unten im Artikel).

Weitere Optionen erhalten Sie in den Einstellungen für Experten.

Mit Weiter gelangen Sie zur Konfiguration der Tabelle Abschnitte. Jeder Abschnitt steht für einen Eintrag im Bootmenü. Sie haben die Möglichkeit, Abschnitte hinzuzufügen, zu löschen sowie als Standard festzulegen. Mit der Auswahl Bearbeiten kann ein Abschnitt zum Beispiel umbenannt werden, oder (unter Einstellungen für Experten) können Kernelparameter geändert werden.

Das Drücken von Weiter führt Sie zurück zur Konfiguration der Abschnitte.

Wählen Sie Aktuelle Konfiguration speichern und drücken Sie auf Beenden, um die Änderungen auf die Festplatte zu speichern.

Im Punkt Manuelle Konfiguration für Experten können die Grub Konfigurations-Dateien /boot/grub/menu.lst sowie /etc/grub.conf manuell bearbeitet werden. Erläuterungen finden Sie dazu in den nachfolgenden Kapiteln.

Wählen Sie Ursprüngliche Konfiguration wiederherstellen, um die während der Installation vorgeschlagenen Einstellungen wiederherzustellen.

Die Menüdatei

Nach erfolgter Installation ist die Menüdatei die Wichtigste der Konfigurations-Dateien. Diese befindet sich bei SuSE Linux unter /boot/grub/menu.lst. Sie enthält alle Informationen zu allen Partitionen und Betriebssystemen, die mit Hilfe des Menüs gebootet werden können.

Bezeichnungen für Festplatten und Partitionen

Zunächst vorweg: Grub hat eigene Bezeichnungen für Festplatten und Partitionen. Es werden nicht die von Linux gewohnten Device-Bezeichnungen (z. B. /dev/hda1) benutzt, sondern stattdessen eigene Bezeichnungen verwendet. Das Diskettenlaufwerk trägt die Bezeichnung fd0, alle Festplatten die Bezeichnung hd0, hd1 usw. Die Partitionsbezeichnung wird, durch Komma getrennt, hinten angehängt: hd0,0 stellt die erste Partition auf der ersten Festplatte dar. Wichtig zu bemerken hierbei ist, daß die Nummerierung der Geräte und Partitionen bei null beginnt.

Beispiele:

(fd0)	Diskettenlaufwerk
(hd0)	Erste Festplatte im System (die Boot-Festplatte)
(hd1)	Zweite Festplatte
(hd0,0)	Erste Partition auf der ersten Festplatte
Bei der Nummerierung der Partitionen sind 0 bis 3 die vier primären Partitionen. Die logischen Partition werden ab Ziffer 4 beginnend gezählt:
(hd0,0) Die erste primäre Partition auf der ersten Festplatte 
(hd0,1) Die zweite primäre Partition
(hd0,2) Die dritte primäre Partition
(hd0,3) Die vierte primäre und in der Regel die Erweiterte Partition
(hd0,4) Die erste logische Partition 
(hd0,5) Die zweite logische Partition 
(hd0,6) Die dritte logische Partition
        usw.
Weiterhin wichtig zu wissen: Bei der Bezeichnung der Festplatten unterscheidet Grub nicht zwischen IDE, SCSI oder sonstigen Geräten. Es werden alle Festplatten, die vom BIOS bzw. weiteren (SCSI-, RAID-, usw.) Controllern erkannt werden, der Bootreihenfolge nach durchgezählt. (hd0,0) ist immer die Festplatte, die in der Bootreihenfolge, die im BIOS eingestellt ist, die erste ist, egal ob nun IDE, SCSI oder RAID.

Auch dies möchte ich nochmal an einem Beispiel verdeutlichen: In einem System mit zwei IDE- und zwei SCSI Festplatten ist im BIOS die Bootreihenfolge "IDE vor SCSI" eingestellt. Somit ergibt sich für Grub die folgenden Bezeichnungen:

(hd0)	Erste IDE-Festplatte
(hd1)	Zweite IDE-Festplatte
(hd2)	Erste SCSI-Festplatte
(hd3)	Zweite SCSI-Festplatte
Weitere Einzelheiten hierzu finden Sie im Kapitel Die Map-Datei.

Beispiel der Menüdatei

Im Folgenden möchte ich nun anhand eines Beispiels den Aufbau der Menüdatei /boot/grub/menu.lst erklären. In meinem Beispiel ist die Linux Bootpartition /dev/hda5, die Root-Partition /dev/hda7 und ein Windows Betriebssystem auf /dev/hda1.

gfxmenu (hd0,4)/message
color white/green black/light-gray
default 0
timeout 8

title linux
   kernel (hd0,4)/vmlinuz root=/dev/hda7 vga=791
   initrd (hd0,4)/initrd
title windows
   root (hd0,0)
   makeactive
   chainloader +1
title floppy
   root (fd0)
   chainloader +1
title failsafe
   kernel (hd0,4)/vmlinuz.shipped root=/dev/hda7 ide=nodma apm=off acpi=off vga=normal nosmp maxcpus=0 3
   initrd (hd0,4)/initrd.shipped
Die Einträge haben folgende Bedeutung: Dann zu den Einträgen der zu bootenden Betriebssysteme: Wie schon gesagt werden Änderungen an diesem Menü ohne weiteres Zutun beim nächsten Booten übernommen.

Weitere spezielle Informationen zum Booten von DOS/Windows-Betriebssystemen finden Sie in den Artikeln "Windows von der zweiten Festplatte booten" (http://sdb.suse.de/de/sdb/html/fhassel_grub_win1.html) und "Mehrere Windows-Installationen von einer Festplatte booten" (http://sdb.suse.de/de/sdb/html/fhassel_grub_win2.html).

Die Map-Datei

Die Map-Datei ist die zweite wichtige Konfigurationsdatei für Grub. Es ist allerdings nur in seltenen Fällen notwendig, diese zu ändern.

Noch einmal zurück zum Thema, wie Grub in einem Mischsystem die Festplatten nummeriert. In einem System, in dem Festplatten an unterschiedlichen Controllern angeschlossen sind (also z. B. sowohl IDE- als auch SCSI-Platten angeschlossen sind), muß Grub mit Hilfe eines speziellen Verfahrens versuchen, die Bootreihenfolge festzustellen (Grub kann ja nicht in das BIOS gucken). Grub muß stattdessen errechnen, ob von der IDE- oder der SCSI Festplatte gebootet wird.

Das Ergebnis speichert Grub in einer Datei ab. Diese findet sich unter /boot/grub/device.map. Diese hat in unserem Beispiel (im BIOS sei in der Bootreihenfolge IDE vor SCSI eingestellt) folgenden Inhalt:

(fd0)   /dev/fd0
(hd0)   /dev/hda
(hd1)   /dev/hdb
(hd2)   /dev/sda
(hd3)   /dev/sdb
Wichtig: Falls (bei Bootproblemen) der Inhalt der Datei manuell editiert wird, muß anschließend
grub --batch --device-map=/boot/grub/device.map </etc/grub.conf
aufgerufen werden, um Grub neu zu installieren. Der Parameter --device-map spezifiziert, daß grub die vorhandene Mapdatei auslesen soll. Die weiteren Kommandos werden der Datei /etc/grub.conf entnommen, die im folgenden Abschnitt erklärt werden soll.

Die Datei /etc/grub.conf

Die Datei /etc/grub.conf enthält Parameter für den Befehl "grub". Sie kann zum Beispiel folgenden Inhalt haben:
root (hd0,4)
install /grub/stage1 d (hd0) /grub/stage2 0x8000 (hd0,4)/grub/menu.lst
quit
Mit dem Eintrag root wird die Partition, auf der sich die Grub-Dateien befinden, "gemountet". Mit dem Befehl install wird Grub installiert. In diesem Beispiel wird die "stage 1" Datei in den MBR der ersten Festplatte installiert (d (hd0)). Die "stage 2" Datei soll in die Speicheradresse 0x8000 geladen werden (/grub/stage2 0x8000). Mit dem Eintrag (hd0,4)/grub/menu.lst wird die Lage der Menüdatei angegeben.

Dokumentation

Eine umfangreiche Dokumentation in englischer Sprache finden Sie unter http://www.gnu.org/manual/grub/html_mono/grub.html. Dieselbe Information können Sie im installierten System mit info grub in einer Shell aufrufen. Eine FAQ-Sammlung existiert unter http://www.gnu.org/software/grub/grub-faq.en.html. Weitere Hilfe bekommen Sie in den entsprechenden Manual-Pages: man grub und man grub-install.


Siehe auch:
o Das Bootloader-Konzept in der SuSE Linux Version 8.1
o Passwort setzen für den Bootmanager GRUB
o Den Bootmanager GRUB aus dem MBR deinstallieren
o Windows von der zweiten Festplatte booten
o Mehrere Windows-Installationen von einer Festplatte booten
o Nach einem Update auf SuSE 8.1 den Bootmanager hin zu GRUB ändern
o LILO anstatt GRUB in SuSE 8.1 als Bootloader benutzen
o Linux mit Hilfe des Bootmanagers von Windows NT/2000/XP booten
o Per GRUB über Netzwerk booten

Stichwörter: GRUB, BOOTEN, BOOTMANAGER, BOOTLOADER, OVERVIEW

Kategorien: GRUB

Feedback willkommen: Send Mail to fhassel+sdb@suse.de (Geben Sie bitte folgendes Stichwort an: SDB-fhassel_grub_overview)
SDB-fhassel_grub_overview, Copyright SuSE Linux AG, Nürnberg, Germany - Version: 26. Aug 2002
SuSE Linux AG - Zuletzt generiert: 06. May 2003 von fhassel (sdb_gen 1.40.0)