24.5GRUB 0.97
Die einzige weitverbreitete Linux-Distribution, die noch die veraltete GRUB-Version 0.97 verwendet, ist Red Hat Enterprise Linux 6. Dazu kommen natürlich noch Derivate, wie CentOS 6 oder Scientific Linux 6. Da der Support für RHEL 6 erst 2020 bzw. für die Extended Life Phase sogar erst 2023 endet, wird GRUB 0.97 also noch einige Zeit relevant bleiben. Aus diesem Grund fasst dieser Abschnitt die wichtigsten Grundlagen dieser schon seit Jahren nicht mehr offiziell gewarteten GRUB-Version zusammen.
Beachten Sie, dass GRUB 0.97 den Linux-Kernel weder aus Software-RAID- noch aus LVM-Volumes lesen kann. GRUB 0.97 ist auch zu vielen Dateisystemen inkompatibel (z.B. btrfs). Aus diesen Gründen richtet RHEL 6 standardmäßig eine eigene Boot-Partition ein, die sich außerhalb des RAID- oder LVM-Bereichs befindet und die ein von GRUB unterstütztes Dateisystem verwendet, z.B. ext2 oder ext3.
Konfiguration (Menüdatei)
Der Aufbau des GRUB-Menüs wird durch die GRUB-Menüdatei gesteuert, die üblicherweise den Namen /boot/grub/menu.lst hat. Im Vergleich zur Konfigurationsdatei von GRUB 2 ist die Syntax dieser Datei relativ einfach. Anders als bei GRUB 2 gibt es keine Scripts, um menu.lst automatisch zu erzeugen bzw. zu aktualisieren.
Bei jedem Kernel-Update muss die GRUB-Konfigurationsdatei aktualisiert werden. Das stellt sicher, dass beim nächsten Neustart der neue Kernel genutzt wird. Allerdings kann es passieren, dass bei der automatischen GRUB-Neukonfiguration Ihre eigenen Änderungen überschrieben werden.
Unter RHEL 6 übernimmt das Kommando grubby die GRUB-Neukonfiguration nach Kernel-Updates. Als »offizielle« GRUB-Konfigurationsdatei gilt /etc/grub.conf. Dabei handelt es sich um einen Link auf die tatsächlich aktive GRUB-Konfigurationsdatei.
Die Bezeichnung von Partitionen in GRUB 0.97 erfolgt ganz ähnlich wie in GRUB 2. Es gibt aber zwei wesentliche Unterschiede:
-
Die Nummerierung von Partitionen beginnt mit 0, nicht mit 1.
-
Der Partitionsnummer darf kein Kürzel vorangestellt werden, das auf das Partitionierungsformat hinweist.
Wenn also in GRUB 2 von (hd0,gpt3) die Rede ist, müssen Sie dieselbe Partition in GRUB 0.97 mit (hd0,2) bezeichnen. Tabelle 24.4 gibt weitere Beispiele.
GRUB-0.97-Device-Name |
Bedeutung |
---|---|
(hd0) |
die erste Festplatte/SSD (entspricht /dev/sda) |
(hd1) |
die zweite Festplatte/SSD (entspricht /dev/sdb) |
(hd0,0) |
die erste Partition der ersten Festplatte/SSD (/dev/sda1) |
(hd2,7) |
die achte Partition der dritten Festplatte/SSD (/dev/sdc8) |
Tabelle 24.4Partitionsnamen in GRUB 0.97
Intern verwendet GRUB die Datei /boot/grub/devices.map zur Zuordnung zwischen den Laufwerken und den GRUB-Device-Namen. Die Datei wird erstellt, wenn GRUB zum ersten Mal ausgeführt wird. Die Datei wird allerdings nach dem Hinzufügen neuer Laufwerke nicht automatisch aktualisiert. Gegebenenfalls können Sie die Datei einfach löschen und danach grub ausführen. Die Datei wird dann automatisch neu erstellt. Das kann bis zu eine Minute lang dauern.
In hartnäckigen Fällen können Sie auch versuchen, die Datei selbst zu verändern. Beachten Sie aber, dass Ihre Veränderungen mit den Informationen übereinstimmen müssen, die GRUB beim Rechnerstart vom BIOS erhält. Das Format der Datei sieht so aus:
Globaler Bereich in menu.lst
Grundsätzlich besteht die GRUB-Menüdatei aus einem globalen Bereich, der diverse Grundeinstellungen enthält, sowie aus mehreren Menüeinträgen, die jeweils mit der Zeile title beginnen. Die folgenden Zeilen zeigen ein Beispiel für den globalen Bereich von menu.lst:
Die folgenden Absätze beschreiben die GRUB-Schlüsselwörter für den globalen Bereich von menu.lst:
-
default gibt die Nummer des Menüeintrags an, der als Standardeinstellung gilt. Die Zählung beginnt mit 0! Statt einer Nummer ist auch default saved zulässig. In diesem Fall gilt der Menüeintrag als Standardeinstellung, der beim letzten Start verwendet wurde. Damit das funktioniert, muss allerdings jeder Menüeintrag das Schlüsselwort savedefault enthalten. Wenn menu.lst keinen default-Eintrag enthält, bezeichnet der erste Menüeintrag das Standardsystem.
-
fallback gibt die Nummer des Menüeintrags an, der genutzt wird, wenn der Standardeintrag fehlerhaft ist. Ohne fallback-Eintrag wechselt GRUB bei derartigen Fehlern in den interaktiven Modus.
-
timeout gibt an, wie viele Sekunden GRUB auf eine Menüauswahl wartet. Nach dieser Zeit wird automatisch das Standardbetriebssystem gestartet. Wenn Sie möchten, dass GRUB endlos wartet, ohne ein Betriebssystem automatisch zu starten, stellen Sie der timeout-Zeile das Kommentarzeichen # voran.
-
hiddenmenu bewirkt, dass GRUB kein Menü anzeigt. Nach der durch timeout angegebenen Zeit wird das Standardsystem gestartet. Bis zu diesem Zeitpunkt kann der Benutzer das Menü durch (Esc) anzeigen und dann wie üblich eine Menüauswahl treffen.
-
password -- md5 code schützt GRUB durch ein Passwort. Die Menükommandos können ohne Passwort genutzt werden, die interaktiven Funktionen von GRUB stehen aber nur nach der Eingabe eines Passworts zur Verfügung.
-
color fg/bg menufg/menubg steuert die Farben des GRUB-Menüs an. Dabei gibt fg die Vordergrundfarbe (Textfarbe) und bg die Hintergrundfarbe des gesamten Bildschirms an. menufg und menubg geben entsprechend die Farben des gerade ausgewählten Menüeintrags an. Wenn Sie auf die color-Anweisung verzichten, erscheint das GRUB-Menü in Schwarz-Weiß.
Menüeinträge in menu.lst
Nach dem globalen Bereich folgen in menu.lst die Menüeinträge für verschiedene Betriebssysteme. Jeder Menüeintrag wird durch title eingeleitet. Der durch title angegebene Text ist der Inhalt der Menüzeile. Dabei sind nur ASCII-Zeichen erlaubt, keine internationalen Sonderzeichen.
Die weiteren Zeilen bis zur nächsten title-Anweisung bzw. bis zum Ende der Datei sind GRUB-Kommandos, die in dieser Reihenfolge ausgeführt werden. Wenn Sie die Kommandos interaktiv testen, müssen Sie zusätzlich noch boot ausführen. Dieses Kommando muss in der Menüdatei nicht angegeben werden.
Um Linux zu starten, müssen Sie mit root die Partition angeben, auf der sich der Kernel und die Initial-RAM-Disk-Datei befinden. Diese Partition wird für GRUB zur aktiven Partition. Die kernel- und initrd-Kommandos geben den genauen Ort der Dateien sowie eventuelle Kerneloptionen an.
Beachten Sie, dass für die Kerneloptionen die Linux-Nomenklatur zur Anwendung kommt. Deswegen heißt es hier root=/dev/sdb13. Alternative Schreibweisen sind root=LABEL=label sowie root=UUID=n, wobei Sie in diesen Fällen das Label bzw. die Identifikationsnummer der Partition angeben müssen. Beachten Sie weiters, dass die Dateinamen von vmlinuz und initrd auf Ihrem System abweichen können.
Sie können auf das Kommando root auch verzichten. Dann müssen Sie aber bei jeder Datei die gewünschte Partition angeben:
Wenn sich /boot nicht auf der Systempartition befindet, sondern in einer eigenen Boot-Partition, müssen Sie das root-Kommando in grub entsprechend ändern. Da nun die Boot-Partition als Ausgangspunkt für alle Dateien gilt, müssen die Pfadangaben ohne /boot geschrieben werden. Die folgenden Zeilen gehen davon aus, dass /dev/sda2 die /boot-Partition ist. (Entscheidend ist die Zeile root (hd0,1)!)
Beim Start des Kernels werden diverse Boot-Optionen übergeben. Diese Optionen geben z.B. den Ort der Systempartition an oder steuern, wie die Meldungen des Init-Systems dargestellt werden. In menu.lst werden diese Optionen einfach am Ende der kernel-Zeile angegeben:
Wenn Sie Windows starten möchten, müssen Sie die aktive Partition mit rootnoverify statt mit root angeben. Das Kommando chainloader +1 bewirkt, dass der erste Sektor dieser Partition gelesen und ausgeführt wird. Damit wird der Windows-Bootloader gestartet, der sich um den eigentlichen Start von Windows kümmert.
Der Windows-Start gelingt nur, wenn sich Windows auf der ersten Festplatte befindet. Wenn das nicht der Fall ist, können Sie die Festplatten durch die folgenden Zeilen virtuell vertauschen:
Bootloader wie GRUB werden üblicherweise in den MBR der ersten Festplatte installiert. Es besteht aber auch die Möglichkeit, sie in den Boot-Sektor einer beliebigen Partition zu installieren. Mit dem zentralen GRUB, der sich im MBR befindet, starten Sie indirekt den in eine Partition installierten GRUB. Diese Vorgehensweise kann sinnvoll sein, um mehrere Linux-Distributionen parallel auf einer Festplatte zu installieren.
GRUB-Konfiguration testen
Wenn Sie rasch und ohne Neustart testen möchten, ob eine geänderte GRUB-Menüdatei frei von syntaktischen Fehlern ist, starten Sie zuerst grub und führen dort das folgende Kommando aus:
Statt (hd1,12) müssen Sie den GRUB-Namen für die Festplattenpartition angeben, in der sich die GRUB-Menüdatei befindet. Wenn alles klappt, zeigt GRUB das Menü an. Sie können jetzt allerdings kein Betriebssystem starten, weil Linux ja schon läuft.
GRUB 0.97 und EFI
RHEL 6 setzt auch bei EFI-Installationen auf GRUB 0.97. Offiziell unterstützt GRUB 0.97 EFI eigentlich gar nicht, Red Hat liefert in RHEL 6 aber eine gepatchte Version aus. Im Vergleich zum unmäßig komplexen GRUB 2 liegt der Charme der EFI-Version von GRUB 0.97 gerade in ihrer Einfachheit.
Der Bootloader befindet sich in der unveränderlichen Datei grub.efi, die auch bei BIOS-Rechnern in das Verzeichnis /boot/efi/EFI/redhat installiert wird. Die Datei ist einfach Bestandteil des grub-Pakets. Ob /boot/efi eine eigene Partition ist oder nicht, wird nicht überprüft. Wenn Sie eine vorhandene BIOS-Installation später in eine EFI-Installation umbauen möchten, müssen Sie aber unbedingt sicherstellen, dass /boot/efi der mount-Punkt für die EFI-Partition ist.
grub.efi erwartet die Konfigurationsdatei im selben Verzeichnis. Bei EFI-Installationen ist /etc/grub.conf daher ein Link auf /boot/efi/EFI/redhat/grub.conf. Die Syntax von grub.conf ist dieselbe wie bei der BIOS-Version von GRUB 0.97. Bei EFI-Installationen wird auch devices.map in diesem Verzeichnis gespeichert.
GRUB-Installation in einem Live-System reparieren
Nach dem Start des Live-Systems starten Sie eine Konsole und führen darin su -l oder sudo -s aus, um root-Rechte zu erlangen. Als Nächstes müssen Sie die Partition suchen, in der sich Ihre Linux-Distribution und insbesondere das Verzeichnis /boot befinden:
Die gesuchte Partition erkennen Sie daran, dass es ein /boot-Verzeichnis mit Linux-Kerneldateien (vmlinuzxxx), dem Unterverzeichnis /boot/grub und der GRUB-Menüdatei /boot/grub/menu.lst gibt. Falls Sie eine eigene Boot-Partition besitzen, enthält diese Partition kein boot-Verzeichnis. vmlinuzxxx und das Unterverzeichnis grub befinden sich in diesem Fall direkt im Wurzelverzeichnis der Partition.
Nach diesen Vorbereitungsarbeiten geht es nun darum, GRUB so in den Boot-Sektor der Festplatte zu installieren, dass beim Rechnerstart davon ausgehend alle weiteren GRUB-Dateien in /dev/sda3 gelesen werden. Dabei ist (hd0,2) die für GRUB übliche Bezeichnung der Partition /dev/sda3 und (hd0) die Bezeichnung für die gesamte erste Festplatte, in deren Boot-Sektor GRUB geschrieben werden soll.