claim.gif
Linux Magazin Linux User Easy Linux Ubuntu User International Linux Community
Erschienen in EasyLinux 03/2005   »   Ausgabe bestellen

So funktioniert der Boot-Vorgang

Systemstart

von Carsten Schnober


Wie schafft es ein Betriebssystem eigentlich, mit der Hardware zu kommunizieren? Wir beschäftigen uns mit der Henne-und-Ei-Frage, wie ein frisch eingeschalteter Rechner zum ersten Programm kommt.

Einen Rechner mit einem Betriebssystem auszustatten, setzt heutzutage kaum noch tiefgehendes Expertenwissen voraus. Dabei ist es keineswegs trivial, Hardware und Software miteinander kommunizieren zu lassen. Die erste Hürde bildet der Start des Betriebssystems, damit eine solche Verständigung überhaupt stattfinden kann.

Denn im Vermitteln zwischen Hardware und Anwender-Software besteht die eigentliche Aufgabe des Betriebssystems. Doch stehen die Entwickler eines Betriebssystems seit jeher vor der Frage, wie sie einen Rechner dazu bringen, eben dieses überhaupt zu starten. Heutige PCs überbrücken den in diesem Bereich fließenden Übergang zwischen Hard- und Software mit Hilfe des "Basic Input-Output System" BIOS.

Startvorteil

Beim BIOS handelt es sich um ein kleines Programm, das nicht auf der Festplatte, sondern in einem eigenen Speicherchip auf dem Mainboard residiert. Beim Einschalten des Computers ermittelt dieses Programm die wichtigsten Hardware-Ressourcen wie Prozessor, Arbeitsspeicher, Tastatur, Grafikkarte sowie die Festplatten und CD-Laufwerke (Abbildung 1).

Abb. 1: Das BIOS ermöglicht die Kommunikation mit der wichtigsten Hardware.

Damit ermöglicht das BIOS eine erste Interaktion mit dem Benutzer. Er kann mit der Tastatur BIOS-Einstellungen vornehmen, darunter die Reihenfolge, in der es versuchen soll von den erkannten Laufwerken, ein Betriebssystem zu starten.

Entsprechend der in der BIOS-Einstellung vorgegebenen Boot-Reihenfolge (Abbildung 2) durchsucht das BIOS dann nacheinander die Laufwerke nach boot-fähigen Datenträgern. So lassen Sie das BIOS beispielsweise erst im Disketten- oder CD-Laufwerk nach einem startbaren Datenträger suchen. Findet es überhaupt kein oder kein startbares Medium, geht es weiter zur Festplatte. Dort befindet sich im Normalfall ein installiertes Betriebssystem, häufig auch mehrere. Ist noch kein Betriebssystem installiert und auch sonst kein boot-fähiger Datenträger auszumachen, bleibt das System mit einer Fehlermeldung stehen -- ohne Betriebssystem nützt auch die schönste Hardware nichts.

Abb. 2: In den BIOS-Einstellungen legt der Benutzer die Reihenfolge fest, in der boot-fähige Datenträger gesucht werden ("First Boot Device").

Auf einer startbaren Festplatte findet das BIOS im Master Boot Record (MBR) nähere Informationen. Das ist der erste Sektor der Platte, die ersten 512 Byte. Er enthält die Partitionstabelle (Abbildung 3), die die Anzahl und Größe der vorhandenen Partitionen verzeichnet. Daneben findet hier der Boot-Loader Platz.

Abb. 3: Die Partitionstabelle im Master Boot Record verzeichnet alle vorhandenen Partitionen und deren Größe.

Boot-Management

Beim Boot-Loader, oft auch Boot-Manager genannt, handelt es sich um ein Programm, das nichts anderes tut, als ein Betriebssystem zu laden. Kein Betriebssystem kann auf eine solche Software verzichten, auch wenn der Benutzer davon gewöhnlich nichts sieht. Aktuelle Windows-Versionen verwenden den von Windows NT stammenden NT-Loader, für Linux gibt es seit langem Lilo, den "Linux Loader", und den jüngeren Grub ("Grand Unified Bootloader").

Alle von EasyLinux unterstützten Linux-Distributionen außer Mandrake Linux verwenden inzwischen Grub, das sich seit seinem Entstehen langsam aber sicher als Standard-Boot-Loader für Linux durchsetzt. Auch Mandrake hatte bereits auf Grub umgestellt, sich aber wegen einem inzwischen behobenen Fehler in Grub entschieden, wieder auf Lilo zurückzugreifen. Eventuell werden zukünftige Mandrake-Versionen wieder Grub verwenden. Da sich beide aber im Alltag für den Benutzer kaum unterscheiden, besteht kein großer Bedarf zum erneuten Umstieg.

Gemeinsam haben alle Boot-Loader, dass sie sich im MBR einnisten, damit das BIOS sie dort beim Systemstart findet, um ihnen den Start eines Betriebssystems anzuvertrauen. Der begrenzte Platz im MBR beengt den Boot-Loader in seinen Möglichkeiten jedoch deutlich; an einen Treiber, der ein Dateisystem lesen könnte, ist innerhalb der 512 Byte nicht zu denken.

Deshalb führt nur ein Weg zum Betriebssystem-Kernel: Der Boot-Loader speichert im MBR statt Dateinamen mit Verzeichnis die Nummern der Blöcke, auf denen relevante Daten zu finden sind. Läuft bereits ein Betriebssystem, übersetzt ein Dateisystem eine Anfrage nach einer bestimmten Datei; es kennt den physikalischen Ort in Form eines Bereichs auf der Festplatte, in dem die Datei liegt. Diese Festplattenbereiche werden in durchnummerierte Blöcke unterteilt.

Da der Boot-Loader nicht auf das Dateisystem als Übersetzer zurückgreifen kann, speichert er im MBR selbst nur die Nummern der Blöcke, auf denen weitere Anweisungen zu finden sind. Auf diese Weise greift er ohne Dateisystemtreiber auf Daten überall auf der Festplatte zu.

Varianten

Im Detail lösen die verschiedenen Boot-Loader die Aufgabe, ein Betriebssystem zu starten, auf unterschiedliche Weisen. Lilo speichert im MBR direkt die Blocknummern eines oder mehrerer startbarer Kernels. Das zieht als Konsequenz nach sich, dass eine Änderung in der Lilo-Konfigurationsdatei (/etc/lilo.conf) zunächst keine Auswirkung hat; denn der MBR ändert sich dabei nicht.

Damit sich die neue Konfiguration auswirkt, etwa indem ein anderer Kernel startet oder der Benutzer andere Auswahlmöglichkeiten erhält, ist ein anschließender Aufruf von lilo nötig. Das Programm liest die Konfigurationsdatei ein, ermittelt die zu den angegebenen Dateinamen gehörigen Festplattenblöcke und schreibt diese Informationen in den MBR.

Ein anderes Verfahren wendet Grub an. Dieser Boot-Loader führt zum Systemstart zwei Schritte, Stage1 und Stage2, durch. Stage1 liegt ebenso wie Lilo im MBR. Dieser Programmteil enthält als weiterführende Informationen aber nicht die Festplattenblöcke der zu bootenden Kernel, sondern ausschließlich den physikalischen Ort von Stage2.

Da Stage2 wie jede andere Datei überall auf der Festplatte liegen kann, ist es nicht an die engen Grenzen des MBR gebunden. So verfügt es über Dateisystemtreiber für alle gängigen Linux-Dateisysteme und sogar für das Windows-Dateisystem FAT32 und erlaubt damit mehr Flexibilität als Lilo. Ist Stage2 geladen, kann Grub die im Dateisystem gepeicherte Konfigurationsdatei auslesen. Das bedeutet, dass Anpassungen darin keine Änderung am MBR voraussetzen: Stage1 zeigt weiterhin nur auf Stage2, das dann auf Dateisystemebene Konfigurationsdatei und Kernel erreicht.

Grub bietet außerdem eine eigene interaktive Kommandozeile, die Grub-Shell. Der Benutzer erreicht sie aus dem Grub-Menü heraus mit der Taste [C] und hat dann die Möglichkeit, Kernel manuell zum Booten auszuwählen, auch wenn diese nicht im Menü existieren. Das bietet bei fehlerhafter Konfiguration eine relativ umstandslose Möglichkeit, das Betriebssystem dennoch mit den gewünschten Parametern zu starten. Grub muss nur dann mit dem Befehl grub-install neu in den MBR installiert werden, wenn sich die Partition ändert, auf der Stage2 liegt.

Der Boot-Loader speichert also im MBR die wichtigsten Informationen, nämlich den physikalischen Ort auf der Festplatte, auf dem entweder der zu verwendende Kernel -- im Falle von Lilo -- oder, bei Grub, Stage2 liegt. Dieses Prinzip genügt aber nicht in allen Situationen. Wenn ein anderes Betriebssystem geladen werden soll, kann der Linux-Boot-Loader häufig nichts mit dessen spezifischen Daten anfangen.

Ketten bilden

Deshalb kann der Boot-Loader, statt selbst einen Betriebssystem-Kernel zu laden, diese Aufgabe nochmals weiterreichen. Für diesen Zweck gibt es neben dem MBR zu Beginn jeder Partition einen eigenen Partition Boot Record. Er erfüllt einen ähnlichen Zweck wie der MBR und hat auch dieselbe Größe, 512 Byte. Der Partition Boot Record kann wiederum einen Boot-Loader enthalten, jedoch nur zum Laden des auf der jeweiligen Partition befindlichen Betriebssystems.

Beim zuvor beschriebenen Standardverfahren zum Start eines Linux-Systems bleibt der Partition Boot Record leer. Soll der Boot-Loader des MBR auch anbieten, beispielsweise Windows zu starten, geschieht dies, indem er den Windows-Boot-Loader aufruft, der sich im Partition Boot Record der Windows-Partition befindet. Er erhält dann lediglich das Kommando, Windows zu starten. Diese Kette aus zwei nacheinander gestarteten Boot-Loader-Programmen (erst den im MBR, dann den im Partition Boot Record) nennt man Chainloading.

Das aufeinanderfolgende Laden zwei Boot-Loader funktioniert ebenso beim Starten beliebiger anderer Betriebssysteme. Bei Linux ist dies normalerweise unnötig, da der Linux-Boot-Loader verschiedene Linux-Kernel ohnehin direkt booten kann. Selbst bei einem System mit mehreren Linux-Installationen auf verschiedenen Partitionen kann ein Boot-Loader im MBR alle Kernel direkt laden. Die zu verwendende Root-Partition legt die Boot-Loader-Konfiguration zu jedem einzelnen Kernel fest.

Trotzdem gibt es die Möglichkeit, einen Linux-Boot-Loader, Lilo oder Grub, in den Partition Boot Record statt in den MBR zu installieren. So können beispielsweise die zahlreichen Boot-Loader-Programme dritter Anbieter Linux per Chainloading aufrufen.

Ohne Beilage

Microsoft-Windows-Boot-Loader werten zusätzlich einen Eintrag in der Partitionstabelle aus: das active flag. Der NT-Loader tut im MBR nichts anderes, als die damit als boot-fähig markierte Partition ausfindig zu machen und das in dieser Partition installierte Betriebssystem zu starten. Im entsprechenden Partition Boot Record stehen dann erst die Informationen darüber, wo der Windows-Kernel zu finden ist.

Zwar ignorieren die Linux-Boot-Loader das active flag, jedoch markiert eine Linux-Distribution üblicherweise trotzdem die erste Partition als aktiv. Denn viele BIOS-Versionen tun eine Festplatte ohne aktive Partition vorschnell als nicht boot-fähig ab.

Alles automatisch?

Im Idealfall benötigt das Einrichten auch aufwändiger Boot-Menüs mit vielen Auswahlmöglichkeiten bei modernen Linux-Distributionen kaum noch Interaktion mit dem Benutzer. Die Installationsroutinen erkennen bereits vorhandene Betriebssysteme und konfigurieren den Boot-Loader entsprechend. Fallen hier trotzdem Fragen an, beispielsweise ob der Boot-Loader im MBR oder im Partition Boot Record landen soll, kann eine falsche Antwort viel Arbeit und sogar Datenverlust nach sich ziehen. Das Konzept der Boot Records zu verstehen, beugt solchen Problemen vor. (csc)

Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links" nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedruckten Fassung entsprechen.

Druckerfreundliche Version | Feedback zu dieser Seite | Datenschutz | © 2012 Linux New Media AG | Last modified: 2007-04-05 11:10

[Linux-Magazin] [LinuxUser] [Linux-Community] [Admin-Magazin] [Ubuntu User] [Smart Developer] [Linux Events] [Linux Magazine] [Ubuntu User] [Admin Magazine] [Smart Developer] [Linux Magazine Poland] [Linux Community Poland] [Linux Magazine Brasil] [Linux Magazine Spain] [Linux Technical Review]