12.3. Der MBR, und die Boot-Phasen Eins, Zwei und Drei

12.3.1. Der MBR, /boot/boot0

Eine Kopie des Master Boot Records (MBR) von FreeBSD befindet sich in /boot/boot0. Der richtige MBR wird in einem nicht benutzbaren Teil des Laufwerks gespeichert.

boot0 ist ein ziemlich simples Programm, und zwar aus dem einfachen Grund, dass der MBR nur 512 Bytes groß sein darf. Falls Sie den FreeBSD-MBR installiert haben und sich mehrere Betriebssysteme auf Ihrer Festplatte befinden, werden Sie beim Starten des Computers eine Anzeige sehen, ähnlich der Folgenden:

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

Wobei Gerät das Gerät ist, von dem gebootet wird, also z.B. 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.

Wenn Sie auf demselben Rechner FreeBSD und Linux benutzen möchten, können Sie den FreeBSD-Bootmanager oder LILO benutzen. Wollen Sie den MBR von LILO benutzen, wählen Sie bei der FreeBSD-Installation im Bootmanager Menü Leave The Master Boot Record Untouched aus. Damit Sie das FreeBSD-System aus LILO booten können, tragen Sie in /etc/lilo.conf die folgenden Zeilen ein:

other=/dev/diskXY
table=/dev/diskX
loader=/boot/chain.b
label=FreeBSD

Ersetzen Sie dabei diskXY mit hdXY, wenn Sie ein IDE-Laufwerk benutzen, oder mit sdXY, wenn Sie ein SCSI-Laufwerk benutzen. Mit XY geben Sie die Slice des FreeBSD Systems, zum Beispiel /dev/hdb1, an. Wenn sich beide Betriebssysteme auf derselben Platte befinden, können Sie loader=/boot/chain.b auch weglassen. Mit table geben Sie das Gerät an, auf dem die Partitionstabelle liegt, /dev/hdb bezeichnet zum Beispiel das zweite IDE-Laufwerk. Die Änderungen können Sie nun mit /sbin/lilo -v aktivieren. Achten Sie dabei auf die Bildschirmausgabe, die den Erfolg der Operation anzeigt.

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.

Sie befinden sich beide im Bootsektor des Boot-Slices, wo boot0 und jedes andere Programm im MBR das Programm erwartet, das den weiteren Bootvorgang durchführt. Die Dateien im Verzeichnis /boot sind nur Kopien der eigentlichen Dateien, die sich außerhalb FreeBSDs Dateisystems befinden.

boot1 ist ebenfalls ein sehr simples Programm, da es auch nur 512 Bytes groß sein darf, und es besitzt gerade genug Funktionalität um FreeBSDs disklabel, das Informationen über den Slice enthält, auszulesen 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)/kernel
boot:

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

# disklabel -B Slice

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 disklabel(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 disklabel(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
    

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>.