Zum Inhalt springenZur Seitennavigation springen: vorherige Seite [Zugriffstaste p]/nächste Seite [Zugriffstaste n]
Navigation
Bezieht sich auf SUSE Linux Enterprise Server 15

10 Einführung in den Bootvorgang

Das Booten eines Linux-Systems umfasst verschiedene Komponenten und Tasks. Die Hardware selbst wird vom BIOS oder dem UEFI initialisiert, das den Kernel mithilfe eines Bootloaders startet. Anschließend wird der Bootvorgang vollständig vom Betriebssystem gesteuert und über systemd abgewickelt. systemd bietet eine Reihe von Zielen, mit denen Konfigurationen für den normalen Gebrauch, für Wartungsarbeiten oder für Notfälle gebootet werden.

10.1 Der Linux-Bootvorgang

Der Linux-Bootvorgang besteht aus mehreren Phasen, von denen jede einer anderen Komponente entspricht. In der folgenden Liste werden der Bootvorgang und die daran beteiligten Komponenten kurz zusammengefasst:

  1. BIOS/UEFI.  Nach dem Einschalten des Computers initialisiert das BIOS oder das UEFI den Bildschirm und die Tastatur und testet den Hauptspeicher. Bis zu dieser Phase greift der Computer nicht auf Massenspeichergeräte zu. Anschließend werden Informationen zum aktuellen Datum, zur aktuellen Uhrzeit und zu den wichtigsten Peripheriegeräten aus den CMOS-Werten geladen. Wenn die erste Festplatte und deren Geometrie erkannt wurden, geht die Systemkontrolle vom BIOS an den Bootloader über. Wenn das BIOS Netzwerk-Booting unterstützt, ist es auch möglich, einen Boot-Server zu konfigurieren, der den Bootloader bereitstellt. Auf AMD64-/Intel-64-Systemen ist PXE-Boot erforderlich. Andere Architekturen verwenden meist das BOOTP-Protokoll, um den Bootloader abzurufen. Weitere Informationen zu UEFI finden Sie in Kapitel 11, UEFI (Unified Extensible Firmware Interface).

  2. Bootloader.  Der erste physische 512 Byte große Datensektor der ersten Festplatte wird in den Arbeitsspeicher geladen und der Bootloader, der sich am Anfang dieses Sektors befindet, übernimmt die Steuerung. Die vom Bootloader ausgegebenen Befehle bestimmen den verbleibenden Teil des Bootvorgangs. Aus diesem Grund werden die ersten 512 Byte auf der ersten Festplatte als Master Boot Record (MBR) bezeichnet. Der Bootloader übergibt die Steuerung anschließend an das eigentliche Betriebssystem, in diesem Fall an den Linux-Kernel. Weitere Informationen zu GRUB 2, dem Linux-Bootloader, finden Sie unter Kapitel 12, Der Bootloader GRUB 2. Bei einem Netzwerk-Boot fungiert das BIOS als Bootloader. Es erhält das Boot-Image vom Boot-Server und startet das System. Dieser Vorgang ist vollständig unabhängig von den lokalen Festplatten.

    Wenn beim Einhängen des Root-Dateisystems in der Bootumgebung ein Fehler auftritt, muss es überprüft und repariert werden, bevor das Booten fortgesetzt werden kann. Die Dateisystemprüfung wird für Ext3- und Ext4-Dateisysteme automatisch gestartet. Der Reparaturvorgang findet für XFS- und Btrfs-Dateisysteme nicht automatisch statt und dem Benutzer werden Informationen angezeigt, die die verfügbaren Optionen zur Reparatur des Dateisystems beschreiben. Wenn das Dateisystem erfolgreich repariert wurde, versucht das System nach dem Beenden der Bootumgebung erneut, das Root-Dateisystem einzuhängen. Falls dieser Vorgang erfolgreich ist, wird der Bootvorgang wie gewohnt fortgesetzt.

  3. Kernel und initramfs Um die Systemsteuerung zu übergeben, lädt der Bootloader sowohl den Kernel als auch ein initiales RAM-basiertes Dateisystem (das initramfs) in den Arbeitsspeicher. Die Inhalte der Datei initramfs können direkt vom Kernel verwendet werden. initramfs enthält eine kleine ausführbare Datei mit der Bezeichnung init, die das Einhängen des echten Root-Dateisystems übernimmt. Spezielle Hardware-Treiber für den Zugriff auf den Massenspeicher müssen in initramfs vorhanden sein. Weitere Informationen zu initramfs finden Sie unter Abschnitt 10.2, „initramfs. Wenn das System über keine lokale Festplatte verfügt, muss initramfs das Root-Dateisystem für den Kernel bereitstellen. Dies kann mithilfe eines Netzwerkblockgeräts, wie iSCSI oder SAN, bewerkstelligt werden, es kann aber auch NFS als Root-Gerät eingesetzt werden.

    Anmerkung
    Anmerkung: Die init-Vorgänge

    Derzeit gibt es zwei unterschiedliche Programme mit dem Namen init:

    1. der initramfs-Vorgang, mit dem das Root-Dateisystem eingehängt wird

    2. der Betriebssystemvorgang, mit dem das System eingerichtet wird

    Die beiden Vorgänge werden in diesem Kapitel daher als init unter initramfs bzw. systemd bezeichnet.

  4. init unter initramfs Dieses Programm führt alle erforderlichen Aktionen aus, mit denen das eigentliche Root-Dateisystem eingehängt wird. Es bietet Kernel-Funktionen für das benötigte Dateisystem sowie Gerätetreiber für Massenspeicher-Controller mit udev. Nachdem das Root-Dateisystem gefunden wurde, wird es auf Fehler geprüft und eingehängt. Wenn dieser Vorgang erfolgreich ist, wird das initramfs bereinigt, und der systemd-Daemon wird für das Root-Dateisystem ausgeführt. Weitere Informationen zu init unter initramfs finden Sie unter Abschnitt 10.3, „init unter initramfs. Weitere Informationen zu udev finden Sie in Kapitel 22, Gerätemanagement über dynamischen Kernel mithilfe von udev.

  5. systemd systemd wickelt das eigentliche Booten des Systems ab; hierzu werden Dienste gestartet und Dateisysteme eingehängt. systemd wird in Kapitel 13, Der Daemon systemd beschrieben.

10.2 initramfs

initramfs ist ein kleines cpio-Archiv, das der Kernel auf einen RAM-Datenträger laden kann. Es stellt eine minimale Linux-Umgebung bereit, die das Ausführen von Programmen ermöglicht, bevor das eigentliche Root-Dateisystem eingehängt wird. Diese minimale Linux-Umgebung wird durch eine BIOS- oder UEFI-Routine in den Arbeitsspeicher geladen, wobei lediglich ausreichend Arbeitsspeicher zur Verfügung stehen muss; ansonsten gelten keine besonderen Anforderungen. Das initramfs-Archiv must stets eine ausführbare Datei mit der Bezeichnung init umfassen, die den systemd-Daemon auf dem Root-Dateisystem ausführt, so dass der Bootvorgang fortgesetzt werden kann.

Bevor das Root-Dateisystem eingehängt und das Betriebssystem gestartet werden kann, ist es für den Kernel erforderlich, dass die entsprechenden Treiber auf das Gerät zugreifen, auf dem sich das Root-Dateisystem befindet. Diese Treiber können spezielle Treiber für bestimmte Arten von Festplatten oder sogar Netzwerktreiber für den Zugriff auf ein Netzwerk-Dateisystem umfassen. Die erforderlichen Module für das Root-Dateisystem können mithilfe von init oder initramfs geladen werden. Nachdem die Module geladen wurden, stellt udev das initramfs mit den erforderlichen Geräten bereit. Später im Boot-Vorgang, nach dem Ändern des Root-Dateisystems, müssen die Geräte regeneriert werden. Hierzu wird die systemd-Einheit udev.service mit dem Kommando udevtrigger verwendet.

Wenn Hardwarekomponenten (z. B. Festplatten) ausgetauscht werden müssen und diese Hardware zur Bootzeit andere Treiber im Kernel erfordert, müssen Sie die Datei initramfs aktualisieren. Dies erfolgt durch Aufruf von dracut -f (durch -f wird die bestehende initramfs-Datei überschrieben). Zum Hinzufügen eines Treibers für die neue Hardware müssen Sie der Datei /etc/dracut.conf.d/01-dist.conf folgende Zeile hinzufügen. Wenn die Datei nicht vorhanden ist, erstellen Sie sie.

force_drivers+="DRIVER1"

Ersetzen Sie dabei DRIVER1 durch den Modulnamen des Treibers. Sie können auch mehrere Treiber hinzufügen. In diesem Fall geben Sie eine durch Leerzeichen getrennte Liste der Modulnamen ein (TREIBER1 TREIBER2).

Wichtig
Wichtig: Aktualisieren von initramfs oder init

Der Bootloader lädt initramfs oder init auf dieselbe Weise wie den Kernel. Es ist nicht erforderlich, GRUB 2 nach der Aktualisierung von initramfs oder init neu zu installieren, da GRUB 2 beim Booten das Verzeichnis nach der richtigen Datei durchsucht.

Tipp
Tipp: Ändern der Kernel-Variablen

Wenn Sie die Werte von Kernel-Variablen über die sysctl-Benutzeroberfläche ändern und dabei die zugehörigen Dateien ändern (/etc/sysctl.conf oder /etc/sysctl.d/*.conf), geht die Änderung beim nächsten Neubooten des Systems verloren. Die Änderungen werden selbst dann nicht in der initramfs-Datei gespeichert, wenn Sie die Werte zur Laufzeit mit sysctl --system laden. Sie müssen die Datei mit dracut -f aktualisieren. (Durch -f wird die bestehende initramfs-Datei überschrieben.)

10.3 init unter initramfs

Der Hauptzweck von init unter initramfs ist es, das Einhängen des eigentlichen Root-Dateisystems sowie die Vorbereitung des Zugriffs darauf. Je nach aktueller Systemkonfiguration ist init unter initramfs für die folgenden Tasks verantwortlich.

Laden der Kernelmodule

Je nach Hardware-Konfiguration sind für den Zugriff auf die Hardware-Komponenten des Computers (vor allem auf die Festplatte) spezielle Treiber erforderlich. Für den Zugriff auf das eigentliche Root-Dateisystem muss der Kernel die entsprechenden Dateisystemtreiber laden.

Bereitstellen von speziellen Blockdateien

Der Kernel generiert Geräteereignisse für alle geladenen Module. udev verarbeitet diese Ereignisse und generiert die erforderlichen blockspezifischen Dateien auf einem RAM-Dateisystem im Verzeichnis /dev. Ohne diese speziellen Dateien wäre ein Zugriff auf das Dateisystem und andere Geräte nicht möglich.

Verwalten von RAID- und LVM-Setups

Wenn Ihr System so konfiguriert ist, dass das Root-Dateisystem sich unter RAID oder LVM befindet, richtet init unter initramfs LVM oder RAID so ein, dass der Zugriff auf das Root-Dateisystem zu einem späteren Zeitpunkt erfolgt.

Soll die /usr- oder swap-Partition direkt ohne die Hilfe von YaST geändert werden, sind weitere Aktionen erforderlich. Wenn Sie diese Schritte vergessen, startet Ihr System im Notfallmodus. Um das Starten im Notfallmodus zu verhindern, führen Sie die folgenden Schritte aus:

Prozedur 10.1: Aktualisieren des ursprünglichen RAM-Datenträgers beim Umschalten auf logische Volumes
  1. Bearbeiten Sie den entsprechenden Eintrag in der Datei /etc/fstab und ersetzen Sie Ihre vorherigen Partitionen mit dem logischen Volume.

  2. Führen Sie folgende Kommandos aus:

    root # mount -a
    root # swapon -a
  3. Regenerieren Sie Ihren ursprünglichen RAM-Datenträger (initramfs) mit mkinitrd oder dracut.

  4. Führen Sie für IBM Z zusätzlich grub2-install aus.

Weitere Informationen über RAID und LVM finden Sie im Kapitel 9, Festplatte vorbereiten: Expertenmodus.

Verwalten von Netzwerkkonfigurationen

Wenn Ihr System für die Verwendung eines netzwerkeingehängten Root-Dateisystems (über NFS eingehängt) konfiguriert ist, muss init unter initramfs sicherstellen, dass die entsprechenden Netzwerktreiber geladen und für den Zugriff auf das Root-Dateisystem eingerichtet werden.

Wenn sich das Dateisystem auf einem Netzwerkblockgerät wie iSCSI oder SAN befindet, wird die Verbindung zum Speicherserver ebenfalls von init unter initramfs eingerichtet. SUSE Linux Enterprise Server unterstützt das Booten von einem sekundären iSCSI-Ziel, wenn das primäre Ziel nicht verfügbar ist. Weitere Details zur Konfiguration des Boot-iSCSI-Ziels finden Sie im Section 14.3.1, “Using YaST for the iSCSI Initiator Configuration”.

Wenn init unter initramfs im Rahmen des Installationsvorgangs während des anfänglichen Boot-Vorgangs aufgerufen wird, unterscheiden sich seine Tasks von den oben beschriebenen:

Suchen des Installationsmediums

Beim Starten des Installationsvorgangs lädt der Rechner einen Installations-Kernel und eine besondere init mit dem YaST-Installationsprogramm. Das YaST-Installationsprogramm wird in einem RAM-Dateisystem ausgeführt und benötigt Daten über den Speicherort des Installationsmediums, um auf dieses zugreifen und das Betriebssystem installieren zu können.

Initiieren der Hardware-Erkennung und Laden der entsprechenden Kernelmodule

Wie unter Abschnitt 10.2, „initramfs beschrieben, startet der Boot-Vorgang mit einem Mindestsatz an Treibern, die für die meisten Hardwarekonfigurationen verwendet werden können. init startet einen anfänglichen Hardware-Scan-Vorgang, bei dem die für die Hardwarekonfiguration geeigneten Treiber ermittelt werden. Diese Treiber werden zur Erstellung der zum Booten des Systems benötigten, benutzerdefinierten initramfs-Datei verwendet. Falls die Module nicht für "boot", sondern für "coldplug" benötigt werden, können sie mit systemd geladen werden. Weitere Informationen finden Sie unter Abschnitt 13.6.4, „Laden der Kernelmodule“.

Laden des Installationssystems

Wenn die Hardware ordnungsgemäß erkannt wurde, werden die entsprechenden Treiber geladen. Das udev-Programm erstellt die speziellen Gerätedateien, und init startet das Installationssystem mit dem YaST-Installationsprogramm.

Starten von YaST

init startet schließlich YaST, das wiederum die Paketinstallation und die Systemkonfiguration startet.

Diese Seite drucken