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:

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:

# Beispiel für /boot/grub/devices.map (hd0) /dev/sda (hd1) /dev/sdb

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:

# Globaler Bereich von /boot/grub/menu.lst default 2 # der dritte Menüeintrag gilt als Standardeintrag timeout 30 # 30 Sekunden warten, bevor das # Standardsystem gestartet wird color yellow/blue red/white # Menüeinträge farbig darstellen

Die folgenden Absätze beschreiben die GRUB-Schlüsselwörter für den globalen Bereich von menu.lst:

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.

# Menüeintrag in /boot/grub/menu.lst # Linux in /dev/sdb13 starten title Linux root (hd1,12) kernel /boot/vmlinuz root=/dev/sdb13 initrd /boot/initrd

Sie können auf das Kommando root auch verzichten. Dann müssen Sie aber bei jeder Datei die gewünschte Partition angeben:

# Linux in /dev/sdb13 starten title Linux kernel (hd1,12)/boot/vmlinuz root=/dev/sdb13 initrd (hd1,12)/boot/initrd

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)!)

# Linux in /dev/sdb13 starten, wenn es eine # eigene Boot-Partition /dev/sda2 gibt title Linux root (hd0,1) kernel /vmlinuz root=/dev/sdb13 initrd /initrd

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:

# Linux in /dev/sdb13 starten (mit zusätzlichen Kerneloptionen) title Linux root (hd1,12) kernel /boot/vmlinuz root=/dev/sdb13 vga=normal initrd /boot/initrd

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.

# Windows in /dev/sda1 starten title Windows rootnoverify (hd0,0) chainloader +1

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:

# Windows in /dev/sdb1 starten title Windows rootnoverify (hd1,0) map (hd0) (hd1) map (hd1) (hd0) chainloader +1

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.

# Bootloader im Boot-Sektor von /dev/sda7 starten title Bootloader in /dev/sda7 rootnoverify (hd0,6) chainloader +1

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:

root# grub grub> configfile (hd1,12)/boot/grub/menu.lst

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:

root# mkdir /test root# mount /dev/sda3 /test

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.

root# grub grub> root (hd0,2) (Ort der System- bzw. Boot-Partition) grub> setup (hd0) (Ziel der GRUB-Installation: der MBR der ersten Festplatte) grub> quit