Der Bootloader für Linux, Windows Vista und XP

Der Bootmanager GRUB

08.02.2008 von Moritz Jäger
GRUB ist der Standard-Bootmanager unter Linux, der nun auch Windows Vista starten kann. Wir zeigen Ihnen, was die Vorteile von GRUB gegenüber LiLo sind, wie Sie den Bootloader einrichten und wie Sie ihn notfalls wiederherstellen.

Ursprünglich für das GNU/Hurd-System entwickelt, hat sich der Grand Unified Bootloader (GRUB) zum Standard unter Linux gemausert. In den meisten Distributionen hat er mittlerweile bereits den üblichen Linux Loader (LiLo) abgelöst. Der Grund dafür liegt in den zahlreichen Fähigkeiten, die GRUB mitbringt. So verfügt er beispielsweise über ein eigenes Installationsprogramm und ist damit nicht auf bereits bestehende Systeme angewiesen.

Der Bootloader bietet unter anderem eine native Unterstützung für die Dateisysteme ReiserFS, ext2, FAT32 und BSD FFS. Eine der wichtigsten Eigenschaften besteht in der Multiboot-Fähigkeit. Dadurch lassen sich verschiedene Linux-Kernel oder Unix-Derivate wie FreeBSD und OpenBSD starten. Mittels des so genannten "Chainloading" wird zudem der Start kommerzieller Betriebssysteme wie Microsoft Windows ermöglicht. Beim Chainloading spricht GRUB die einzelnen Bootloader oder Bootsektoren der Betriebssysteme an und übergibt ihnen den Systemstart.

GRUB stellt eine integrierte Kommandozeile zu Verfügung, mit der beispielsweise eine Dateisuche oder der Einblick in die Partitionstabellen möglich ist. Wie ein Standard-Linux-System beherrscht sie die Vervollständigung von Dateinamen mit Hilfe der Tabulatortaste.

So funktioniert GRUB

Der Master Boot Record (MBR) einer Festplatte bietet lediglich Platz für 512 Byte an Daten. Das ist zu wenig, um den kompletten Bootloader direkt aus dem MBR zu starten. Aus diesem Grund ist GRUB selbst in mehrere Einzelstücke aufgeteilt. Der erste Teil, stage1, liegt im MBR. Er dient dazu, die Dateien stage1_5 und stage2 nachzuladen, die auf der Festplatte selbst liegen. Die Komponente stage1_5 sorgt dafür, dass GRUB auf verschiedene Dateisysteme zugreifen kann, stage2 enthält den eigentlichen Bootloader.

Stolperfalle Nummerierung

Eine kleine Stolperfalle ist in der Zählweise enthalten, mit der GRUB die Festplatte anspricht. Die Nummerierung beginnt immer mit null. Einige Beispiele zeigt die Tabelle auf.

Beispieltabelle: So nummeriert GRUB

(hd0)

Erste physikalische Festplatte des Systems; /dev/hda

(dh0,1)

Zweite Partition der ersten physikalischen Festplatte; /dev/hda2

(hd3,8)

Neunte Partition der vierten physikalischen Festplatte

(fd0)

Diskettenlaufwerk

GRUB bezeichnet SCSI- und IDE-Festplatten gleich. In einem gemischten System nummeriert er zunächst IDE- und dann SCSI-Festplatten. CD- oder DVD-Laufwerke werden nicht berücksichtigt.

Die Datei menu.lst

GRUB liest die Einstellungen aus der Datei menu.lst aus, die in /boot/grub/ liegen muss. Ein Beispiel sieht wie folgt aus:

# menu.lst tecBoot
#
default=1
timeout=20
password=tecchannel
title Linux-Rechner
root (hd0,1)
kernel /boot/vmlinuz root=/dev/hda2 vga=normal
initrd /boot/initrd
title Windows XP
rootnoverify (hd0,0)
chainloader +1
makeaktive

Die Menüpunkte bedeuten im Einzelnen: default definiert den Eintrag, den GRUB standardmäßig lädt. Auch hier beginnt die Nummerierung mit 0, das Beispiel definiert also Windows als Standardsystem. Der Wert timeout steht mit default in Zusammenhang. Die Zahl gibt die Zeit in Sekunden an, wann das System startet, wenn keine Benutzerinteraktion erfolgt. password erklärt sich von selbst. Nur, wenn ein Benutzer das eingetragene Passwort kennt und eingibt, erhält er Zugriff auf die GRUB-Konsole.

title definiert den Eintrag des angezeigten Betriebssystems. Im Beispiel kann man im Auswahlfenster zwischen den Namen „Linux-Rechner“ und „Windows XP“ wählen. root gibt an, auf welcher Partition GRUB den Linux-Kernel und eine eventuell erforderliche Initial-RAM-Disc finden kann.

kernel und initrd definieren den genauen Ort der Startdateien. Die Zeile kernel kann zudem zusätzliche Startoptionen enthalten.

Ist das zweite startbare System eine Windows-Partition, ersetzt der Eintrag rootnoverify den Befehl root. Das Kommando chainloader +1 liest den ersten Sektor der angegebenen Partition aus. Die Windows-Versionen 95, 98 und ME starten im Anschluss direkt, für alle anderen Windows-Varianten übergibt GRUB den Start an den Windows-eigenen Bootloader. Rauten (#) kennzeichnen Notizen und Bemerkungen und werden bei der Verarbeitung der Befehle ignoriert.

Neu: GRUB und Vista

Vista bringt zwar einen eigenen Bootloader mit, kann aber auch über GRUB gestartet werden. Dabei unterscheidet sich das System kaum von vorherigen Windows-Betriebssystemen. Über die Konfiguration teilt man GRUB lediglich mit, wo er die Vista-Partition findet, anschließend wird per chainloader der Windows-Bootvorgang gestartet.

In der menu.lst steht also als Startaufruf:

title=Windows Vista
rootnoverify (hd?,?)
chainloader +1
makeactive

Der Ausdruck hd?,? steht in diesem Fall wie bereits oben beschrieben für die physikalische Festplatte und die Partition, auf der Vista zu finden ist.

Alternativ gibt es auch noch den anderen Weg, sprich, dass man GRUB mithilfe des Vista-Bootloaders startet. Das klappt allerdings nur, wenn der Bootloader nicht im MBR, sondern in der Linux-Partition selbst steht. Wie Sie dann den Vista-Bootloader einrichten, finden Sie in unserem Artikel „Profi-Know-how: Windows Vista und Longhorn Bootmanager“ im Kapitel „Multi-Boot - Vista, XP und Linux“

Neu: Sondersysteme – GRUB 2 und TrustedGRUB

Derzeit arbeiten die Entwickler am Nachfolger GRUB 2. Für diesen wird der komplette Code des Bootloaders neu geschrieben. Grund ist, dass der über die Jahre gewachsene Code sich kaum noch warten lässt. Entstanden ist GRUB 2 aus dem Forschungsprojekt PUPA. Der kommende Bootloader soll sich vor allem leichter anpassen lassen, womit neben der Portierung auf andere Architekturen auch die Unterstützung für internationale Zeichensätze gemeint ist.

Zum Zeitpunkt, als dieser Artikel geschrieben wurde, befand sich GRUB 2 in einem ersten Alphastadium. Er lässt sich zwar testen, ist aber nicht für den Einsatz auf Produktivumgebungen empfohlen. Mehr Informationen finden Sie auf der Homepage des Projektes.

TrustedGRUB

TrustedGRUB ist ein Ansatz, den Bootloader in eine Trusted Module Platform zu integrieren und der die Anforderungen der Trusted Computing Group erfüllen soll. Entwickelt wird das System von der Sirrix AG, zusammen mit der Ruhr-Universität Bochum.

Bei dem Projekt handelt es sich um keinen eigenständigen Bootloader, sondern um eine Erweiterung für GRUB. Sie wurde bereits auf einer Reihe von TMP-Chipsätzen erfolgreich getestet, eine Übersicht finden Sie hier. TrustedGRUB kann direkt von dieser Sourceforge-Projektseite geladen werden. Die Installation selbst läuft dann über ein Script ab, das alle weiteren Informationen liefert.

Neu: GRUB unter Vista wiederherstellen

Bei der Installation von Vista und Longhorn überschreibt das System ungefragt den Bootloader, sodass Multi-Boot-Umgebungen unter Umständen nicht mehr funktionieren. Falls Ihre Vista-Installation die GRUB-Einstellungen überschrieben hat, lassen sich die Einstellungen aber leicht wiederherstellen. Am einfachsten geht dies mit der Super GRUB Disk. Diese knapp 8,5 MByte große Live-CD kann den Master Boot Record sowohl für Linux als auch für Windows automatisch reparieren.

Automatisch: Die Super GRUB Disk kann den MBR selbstständig reparieren.

Alternativ gibt es einen manuellen Weg; auch hier sollten Sie eine Live-CD zur Hand haben. Die folgenden Anweisungen setzen eine Ubuntu-basierte Live-CD voraus. Starten Sie von der CD, und rufen Sie ein Terminal auf. Hier tippen Sie sudo grub ein, worauf Sie den Prompt „grub>“ erhalten sollten. Das bedeutet, dass Sie nun direkt in GRUB arbeiten. Als Nächstes müssen Sie herausfinden, auf welcher Festplatte und Partition Ihre Stage1 liegt. Das geschieht mit dem Befehl find /boot/grub/stage1.

Handarbeit: Per Live-CD lässt sich GRUB ebenfalls retten.

Suchen Sie nun aus den Ergebnissen Ihre Linux-Partition heraus. Sie tragen Sie mittels root (hd?,?) in den Loader ein. Die Fragezeichen stehen dabei wieder für physikalische Festplatte und die Partition. Wichtig ist, dass Sie sich immer noch auf dem GRUB-Prompt, also in „grub>“ befinden.

Sind die Werte eingetragen, schreiben Sie GRUB mit dem Befehl setup (hd0) in den Master Boot Record der ersten Festplatte. Mit dem Befehl quit verlassen Sie anschließend den GRUB-Prompt. Wenn Sie nun den Rechner neu starten, sollte GRUB wie gehabt erscheinen.

Notfallinstallation via Diskette

Wenn das CD-Laufwerk streikt oder Sie keine Live-CD zur Hand haben, können Sie auch auf die Disktette zurückgreifen. Die Beschreibung geht von einem komplett installierten Linux-System aus, das bereits GRUB verwendet und in dem der Benutzer als Superuser root angemeldet ist. Als Erstes präpariert man eine Diskette als Bootmedium. Dazu dient bei eingelegter Diskette der Befehl

mke2fs /dev/fd0

Dieser formatiert das Medium mit dem ext2-Dateisystem. Als Nächstes erstellt das Kommando

mkdir /floppy

das Verzeichnis/floppy. Die Diskette wird im Anschluss mittels

mount -t ext2 /dev/fd0 /floppy

in den Verzeichnisbaum und das eben erstellte Verzeichnis eingehängt. Wichtig ist, dass die Bootdiskette den Ordner /boot enthält. Diesen richtet

mkdir /floppy/boot

ein.

Installation auf Diskette

Beim nächsten Schritt werden die stage*-Dateien aus dem GRUB-Hauptverzeichnis benötigt. Dabei handelt es sich jedoch nicht um die Dateien aus /boot/grub/. Unter SUSE Linux 9.2 liegen sie beispielsweise in /usr/lib/grub. Eventuell müssen Sie Ihr System durchsuchen und den Pfad gegebenenfalls anpassen.

cp -a /PFAD/ZU/GRUB/ /floppy/boot/

kopiert das gesamte Verzeichnis auf die Bootdiskette. Nun ist die oben beschriebene Menüdatei notwendig. Die an das System angepasste menu.lst gehört in den Ordner /floppy/boot/grub/.

Beim letzten Schritt wird GRUB im Bootsektor der Diskette installiert. Das Kommando

grub

startet die GRUB-Shell. Nun benötigt das Programm die Pfadangaben zum Datenverzeichnis. Sie liegen bereits auf dem Medium, der Befehl

root (fd0)

teilt dies dem Bootloader mit.

setup (fd0)

schließlich startet die Installation in den Bootsektor des Datenträgers. Nach der erfolgreichen Installation gelangt man mittels

quit

wieder auf das normale System. Als Test kann bei einem Neustart des Systems per BIOS die Diskette als erstes Bootmedium gewählt werden. Wenn alles geklappt hat, startet das System nun von der Bootdiskette.

Fazit:

GRUB ist mächtig, keine Frage. Er bietet mehr Funktionen als LiLo und lässt sich auch einrichten, wenn die Linux-Partition nicht mehr erreichbar ist. Zu Recht setzen immer mehr Distributionen auf GRUB für die Bootverwaltung.

Das Beste an GRUB ist allerdings, dass er aktiv weiterentwickelt wird. Auch die Fertigstellung von GRUB 2 rückt langsam näher. Für normale Anwender wird sich nicht viel ändern, allerdings verspricht der überarbeitete Code einen deutlich kompakteren und übersichtlicheren Bootloader.

Unter der Homepage des Projektes findet sich unter anderem ein Wiki in dem zukünftige Erweiterungen geplant sind. Erweitert werden soll in Zukunft die Zahl der unterstützten Dateisysteme. Auch soll GRUB mehr Loader, beispielsweise den von NetBSD, verwalten können. Zudem finden sich zusätzliche Features wie ein Playback für Journaling-Dateisysteme, eine Erweiterung der internen Kommandos oder eine bessere Installationsroutine auf der Todo-Liste der Entwickler. (mja)