Der “Grand Unified Boot Loader” GRUB

Aus LinuxUser 07/2002

Der “Grand Unified Boot Loader” GRUB

Lilos Erben

Der für GNU/Hurd entwickelte Boot-Manager GRUB stellt dank vieler Features eine wirkliche Alternative zum Linux-Standard-Boot-Manager LILO dar. Wir zeigen, wie der Umstieg funktioniert.

Bis vor Kurzem setzten sämtliche Linux-Distributionen den Boot-ManagerLilo als unangefochtenen Standard ein. Doch beim Umgang mit Lilo kann viel schief gehen – diejenigen, die statt eines bootenden Linux schon einmal fassungslos auf ein “LIL-” auf dem Monitor gestarrt und sich gefragt, was denn nun zu tun sei, können ein Lied davon singen.

Außerdem fehlten und fehlen Lilo viele Features, die sich Anwender von einem Boot Loader wünschen: So gibt es beispielsweise erst seit kurzer Zeit ein grafisches Menü. Der Boot-Manager GRUB des GNU-Betriebssystems Hurdumgeht viele Fettnäpfchen, in die Lilo noch mit dem größten Vergnügen hineingetreten ist, und bringt viele praktische Features mit. So verfügt GRUB über eine Kommando-Shell, bei der es sich um eine Abwandlung der Bash handelt: Diese erlaubt es, nach dem Rechten zu sehen, wenn der Boot-Vorgang aus irgendeinem Grund fehlschlägt.

Er kann zudem auf verschiedene Dateisysteme zugreifen und liest deshalb seine Konfigurationsdatei bei jedem Boot-Vorgang aufs Neue – man muss den eigentlichen Boot Loader nicht jedesmal neu installieren, wenn man eine Änderung an der Konfigurationsdatei vorgenommen hat. Des Weiteren eignet sich GRUB hervorragend zum Erstellen einer Rettungsdiskette, mit der man das System starten kann, wenn irgendetwas schief gelaufen ist.

Dieser Artikel zeigt, wie Sie GRUB mit ein paar einfachen Handgriffen installieren und konfigurieren und wie Sie eine Rettungsdiskette für Notfälle erstellen.

Zuvor sei noch auf eines hingewiesen: Offenbar mögen die GRUB-Entwickler keine Windows-Anwender: GRUB kann weder DOS noch Windows direkt booten und benutzt deswegen, ähnlich wie Lilo, eine Chainloader-Funktion, die im Vergleich zu Lilo jedoch recht kompliziert einzurichten ist. Benutzern, die Linux und Windows auf einer Platte einsetzen wollen, ohne lange Dokumentation zu wälzen, raten wir daher momentan noch von GRUB ab. Möchten Sie es trotzdem versuchen, hilft die Dokumentation auf [1].

Auf GRUB umrüsten

Die Installation des Grand Unified Boot Loader erweist sich als verhältnismäßig einfach: Jeder aktuellen Distribution liegen RPM-Pakete bei, die sich von CD installieren lassen. Benutzer der Debian-Linux-Versionen Woody oder Sid spielen die aktuelle Ausgabe mittels apt-get install grub ein.

Lediglich Benutzer von Debian Linux 2.2 (Potato) haben das Nachsehen – deren GRUB-Version ist prähistorisch, eine Übersetzung der aktuellen Quellen wird notwendig. Die aktuellen GRUB-Sourcen können von [2] heruntergeladen und mit dem bekannten Installationsdreischritt ./configure, make und make install installiert werden.

Mandrake- und SuSE-Benutzer können diesen Schritt überspringen, weil das jeweilige GRUB-Paket die benötigten Verzeichnisse bereits erstellt und die Dateien an die richtige Stelle entpackt. Sie dürfen sofort zum Abschnitt “Die Konfigurationsdatei” weiter gehen.

Benutzer anderer Distributionen erstellen mittels mkdir /boot/grub zuerst das Verzeichnis /boot/grub, in dem später alle wichtigen Dateien liegen. Als nächstes müssen sie die Dateien stage1 und stage2 in dieses Verzeichnis kopieren. Bei Red Hat liegen sie in /usr/share/grub/i386-redhat, bei Debian in /usr/lib/grub/i386-pc:

cp /usr/lib/grub/i386-pc/stage1 /boot/grub
cp /usr/lib/grub/i386-pc/stage2 /boot/grub

Der folgende Schritt hängt vom Dateisystem ab, das Sie auf der Festplatten-Partition verwenden, auf der sich Ihr /boot-Verzeichnis befindet. Benutzen Sie das Ext2-Dateisystem, kopieren Sie die Datei e2fs_stage1_5, die im selben Verzeichnis liegt wie stage1 und stage2, nach /boot/grub. Wenn Sie das Reiser-Dateisystem verwenden, heißt die Datei Ihrer Wahl reiserfs_stage1_5:

cp /usr/lib/grub/i386-pc/e2fs_stage1_5 /boot/grub

Zuletzt kopieren Sie bitte den Kernel, den Sie verwenden möchten, falls noch nicht geschehen, nach /boot.

Die Konfigurationsdatei

GRUB liest die benötigten Daten, ähnlich wie Lilo, aus einer Konfigurationsdatei aus. Diese heißt menu.lst und gehört ebenfalls ins Verzeichnis /boot/grub. Die Befehlssyntax, die in der Datei menu.lst zum Einsatz kommt, unterscheidet sich jedoch grundlegend von der in lilo.conf verwendeten. Musste man in lilo.conf noch jeden Eintrag für einen speziellen Kernel mit image= einleiten und eine Reihe von Argumenten angeben, so ist es bei GRUB möglich, in menu.lst einfach den Namen des Menü-Eintrags sowie den Pfad zum Kernel auf dem Laufwerk anzugeben. Das Herausfinden des richtigen Laufwerk-Eintrags gestaltet sich dabei jedoch etwas schwierig, denn GRUB benutzt ein eigenes Format für Laufwerksnamen und akzeptiert deswegen keine Laufwerkspfade wie /dev/hda.

Die Festplatten und -partitionen sind bei GRUB durchnummeriert, beginnend mit 0. Somit trägt die erste Festplattenpartition auf der ersten Harddisc die Bezeichnung (hd0,0), die vierte Partition auf der ersten Festplatte heißt (hd0,3) und die zweite Partition auf der dritten Platte hört auf den Namen hd(2,1). Beachten Sie bitte, dass nur Festplatten gezählt werden und dass diese Zählung völlig unabhängig von den Einträgen im /dev-Verzeichnis ist. Es tut also nichts zur Sache, ob Ihre zweite Festplatte unter Linux über /dev/hdd angesprochen wird, weil an /dev/hdb und /dev/hdc CD-ROM-Laufwerke angeschlossen sind – die zweite Festplatte heißt bei GRUB immer (hd1).

Das folgende Beispiel geht davon aus, dass /dev/hda die erste Festplatte in Ihrem System darstellt und Ihr /-Dateisystem mit dem /boot-Verzeichnis auf /dev/hda1 beheimatet ist. Möchten Sie nun den Kernel /boot/vmlinuz-2.4.18 booten, so sähe der korrekte Eintrag für die menu.lst wie folgt aus:

title Linux (2.4.18)
kernel (hd0,0)/boot/vmlinuz-2.4.18 root=/dev/hda1

kernel ist hierbei das Schlüsselwort, das festlegt, was in der Zeile angegeben wird. (hd0,0) bezeichnet das Laufwerk, /boot/vmlinuz-2.4.18 gibt an, wo darauf der Kernel liegt, und root=/dev/hda1 erfüllt den selben Zweck wie schon das root=-Schlüsselwort in der lilo.conf.

Sollten Sie den Standard-Kernel Ihrer Distribution benutzen, müssen Sie eventuell zu jeder kernel-Zeile noch eine initrd-Zeile angeben. Eine initrd-Datei enthält eine “Initial RAM-Disk”, in der diverse Module abgelegt sind, die beim Booten geladen werden. Heißt die initrd-Datei /boot/initrd-2.4.18, so lautet der korrekte Eintrag für die menu.lst in unserem Beispiel

initrd (hd0,0)/boot/initrd-2.4.18

Um die richtige initrd-Datei für Ihren Kernel herauszufinden, vergleichen Sie die Ausgabe von uname -r am besten mit den initrd-*-Dateien in /boot.

Eine vollständige GRUB-Konfigurationsdatei mit Kommentaren finden Sie auf der Heft-CD. Sie können das Beispiel einfach übernehmen, die für Sie relevanten Dinge abändern und die Datei dann unter /boot/grub/menu.lst abspeichern.

Ist die Konfigurationsdatei fertig, kann GRUB in den Boot-Sektor der Festplatte geschrieben werden. Das folgende Beispiel geht davon aus, dass Sie GRUB in den Master Boot Record der ersten Festplatte, hier /dev/hda, installieren wollen. Führen Sie dazu als Benutzer root den Befehl grub auf der Konsole aus. Sollte in Ihren Rechner kein Diskettenlaufwerk eingebaut sein, verwenden Sie bitte grub --no-floppy. Sie befinden sich nun auf der grub-shell und müssen als nächstes festlegen, auf welcher Partition bei Ihnen das /boot-Verzeichnis beheimatet ist. Das erledigen Sie mit dem Schlüsselwort root:

grub> root (hd0,0)
Filesystem type is ext2fs, partition type 0x83

GRUB erkennt dabei zwar das Dateisystem auf dem Laufwerk, kann damit aber trotzdem nicht umgehen. Das Schlüsselwort embed schafft Abhilfe:

grub> embed /boot/grub/e2fs_stage1_5 (hd0)
16 sectors are embedded.

Die Zahl vor sectors kann dabei situationsabhängig variieren und sollte deswegen unbedingt notiert werden. Sie ist für den nächsten Befehl, der GRUB in den Master Boot Record der Festplatte schreibt, von enormer Bedeutung. Zum Installieren des Boot Loaders verwenden Sie nun das install-Schlüsselwort:

grub> install /boot/grub/stage1 d (hd0) (hd0)1+notierte_Zahl /boot/grub/stage2 /boot/grub/menu.lst

Verlassen Sie die GRUB-Shell mittels quit, und rebooten Sie Ihren Rechner. Beim Neustart sollte nun das GRUB-Menu anstelle des Lilo-Prompts erscheinen.

Die Boot-Diskette

Wird der Kernel versehentlich gelöscht oder spielt der Boot-Manager auf der Festplatte verrückt, ist eine Rettungsdiskette die einzige Tür zum System. GRUB eignet sich, nicht zuletzt wegen der eingebauten Mini-Shell, hervorragend für Boot-Disketten.

Wer sich mit einer solchen auf die sichere Seite begeben will, sollte eine komplett neue und damit hoffentlich unbeschädigte Diskette für diesen Zweck zur Hand nehmen. Beachten Sie außerdem, dass sie mit dem VFAT-Dateisystem formatiert ist, denn nur dann können Sie die Daten auch unter Windows lesen, um beispielsweise den Kernel in Notfallsituationen auszutauschen.

Um VFAT unter Linux benutzen zu können, benötigen Sie entsprechende Unterstützung im Kernel. Dies ist bei allen Distributionen im Standardkernel der Fall; das entsprechende Modul kann mittels modprobe vfat geladen werden.

Um eine Diskette unter Linux mit einem VFAT-Dateisystem zu versehen, nehmen Sie das Programm mkfs zur Hand, welches bei jeder Distribution zum Lieferumfang gehört. Der nötige Befehl lautet

mkfs -V -t vfat /dev/fd0

und muss, wie alle weiteren Befehle ebenfalls, als Benutzer root ausgeführt werden. Als nächstes legen Sie auf Ihrem Linux-System das Verzeichnis /mnt/grub-floppy an und mountendas Diskettenlaufwerk dorthin: mkdir /mnt/grub-floppy und mount -t vfat /dev/fd0 /mnt/grub-floppy erledigen diese Aufgaben. Danach erstellen Sie das Verzeichnis /mnt/grub-floppy/boot/grub und kopieren alle von GRUB benötigten Dateien dort hinein. Bei Debian geht das folgendermaßen:

mkdir /mnt/grub-floppy/boot
mkdir /mnt/grub-floppy/boot/grub
cp -ax /usr/lib/grub/i386-pc/* /mnt/grub-floppy/boot/grub/

Unter Red Hat Linux lautet das Kopierkommando hingegen

cp -ax /usr/share/grub/i386-redhat/* /mnt/grub-floppy/boot/grub/

…, während es bei Mandrake und SuSE

cp -ax /boot/grub/*stage* /mnt/grub-floppy/boot/grub/

lautet. Nun müssen Sie den Betriebssystemkern, den Sie später als Rettungskernel benutzen wollen, auf die Diskette schreiben. Ist dieser Kernel unter /boot/vmlinuz-2.4.18 zu finden, lautet der dazugehörige Befehl cp /boot/vmlinuz-2.4.18 /mnt/grub-floppy/. Sollten Sie eine Meldung wie No space left on device bekommen, versuchen Sie bitte, einen speziellen Rettungskernel zu kompilieren, der nur Unterstützung für das enthält, was zum Reparieren des Systems unbedingt notwendig ist (beispielsweise keine Unterstützung für Fernsehkarten).

Zu guter Letzt erstellen Sie noch die Datei /mnt/grub-floppy/boot/grub/menu.lst, die dem GRUB auf der Diskette später als Konfigurationsdatei dient. Sein Inhalt ist dabei weitestgehend identisch mit dem der Konfigurationsdatei, die bei der Festplatteninstallation von GRUB zur Anwendung kommt, es müssen lediglich einige Einträge abgeändert werden. So wird aus

title Linux (2.4.18)
kernel (hd0,0)/boot/vmlinuz-2.4.18 root=/dev/hda1

für die GRUB-Floppy-Konfigurationsdatei beispielsweise

title Linux (2.4.18 Rescue Kernel)
kernel (fd0)/vmlinuz-2.4.18 root=/dev/hda1

Die Laufwerksbezeichnung ändert sich dabei auf fd0, also auf das Kürze für das Diskettenlaufwerk, und der Pfad zur Kernel-Datei auf dem Laufwerk muss angepasst werden.

Befinden sich alle wichtigen Dateien auf der Diskette, unmounten Sie das Diskettenlaufwerk mittels umount /mnt/grub-floppy/, um mit der GRUB-Installation fortfahren zu können. Begeben Sie sich anschließend durch den Aufruf von grub wiederum auf die GRUB-Shell, um den Boot Loader in den Bootsektor der Diskette zu schreiben. Dazu sind, anders als bei der Festplatteninstallation, nur zwei Befehle nötig:

grub> root (fd0)
Filesystem type is fat, using whole disk
grub> install /boot/grub/stage1 d (fd0) /boot/grub/stage2 0x8000 p /boot/grub/menu.lst

Zum Schluss sollten Sie sich noch vergewissern, dass beim Erstellen der Rettungsdiskette alles geklappt hat. Stellen Sie dazu im BIOS Ihres Computers die Boot-Reihenfolge so um, dass zuerst versucht wird, von Diskette zu booten und erst danach von der Festplatte. Wenn beim Booten bei eingelegter Rettungsfloppy ein GRUB-Menu mit dem Eintrag für den Rettungskernel auftaucht, hat alles geklappt und die Diskette ist für den nächsten Notfall einsatzbereit.

Glossar

Hurd

Die meisten klassischen Unix-Kommandozeilentools, die bei Linux mitgeliefert werden, damit man mit dem Betriebssystemkern überhaupt etwas anfangen kann, stammen vom GNU-Projekt (http://www.gnu.org/), das sich ursprünglich zum Ziel gesetzt hatte, ein freies Unix-System zu schaffen. Dann kam Linus Torvalds Linux-Kernel, der die Erreichung dieses Ziels in Kombination mit den GNU Utilities schon vorweg nahm. Der Betriebssystem des GNU-Projekt, Hurd, ist bis heute nicht in einem Zustand, der einen produktiven Einsatz empfehlenswert macht.

Boot-Manager

Ein Boot-Manager ist ein kleines Programm, das in den Boot-Sektor einer Festplatte geschrieben wird, eine Reihe von Betriebssystemen zur Auswahl anbietet und das gewählte lädt.

mounten

Das Einhängen eines Datenträgers in die Linux-Verzeichnis-Hierarchie. Die Umkehr des Mounten, also das Aushängen eines Datenträgers aus der Hierarchie, bezeichnet man als Unmounten.

Infos

[1] Das GRUB-Online-Handbuch: http://www.gnu.org/manual/grub-0.90/html_chapter/grub_toc.html

[2] GRUB-Download-Seite: ftp://alpha.gnu.org/gnu/grub/

Der Autor

Martin Loschwitz ist Schüler aus Viersen und hat Lilo schon längst in die GRUBe geworfen. Im IRCNet tummelt er sich als “Madkiss”.

LinuxUser 07/2002 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben