25.4 Bootmanager
In diesem Abschnitt soll es um die Bootmanager gehen, mit denen man Linux (und andere Betriebssysteme) hochfahren kann.
Bootloader mit einem Auswahlmenü werden in der Regel im Master Boot Record (MBR) platziert <Theoretisch kann man einen Bootloader auch in den ersten Sektor einer Partition stecken, was jedoch nur selten sinnvoll ist.> und dazu verwendet, beim Start des Computers eines von mehreren installierten Betriebssystemen zu starten.
Typische Bootmanager sind GAG und die beiden besonders populären Vertreter LILO und Grub. Viele Distributionen sind mittlerweile vom »alten« Linux Loader (LILO) zu Grub gewechselt, doch es gibt auch einige, etwa Slackware-Linux, die noch immer den LILO verwenden. Wir werden in diesem Buch natürlich beide Bootmanager besprechen.
25.4.1 Grub
Die großen Linux-Distributionen wie Debian, RedHat und SuSE setzen allesamt Grub als Bootmanager ein. Die Software ist so komfortabel, dass man sich in der Regel um nichts kümmern muss. Installiert man den Grub jedoch von Hand, sind folgende Schritte notwendig:
1. In den MBR installieren
Möchte man den Bootmanager in den Bootsektor der ersten Festplatte installieren, ruft man einfach grub-install mit der entsprechenden Festplatte als Argument auf:
# grub-install /dev/hda
Installation finished. No error reported.
[...]
(hd0) /dev/hda
Listing 25.1 grub-install
2. Die Kernel-Liste updaten
Neuer Kernel?
Im Normalfall erkennt Grub alle installierten Kernel und alle weiteren Betriebssysteme auf der Platte automatisch.
Um diese Erkennung nach der Installation eines neuen Kernels jedoch manuell noch einmal anzustoßen, reicht folgender Aufruf:
# update-grub
Searching for GRUB installation directory ...
found: /boot/grub
Testing for an existing GRUB menu.list file ...
found: /boot/grub/menu.lst
Searching for splash image ... none found, skipping
Found kernel: /boot/vmlinuz-2.6.14-2-686
Found kernel: /boot/vmlinuz-2.6.8-2-386
Updating /boot/grub/menu.lst ... done
Listing 25.2 update-grub
Dieses Skript wurde für Debian entwickelt, ist aber auch für andere Distributionen verfügbar. Zum Standardumfang des GNU-Grub-Projekts gehört es jedoch leider nicht.
Die /boot/grub/menu.lst
Von daher wird man teilweise noch in die Verlegenheit kommen, die /boot/grub/menu.lst selbst editieren zu müssen. Da dies bei der Benutzung von update-grub automatisch geschieht, sollte man nur die Direktiven ändern, die einmal kommentiert sind. Doppelte Kommentare nach zwei Rauten sind dabei erst normale Kommentare, und alles, was nicht kommentiert ist, wird automatisch erstellt. Möchte man zum Beispiel die allen Kerneln gemeinsamen Bootoptionen ändern, editiert man folgende Zeile:
## e.g. kopt=root=/dev/hda1 ro
## kopt_2_6_8=root=/dev/hdc1 ro
## kopt_2_6_8_2_686=root=/dev/hdc2 ro
# kopt=root=/dev/hda5 ro
Listing 25.3 menu.lst mit update-grub
Für Grub ist diese Zeile ein Kommentar, für update-grub jedoch nicht. Darum werden nach einem erneuten Aufruf des Skripts auch alle Einträge des Kernels automatisch angepasst. Verzichtet man selbst oder eben die Distribution der Wahl auf dieses Skript, muss man für einen neuen Kernel einen neuen Eintrag ähnlich diesem Beispiel einfügen:
title Debian GNU/Linux, kernel 2.6.8-2-386 root (hd0,1) kernel /boot/vmlinuz-2.6.8-2-386 root=/dev/hda1 ro initrd /boot/initrd.img-2.6.8-2-386 savedefault boot
Listing 25.4 Ein Eintrag im Bootmenü
Dieses Beispiel ist weitestgehend selbsterklärend; einzig der Root des Dateisystems muss dem Kernel wie auch Grub extra mit auf den Weg gegeben werden. Schließlich befindet sich die /etc/fstab mit diesen Informationen ja auf der Partition, die man einbinden will ...
Wenn Sie beim Booten etwas in diesen Einstellungen ändern wollen, drücken Sie einfach die Taste »e«. Grub erlaubt Ihnen dann, den entsprechenden Eintrag quasi zur Laufzeit anzupassen. Sollen die Änderungen jedoch dauerhaft gespeichert werden, müssen Sie sie noch in der menu.lst fixieren.
Wenn Sie mehr über Grub erfahren möchten, sei Ihnen die Manpage sowie die Homepage des Projekts auf gnu.org ans Herz gelegt.
25.4.2 LILO
Der ältere und etwas weniger komfortable LILO wird über die Datei /etc/lilo.conf konfiguriert. Diese Datei wird von den meisten Distributionen automatisch durch Tools wie liloconfig erzeugt, und mithilfe dieser Datei wird schließlich auch die Installation des LILO im MBR vollzogen. Die bisher im LILO konfigurierten Betriebssysteme kann man mit dem Tool /sbin/lilo abfragen.
# lilo -q Slackware102 * Windows2000
Listing 25.5 lilo -q
Betrachten wir einmal eine Beispielkonfiguration, um die einzelnen Konfigurationsoptionen zu verstehen.
boot = /dev/hda delay = 10 prompt lba32 menu-title="Bootmenue Host yorick.sun" # Linux-Partition image = /boot/vmlinux root = /dev/hda3 label = Slackware102 read-only # Windows-Partition other = /dev/hda1 table = /dev/hda label = Windows2000
Listing 25.6 /etc/lilo.conf
Mit dem Schlüsselwort boot gibt man die Festplatte an, die den Bootsektor enthält – in diesem Fall also
/dev/hda, die erste IDE-Festplatte. Die Zeit, die LILO warten soll, bis das Standardbetriebssystem gebootet wird, wird via delay angegeben. Durch prompt erscheint die Eingabemöglichkeit, in der das Bootlabel angegeben werden kann, das LILO laden soll.
LILO muss man, sofern man jenseits der 1024-Zylinder-Grenze booten möchte, bei der Konfiguration noch das Schlüsselwort lba32 mit auf den Weg geben, um den Bootvorgang in diesem Fall überhaupt zu ermöglichen.
Via menu-title wird, wie Sie vielleicht schon ahnen, der Titel des LILO-Menüs angepasst.
Mit image gibt man an, wo sich der Linux-Kernel befindet. Da dies allein aber noch nicht ausreicht, weil eine Datei auf mehreren Partitionen vorhanden sein könnte, muss man auch noch angeben, von welcher Partition der Kernel geladen werden soll. Dazu dient root=xxx. Die Option label verpasst dem Eintrag im Bootmenü einen Namen.
Unter Linux wird das Root-Dateisystem aus Sicherheitsgründen zunächst nur mit Lese-Rechten gemountet, daher das Schlüsselwort read-only. Später wird es dann mit Schreibzugriff gemountet. Man kann aber auch erzwingen, dass es gleich während des Bootvorgangs mit Schreibzugriff gemountet wird, was mit read-write bewerkstelligt wird.
Hat man nun den Wunsch, ein System, bei dem es sich nicht um Linux handelt, als Booteintrag zu verwenden, gibt man dies durch other an. Mit table wird noch spezifiziert, wo die Partitionstabelle liegt.
LILO installieren
Um den LILO im Bootsektor zu installieren, ruft man /sbin/lilo auf.
# /sbin/lilo Added Slackware102 * Added Windows2000
Listing 25.7 LILO installieren
Übrigens: Um den LILO aus dem Bootsektor zu entfernen, wird lilo -u aufgerufen.