Booten mit GRUB

Warum GRUB zum booten benutzen?

Der Grand Unified Bootloader (GRUB) bietet einige Vorteile gegenüber LILO. Super ist das Auswahlmenü, es zeigt wunschweise alle installierten Betriebssysteme an. Mit den Cursor-up und Cursor-down-Tasten wählt man das zu bootende System, ENTER startet es.

Mit GRUB habe ich keine Probleme mit der 1024-Zylindergrenze. GRUB bootet so ziemlich alles was ich kenne (und was ich nicht kenne...). Mit Unixware sollte es eh keine Probleme geben, Windows, OS/2 oder BEOS werden per Chain-Loading gebootet.

GRUB ist ziemlich egal wo der Kernel physikalisch liegt, er braucht nur die Angabe der Partition und den Pfad des zu bootenden Kernels. Es ist (z.B. nach dem Kernelbacken) kein Programmaufruf wie bei LILO nötig. Ein unschätzbarer Vorteil von GRUB ist das editieren der Boot-Parameter vor dem Booten. Dazu werden mit der Taste e die Boot-Parameter bearbeitet. Leider bietet GRUB im Editiermodus nur die amerikanische Tastatur.
Zur Erinnerung:

          deutsche + amerikanische Tastaturbelegung   
                                                      
             /          -                             
             =          '                             
             (          )                             
             )          =                             

Was muss man noch wissen?

GRUB beginnt die Zählung der Platten und der Partitionen grundsätzlich bei 0. Die erste Partition auf der ersten Platte ist (hd0,0). Ein Eintrag wie (hd1,2) wäre also die 3.Partition auf der 2.Platte. Die erste Zahl bezeichnet die Platte - die zweite Zahl die Partition. 0 bis 3 sind die vier primären Partitionen - ab Nummer 4 handelt es sich um erweiterte Partitionen. (GRUB macht keinen Unterschied zwischen SCSI und IDE.) Bei der Angabe der Pfade für die Bootkernel und root-Partitionen gilt weiterhin die Linux-Zählweise beginnend bei 1.
altbekannt z.B.: /dev/hda1 (für erste IDE-Platte)

Falls man von einer SCSI-Platte booten will benötigt der Linuxkernel eine initrd-Datei, die Infos über die SCSI-Platte enthält, so etwa:
initrd (hd0,2) /boot/initrd
Weiterhin kann man mit den Befehlen module und modulenounzip weitere Module laden. Leider benutze ich kein SCSI - deshalb kann ich hierzu nichts weiter sagen.

GRUB - Installation vorbereiten

Manchmal ist GRUB schon in den Distributionen enthalten. Dann dürfte die Installation mit dem jeweiligem Paketmanager ausreichen. Wenn es nicht in der Distribution enthalten ist besorgt man sich die Quellen von ftp://alpha.gnu.org/gnu/grub.
(z.Z. ist gerade Version 0.5.96.1 aktuell, vielleicht gibt es ja schon eine neuere.)
Man benötigt:

grub-0.5.96.1-i386-pc.ext2fs
grub-0.5.96.1.tar.gz

Diese Dateien kopiert man in ein geeignetes Verzeichnis z.B. /usr/local oder nach /opt. Die Datei grub-0.5.96.1-i386-pc.ext2fs ist ein Image mit der man sich mit folgendem Kommando eine Bootdisk erstellen kann.

dd if=/opt/grub-0.5.96.1-i386-pc.ext2fs of=/dev/fd0

Wenn man das schon mal alles eingetippt hat, erstellt man sich am besten gleich 2 oder 3 Disketten. Die Bootdiskette ist schon ziemlich genial, damit kann man schon fast alles booten - auch wegen der Fähigkeit, dass man die Boot-Parameter vor dem Booten anpassen kann. GRUB ist auch in der Lage nur von der Kommandozeile aus, ein Betiebssystem zu starten. Dazu kann man mit der Bootdisk booten und mit der Taste c auf die Kommandozeile wechseln.
3 Befehle reichen schon für ein Linuxstart:

root (hd1,2)
kernel /boot/vmlinuz root=/dev/hdb3
boot

Falls man mal einen Linuxkernel sucht, hilft der Befehl find.

find /boot/vmlinuz oder find /vmlinuz

der könnte so eine Ausgabe liefern:

(hd0,0) (hd1,2)

Für DOS oder Windows 9x braucht man 4 Befehle:

rootnoverify (hd0,0)
makeactive
chainloader +1
boot

Keine Angst - man muss das nicht alles jedesmal von Hand eingeben. Dazu erstellt man sich ein Bootmenü. Dazu später mehr. Festzustellen bleibt, dass man schon booten kann, auch ohne den MBR nur angefasst zu haben. Zurück zur Installation: wir entpacken unsere Quellpakete in ein geeignetes Verzeichnis:

tar xfvz /opt/grub-0.5.96.1.tar.gz
cd /opt/grub-0.5.96.1
./configure
make
make install

Bei dieser Aktion sollten keine Fehler auftreten. Das könnte bei fehlenden Bibliotheken passieren, dann sollte man die dazugehörende Infos genau studieren.
Wir legen nun ein Verzeichnis /boot/grub an. Da hinein kopieren wir die Dateien aus dem Verzeichnis /usr/local/share/grub/i386-pc. Wichtig sind stage1 und stage2. Ich habe gleich alle Dateien kopiert, man weiss ja nie was man noch gebrauchen kann!
Wir können jetzt den Rechner mit der GRUB-Bootdiskette starten. Man sollte ruhig ein paar Bootversuche (wie oben beschrieben) machen, um sicher zu sein das alles gut geht - bevor es ernst wird. Ein paar funktionierende(!) Bootdisketten aller installierten Systeme sollten vorsichtshalber bereit liegen!
Wenn alles klar ist, installieren wir GRUB in den MBR.
Ein Beispiel von der 2.Partition der 1.Platte:
Rufen Sie die Kommandozeile mit der Taste c auf:

root (hd0,1)
setup (hd0)

Denken Sie dabei an die amerikanische Tastaturbelegung. Programme wie LILO werden beim Setup in den MBR gnadenlos übergebügelt. Falls Sie beim Setup den Bootsektor einer Partition auswählen [z.B. setup (hd0,2)], müssen Sie GRUB mit einem anderen Bootmanager mit Chain-Loading aufrufen.

Wir basteln uns ein Bootmenü

Unser Bootmenü wird durch die Datei /boot/grub/menu.lst gesteuert. Falls noch keine vorhanden ist (mal auf der Bootdiskette nachschauen), legen wir uns eine an. Verbiegen kann man in der Datei fast alles! Die Raute # dürfte als Kommentarzeichen bekannt sein.

# # # # # # # # # Beispiel /boot/grub/menu.lst # # # # # # # # #
#
# stellt die automatische Bootzeit in Sekunden ein
timeout 30
# stellt das Default-System das nach dem Timeout gebootet wird ein
# Zur Erinnerung: GRUB beginnt seine Zählungen bei 0
default 0
# wir spielen ein wenig mit den Farben des Bootmenues
# Vordergrund: weiss Hintergrund: blau
# Auswahl: blinkt rot Hintergrund: blau
color white/blue blink-red/blue
# wir legen ein Passwort fest,
# damit wir bestimmte Dinge sperren koennen
password 0815geheim4711
# Eintrag 1 ist default 0 # # # # # # # # # # # # # # # # # # # #
title Windows 98
rootnoverify (hd0,0)
makeactive
chainloader +1
# Eintrag 2 ist default 1 # # # # # # # # # # # # # # # # # # # #
# so koennte ein Eintrag fuer Windows NT oder Windows 2000 aussehen
# siehe auch Hinweise zu zwei Windows-Installationen
title Windows 2000
rootnoverify (hd0,1)
makeaktive
# chainload /bootsect.dos
# chainloader +1
# Eintrag 3 ist default 2 # # # # # # # # # # # # # # # # # # # #
title Suse-Linux
root (hd1,5)
# auch Parameter moeglich z.B:
# kernel /boot/vmlinuz root=/dev/hdb6 single
# kernel /boot/vmlinuz root=/dev/hdb6 vga=ask
kernel /boot/vmlinuz root=/dev/hdb6 read-only
# Eintrag 4 ist default 3 # # # # # # # # # # # # # # # # # # # #
title GNU/Debian
# lock - wir fragen mal nach dem Passwort
lock
root (hd1,4)
kernel /boot/vmlinuz root=/dev/hdb5 read-only
# Eintrag 5 ist default 4 # # # # # # # # # # # # # # # # # # # #
title Setup
# Hier wird es ernst! Setup fuer den MBR, also sperren!
# braucht man eventuell, wenn Windows mal wieder down ist!
lock
root (hd1,4)
setup (hd0)

# # # # # # # # # # # # # # E O F # # # # # # # # # # # # # # #

Mehrmals Windows auf den Platten

Manche Leute brauchen/wollen mehrere Windows-Installationen. Windows will aber immer von seiner 1.Partition auf der 1.Platte starten. Wir müssen also eine Partition verstecken und eine andere aktivieren. Die folgenden Befehle sollte man auf der GRUB-Kommandozeile eingeben und bei Erfolg mal in das Bootmenü reinbasteln. Das sollte dann für jeder Windows-Partition geschehen.
Backup nicht vergessen! ;-)

hide (hd0,0)
unhide (hd0,1)
rootnoverify (hd0,1)
makeactive
chainloader +1
boot

Wenn man von der 2.Platte ein 2.Windows starten will, vertauscht man virtuell Platte 2 und 1. Dadurch wird Windows eine erste Platte vorgegauckelt:

map (hd0) (hd1)
map (hd1) (hd0)

Man sieht GRUB ist sehr flexibel. Das hier sind noch lange nicht alle Möglichkeiten die GRUB bietet. GRUB kann noch sehr viel mehr. Zum Beispiel über das Netzwerk oder über serielle Schnittstellen booten. Jedes System hat seine Besonderheiten. Alles kann man nicht wissen; deshalb informieren Sie sich besser genauer in den Dokumentationen und in den Manpages zu GRUB über weitere Besonderheiten.