13.3. Boot-Manager und Boot-Phasen

13.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 Boot-Manager: boot0 und LILO.

Der boot0 Boot-Manager: Der vom FreeBSD-Installationsprogramm oder boot0cfg(8) in der Voreinstelung installierte Master Boot Record (MBR) basiert auf /boot/boot0. Die Größe und Leistungsfähigkeit von boot0 ist auf 446 Bytes beschränkt, weil der restliche Platz für die Partitionstabelle sowie den 0x55AA-Identifier am Ende des MBRs benötigt wird. Wenn boot0 und mehrere Betriebssysteme installiert sind, wird beim Starten des Computers eine Anzeige ähnlich der folgenden zu sehen sein:

Beispiel 13.1. boot0-Screenshot
F1 Win
F2 FreeBSD

Default: F2

Diverse Betriebssysteme, insbesondere Windows®, überschreiben den existierenden MBR, wenn sie nach FreeBSD installiert werden. Falls dies passiert, kann mit folgendem Kommando der momentane MBR durch den FreeBSD-MBR ersetzt werden:

# 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. Um eine angepasste Konfiguration des MBR zu erstellen, lesen Sie boot0cfg(8).

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 muss die primäre Partition von FreeBSD sowie dessen Platte im Linux-Format angeben werden. Dazu wird X durch die Linux-Bezeichnung der Platte und Y durch die von Linux verwendete Partitionsnummer ersetzt. Für ein SCSI-Laufwerk wird /dev/sd anstelle von /dev/hd verwendet. 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 die Änderungen zu übernehmen. Achten Sie dabei besonders auf etwaige Fehlermeldungen.

13.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 in zwei Teile aufgeteilt, welche jedoch immer zusammen installiert werden. Beide werden entweder vom Installer oder von bsdlabel aus der kombinierten /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 13.2. boot2-Screenshot
>> FreeBSD/i386 BOOT
Default: 0:ad(0,a)/boot/loader
boot:

bsdlabel(8) kann dazu verwendet werden, dass installierte boot1 und boot2 zu ersetzen:

# bsdlabel -B diskslice

Wobei diskslice 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 benutzt, wird bsdlabel(8) eine "dangerously dedicated disk" erstellen, ohne Slices. Das ist ein Zustand, den man meistens nicht hervorrufen möchte. Aus diesem Grund sollte man das diskslice von bsdlabel(8) noch einmal prüfen, bevor Return gedrückt wird.

13.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 interaktive Konfigurations-Schnittstelle mit eingebauten Befehlssatz sein, ergänzt durch einen umfangreichen Interpreter mit einem komplexeren Befehlssatz.

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

13.3.3.2. Die eingebauten Befehle des Loaders

Dies sind nur die gebräuchlichsten Befehle. Eine vollständige Beschreibung aller verfügbaren Befehle finden Sie in 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 allen gegebenen Optionen, oder dem angegebenen Kernelnamen. Das übergeben eines Kernelnamens ist nur nach einem unload-Befehl anwendbar, andernfalls wird der zuvor verwendete Kernel benutzt.

boot-conf

Bewirkt die automatische Konfiguration der Module, abhängig von den entsprechenden Variablen (üblicherweise kernel). Dies nur dann sinnvoll, wenn zuvor unload benutzt wurde.

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 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ößen 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.

13.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 den alten, oder einen anderen Kernel zu laden:

    unload
    load kernel.old

    Verwenden Sie kernel.GENERIC, um den allgemeinen Kernel zu bezeichnen, der vorinstalliert wird. kernel.old bezeichnet den Kernel, der vor dem System-Upgrade installiert war.

    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

13.3.3.4. Willkommmensbildschirme während des Bootvorgangs

Contributed by Joseph J. Barbish.
Übersetzt von Benedict Reuschling.

Der Willkommmensbildschirm erzeugt einen alternativen Boot-Bildschirm, der alle Bootmeldungen und Meldungen über startende Dienste bis zur Anzeige des Anmeldeprompts überdeckt.

Es existieren zwei grundlegende Umgebungen in FreeBSD. Die erste ist die altbekannte, auf virtuellen Konsolen basierte Kommandozeile. Nachdem das System den Bootvorgang abgeschlossen hat, wird ein Anmeldebildschirm auf der Konsole anzeigt. Die zweite Umgebung ist die graphische Umgebung von Xorg. In diesem Kapitel finden Sie weitere Informationen zur Installation und Konfiguration eines grafischen Display-Managers und Login-Managers.

13.3.3.4.1. Willkommensbildschirm-Funktionalität

Die Willkommensbildschirm-Funktionalität unterstützt 256-Farben in den Formaten Bitmap (.bmp), ZSoft PCX (.pcx) oder TheDraw (.bin). Die Willkommensbildschirm-Dateien dürfen eine Auflösung von 320 mal 200 Pixeln oder weniger besitzen, damit Standard-VGA Geräte damit arbeiten können.

Damit grössere Bilder bis zu einer maximalen Auflösung von 1024 mal 768 Pixeln verwendet werden können, muss das VESA Modul beim Systemstart geladen werden. Für einen angepassten Kernel muss die VESA-Kernelkonfigurationsoption eingefügt werden. VESA-Unterstützung ermöglicht es, einen Willkommensbildschirm als Vollbild auf dem gesamten Bildschirm anzuzeigen.

Wenn der Willkommensbildschirm beim Bootvorgang angezeigt wird, kann dieser jederzeit mit einem beliebigen Tastendruck ausgeschaltet werden.

Der Willkommensbildschirm ist standardmässig so eingestellt, dass er als Bildschirmschoner verwendet wird. Nach einer bestimmten Zeit der Untätigkeit wird der Willkommensbildschirm angezeigt und wechselt durch verschiedene Stufen der Intensität von hell zu einem sehr dunklen Bild und wieder zurück. Das Verhalten des Willkommensbildschirms kann durch hinzufügen einer saver=-Zeile in /etc/rc.conf geändert werden. Es gibt mehrere eingebaute Bildschirmschoner, die in splash(4) beschrieben werden. Die saver=-Option bezieht sich nur auf virtuelle Konsolen und hat keinen Effekt bei grafischen Display-Managern.

Ein paar Nachrichten des Bootloaders und ganz besonders das Menü mit den Bootoptionen und dem Warte-Countdown werden zur Bootzeit angezeigt, selbst wenn der Willkommensbildschirm aktiviert ist.

Dateien mit Beispiel-Willkommensbildschirmen können von der Galerie auf http://artwork.freebsdgr.org heruntergeladen werden. Durch die Installation des Ports sysutils/bsd-splash-changer können Willkommensbildschirme von einer zufällig ausgewählten Sammlung von Bildern bei jedem Neustart angezeigt werden.

13.3.3.4.2. Aktivieren der Willkommensbildschirm-Funktionalität

Die Willkommensbildschirm-Datei .bmp, .pcx oder .bin muss im Wurzelverzeichnis, z.B. /boot abgelegt werden.

Für die Standard-Auflösung von 256-Farben, 320 mal 200 Pixel oder weniger, bearbeiten Sie /boot/loader.conf, so dass diese die folgenden Zeilen enthält:

splash_bmp_load="YES"
bitmap_load="YES"
bitmap_name="/boot/splash.bmp"

Für grössere Video-Auflösungen bis zum Maximum von 1024 mal 768 Pixeln ändern Sie die Datei /boot/loader.conf, damit diese die folgenden Zeilen enthält:

vesa_load="YES"
splash_bmp_load="YES"
bitmap_load="YES"
bitmap_name="/boot/splash.bmp"

Dieses Beispiel geht davon aus, das /boot/splash.bmp als Willkommensbildschirm verwendet wird. Um eine PCX-Datei zu verwenden, benutzen Sie die folgenden Zeilen, inklusive der vesa_load="YES"-Zeile, abhängig von der Auflösung:

splash_pcx_load="YES"
bitmap_load="YES"
bitmap_name="/boot/splash.pcx"

Beginnend mit FreeBSD 8.3 gibt es die Option, ASCII-Art im TheDraw-Format zu benutzen.

splash_txt="YES"
bitmap_load="YES"
bitmap_name="/boot/splash.bin"

Der Dateiname ist nicht, wie im obigen Beispiel gezeigt, auf splash beschränkt. Es darf ein beliebiger Name sein, solange die Datei von einem der unterstützten Typen ist, beispielsweise splash_640x400.bmp oder bluewave.pcx.

Weitere interessante Optionen für loader.conf sind:

beastie_disable="YES"

Diese Option verhindert die Anzeige des Menüs mit den Bootoptionen, aber der Countdown ist immer noch aktiv. Selbst wenn das Bootmenü deaktiviert ist, kann während des Countdowns eine der korrespondierenden Optionen ausgewählt werden.

loader_logo="beastie"

Dies ersetzt die Standardanzeige des Wortes FreeBSD. Stattdessen wird auf der rechten Seite des Bootmenüs das bunte Beastie-Logo angezeigt.

Weitere Informationen finden Sie in splash(4), loader.conf(5) und vga(4).

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