Das FreeBSD-Handbuch
Zurück | Kapitel 12. FreeBSDs Bootvorgang | Weiter

# 12.3. Boot-Manager und Boot-Phasen

## 12.3.1. Der Boot-Manager

Der Code im MBR oder im Boot-Manager wird manchmal auch als stage zero des Boot-Prozesses bezeichnet. Dieser Abschnitt beschreibt zwei der weiter oben erwähnten Boot-Manager: boot0 sowie LILO.

Der boot0 Boot-Manager: Der vom FreeBSD-Installationsprogramm oder boot0cfg(8) in der Voreinstelung installierte Master Boot Record (MBR) basiert auf `/boot/boot0`. (Bei boot0 handelt es sich um ein sehr einfaches Programm, da im MBR lediglich 446 Bytes verfügbar sind, weil der restliche Platz für die Partitionstabelle sowie den `0x55AA`-Identifier am Ende des MBRs benötigt wird.) Falls Sie boot0 verwenden und mehrere Betriebssysteme auf Ihrer Festplatte installiert haben, werden Sie beim Starten des Computers eine Anzeige ähnlich der folgenden sehen:

Beispiel 12-1. `boot0`-Screenshot

    F1 DOS
    F2 FreeBSD
    F3 Linux
    F4 ??
    F5 Drive 1

    Default: F2

Diverse Betriebssysteme, insbesondere Windows®, überschreiben den MBR ungefragt mit ihrem eigenen. Falls einem dies passiert sein sollte, kann man mit folgendem Kommando den momentanen MBR durch den FreeBSD-MBR ersetzen:

    # fdisk -B -b /boot/boot0 Gerät

Bei `Gerät` handelt es sich um das Gerät, von dem gebootet wird, also beispielsweise `ad0` für die erste IDE-Festplatte, `ad2` für die erste IDE-Festplatte am zweiten IDE-Controller, `da0` für die erste SCSI-Festplatte, usw. Diese Einstellungen können aber über boot0cfg(8) angepasst werden.

Der LILO-Boot-Manager: Damit dieser Boot-Manager auch FreeBSD booten kann, starten Sie zuerst Linux und fügen danach folgende Zeilen in die Konfigurationsdatei `/etc/lilo.conf` ein:

    other=/dev/hdXY
    table=/dev/hdX
    loader=/boot/chain.b
    label=FreeBSD

Dabei müssen Sie die primäre Partition von FreeBSD sowie dessen Platte im Linux-Format angeben. Dazu ersetzen Sie `X` durch die Linux-Bezeichnung der Platte und `Y` durch die von Linux verwendete Partitionsnummer. Wenn Sie ein SCSI-Laufwerk verwenden, müssen Sie `/dev/sd` anstelle von `/dev/hd` verwenden. Die Zeile `loader=/boot/chain.b` kann weggelassen werden, wenn beide Betriebssysteme auf der gleichen Platte installiert sind. Geben Sie danach `/sbin/lilo -v` ein, um Ihre Änderungen zu übernehmen. Achtung Sie dabei besonders auf etwaige Fehlermeldungen.

## 12.3.2. Phase Eins, `/boot/boot1` und Phase Zwei, `/boot/boot2`

Im Prinzip sind die erste und die zweite Phase Teile desselben Programms, im selben Bereich auf der Festplatte. Aufgrund von Speicherplatz-Beschränkungen wurden sie aufgeteilt, aber man installiert sie eigentlich generell zusammen. Beide werden entweder vom Installer oder von bsdlabel aus der kombinierten Datei `/boot/boot` kopiert.

Beide Phasen befinden sich außerhalb des Dateisystems im Bootsektor des Boot-Slices, wo boot0 oder ein anderer Boot-Manager ein Programm erwarten, das den weiteren Bootvorgang durchführen kann. Die Anzahl der dabei verwendeten Sektoren wird durch die Größe von `/boot/boot` bestimmt.

`boot1` ist ein sehr einfaches Programm, da es nur 512 Bytes groß sein darf, und es besitzt gerade genug Funktionalität, um FreeBSDs bsdlabel, das Informationen über den Slice enthält, auszulesen, und um `boot2` zu finden und auszuführen.

`boot2` ist schon ein wenig umfangreicher und besitzt genügend Funktionalität, um Dateien in FreeBSDs Dateisystem zu finden. Außerdem hat es eine einfache Schnittstelle, die es ermöglicht, den zu ladenden Kernel oder Loader auszuwählen.

Da der Loader einen weitaus größeren Funktionsumfang hat und eine schöne und einfach zu bedienende Boot-Konfigurations-Schnittstelle zur Verfügung stellt, wird er gewöhnlich von `boot2` anstatt des Kernels gestartet. Früher war es jedoch dazu da den Kernel direkt zu starten.

Beispiel 12-2. `boot2`-Screenshot

    >> FreeBSD/i386 BOOT
    Default: 0:ad(0,a)/boot/loader
    boot:

Um das installierte `boot1` und `boot2` zu ersetzen, benutzt man bsdlabel(8):

    # bsdlabel -B diskslice

Wobei `Slice` das Laufwerk und die Slice darstellt, von dem gebootet wird, beispielsweise `ad0s1` für die erste Slice auf der ersten IDE-Festplatte.

> Dangerously Dedicated Mode: Wenn man nur den Festplatten-Namen, also z.B. `ad0`, in bsdlabel(8) benutzt wird eine "dangerously dedicated disk" erstellt, ohne Slices. Das ist ein Zustand, den man meistens nicht hervorrufen möchte. Aus diesem Grund sollte man ein bsdlabel(8)-Kommando noch einmal prüfen, bevor man Return betätigt.

## 12.3.3. Phase drei, `/boot/loader`

Der boot-loader ist der letzte von drei Schritten im Bootstrap Prozess und kann im Dateisystem normalerweise unter `/boot/loader` gefunden werden.

Der Loader soll eine benutzerfreundliche Konfigurations-Schnittstelle sein mit einem einfach zu bedienenden eingebauten Befehlssatz, ergänzt durch einen umfangreichen Interpreter mit einem komplexeren Befehlssatz.

### 12.3.3.1. Loader Ablauf

Der Loader sucht während seiner Initialisierung nach Konsolen und Laufwerken, findet heraus, von welchem Laufwerk er gerade bootet und setzt dementsprechend bestimmte Variablen. Dann wird ein Interpreter gestartet, der Befehle interaktiv oder von einem Skript empfangen kann.

Danach liest der Loader die Datei `/boot/loader.rc` aus, welche ihn standardmäßig anweist `/boot/defaults/loader.conf` zu lesen, wo sinnvolle Standardeinstellungen für diverse Variablen festgelegt werden und wiederum `/boot/loader.conf` für lokale Änderungen an diesen Variablen ausgelesen wird. Anschließend arbeitet dann `loader.rc` entsprechend dieser Variablen und lädt die ausgewählten Module und den gewünschten Kernel.

In der Voreinstellung wartet der Loader 10 Sekunden lang auf eine Tastatureingabe und bootet den Kernel, falls keine Taste betätigt wurde. Falls doch eine Taste betätigt wurde wird dem Benutzer eine Eingabeaufforderung angezeigt. Sie nimmt einen einfach zu bedienenden Befehlssatz entgegen, der es dem Benutzer erlaubt, Änderungen an Variablen vorzunehmen, Module zu laden, alle Module zu entladen oder schließlich zu booten bzw. neu zu booten.

### 12.3.3.2. Die eingebauten Befehle des Loaders

Hier werden nur die gebräuchlichsten Befehle bearbeitet. Für eine erschöpfende Diskussion aller verfügbaren Befehle konsultieren Sie bitte loader(8).

autoboot `Sekunden`

  Es wird mit dem Booten des Kernels fortgefahren, falls keine Taste in der gegebenen Zeitspanne betätigt wurde. In der gegebenen Zeitspanne, Vorgabe sind 10 Sekunden, wird ein Countdown angezeigt.

boot [`-options`] [`Kernelname`]

  Bewirkt das sofortige Booten des Kernels mit den gegebenen Optionen, falls welche angegeben wurden, und mit den angegebenen Kernel, falls denn einer angegeben wurde.

boot-conf

  Bewirkt die automatische Konfiguration der Module, abhängig von den entsprechenden Variablen. Dieser Vorgang ist identisch zu dem Vorgang, den der Bootloader ausführt und daher nur sinnvoll, wenn zuvor `unload` benutzt wurde und Variablen (gewöhnlich `kernel`) verändert wurden.

help [`Thema`]

  Zeigt die Hilfe an, die zuvor aus der Datei `/boot/loader.help` gelesen wird. Falls `index` als Thema angegeben wird, wird die Liste der zur Verfügung stehenden Hilfe-Themen angezeigt.

include `Dateiname` ...

  Verarbeitet die angegebene Datei. Das Einlesen und Interpretieren geschieht Zeile für Zeile und wird im Falle eines Fehlers umgehend unterbrochen.

load [`-t` `Typ`] `Dateiname`

  Lädt den Kernel, das Kernel-Modul, oder die Datei des angegebenen Typs. Optionen, die auf den Dateinamen folgen, werden der Datei übergeben.

ls [`-l`] [`Pfad`]

  Listet die Dateien im angegebenen Pfad auf, oder das root-Verzeichnis(/), falls kein Pfad angegeben wurde. Die Option `-l` bewirkt, dass die Dateigrössen ebenfalls angezeigt werden.

lsdev [`-v`]

  Listet alle Geräte auf, für die Module geladen werden können. Die Option `-v` bewirkt eine detailreichere Ausgabe.

lsmod [`-v`]

  Listet alle geladenen Module auf. Die Option `-v` bewirkt eine detailreichere Ausgabe.

more `Dateiname`

  Zeigt den Dateinhalt der angegebenen Datei an, wobei eine Pause alle `LINES` Zeilen gemacht wird.

reboot

  Bewirkt einen umgehenden Neustart des Systems.

set `Variable`, set `Variable`=`Wert`

  Setzt die Umgebungsvariablen des Loaders.

unload

  Entlädt sämtliche geladenen Module.

### 12.3.3.3. Beispiele für die Loader Bedienung

Hier ein paar praktische Beispiele für die Bedienung des Loaders.

- Um den gewöhnlichen Kernel im Single-User Modus zu starten:

      boot -s

- Um alle gewöhnlichen Kernelmodule zu entladen und dann nur den alten (oder jeden beliebigen anderen) Kernel zu laden:

      unload
      load kernel.old

  Es kann `kernel.GENERIC` verwendet werden, um den allgemeinen, Kernel zu bezeichnen, der vorinstalliert wird. `kernel.old` bezeichnet den Kernel, der vor dem aktuellen installiert war (falls man einen neuen Kernel compiliert und installiert hat, zum Beispiel).

  > Anmerkung: Der folgende Befehl lädt die gewöhnlichen Module mit einem anderen Kernel:

  >     unload
  >     set kernel="kernel.old"
  >     boot-conf

- Folgendes lädt ein Kernelkonfigurations-Skript (ein automatisiertes Skript, dass dasselbe tut, was der Benutzer normalerweise von Hand an der Eingabeaufforderung durchführen würde):

      load -t userconfig_script /boot/kernel.conf

Zurück | Zum Anfang | Weiter
Das Problem des Bootens | Nach oben | Kernel Interaktion während des Bootprozesses

Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an <de-bsd-questions@de.FreeBSD.org>.
Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an <de-bsd-translators@de.FreeBSD.org>.