Kapitel 28. Booten und Konfigurieren eines Linux-Systems

Inhaltsverzeichnis

28.1. Der Linux-Boot-Vorgang
28.2. Der init-Vorgang
28.3. Systemkonfiguration über /etc/sysconfig

Zusammenfassung

Das Booten eines Linux-Systems umfasst mehrere unterschiedliche Komponenten. In diesem Kapitel werden die zu Grunde liegenden Prinzipien erläutert und die beteiligten Komponenten vorgestellt. Außerdem werden in diesem Kapitel das Konzept der Runlevel sowie die Systemkonfiguration von SUSE mit sysconfig vorgestellt.

28.1. Der Linux-Boot-Vorgang

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

  1. BIOS.  Nach dem Einschalten des Computers initialisiert das BIOS den Bildschirm und die Tastatur und testet den Arbeitsspeicher. 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 Systemsteuerung vom BIOS an den Bootloader über.

  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 Boot-Vorgangs. 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, dem Linux-Bootloader, finden Sie unter Kapitel 29, Der Bootloader.

  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. Der Inhalt des initramfs kann vom Kernel direkt verwendet werden. Das initramfs enthält eine kleine Programmdatei namens "init", die das Mounten des eigentlichen Root-Dateisystems ausführt. In früheren Versionen von SUSE Linux wurden diese Tasks von "initrd" bzw. "linuxrc" durchgeführt. Weitere Informationen zu initramfs finden Sie unter Abschnitt 28.1.1, „initramfs“.

  4. init on initramfs.  Dieses Programm führt alle für das Mounten des entsprechenden Root-Dateisystems erforderlichen Aktionen aus, z. B. das Bereitstellen der Kernel-Funktionalität für die erforderlichen Dateisystem- und Gerätetreiber der Massenspeicher-Controller. Nachdem das Root-Dateisystem gefunden wurde, wird es auf Fehler geprüft und gemountet. Wenn dieser Vorgang erfolgreich abgeschlossen wurde, wird das initramfs bereinigt und das init-Programm wird für das Root-Dateisystem ausgeführt. Weitere Informationen zum init-Programm finden Sie in Abschnitt 28.1.2, „init on initramfs“.

  5. init.  Das init-Programm führt den eigentlichen Boot-Vorgang des Systems über mehrere unterschiedliche Ebenen aus und stellt dabei die unterschiedlichen Funktionalitäten zur Verfügung. Eine Beschreibung des init-Programms finden Sie in Abschnitt 28.2, „Der init-Vorgang“.

28.1.1. initramfs

initramfs ist ein kleines Dateisystem, das der Kernel in 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 gemountet wird. Diese minimale Linux-Umgebung wird von BIOS-Routinen in den Arbeitsspeicher geladen und hat, abgesehen von ausreichend Arbeitsspeicher, keine spezifischen Hardware-Anforderungen. initramfs muss immer eine Programmdatei namens "init" zur Verfügung stellen, die das eigentliche init-Programm für das Root-Dateisystem ausführt, damit der Boot-Vorgang fortgesetzt werden kann.

Bevor das eigentliche Root-Dateisystem gemountet 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 von init unter initramfs geladen werden. initramfs ist während des gesamten Boot-Vorgangs verfügbar. Dies ermöglicht, dass alle während des Boot-Vorgangs generierten HotPlug-Ereignisse verarbeitet werden können.

Wenn in einem installierten System Hardwarekomponenten (Festplatten) ausgetauscht werden müssen und diese Hardware zur Boot-Zeit andere Treiber im Kernel erfordert, müssen Sie das initramfs aktualisieren. Dies erfolgt auf dieselbe Weise wie die Aktualisierung des Vorgängers von initramfs, initrd, nämlich durch den Aufruf von mkinitrd. Durch das Aufrufen von mkinitrd ohne Argumente wird ein initramfs erstellt. Durch das Aufrufen von mkinitrd -R wird ein initrd erstellt. In SUSE Linux werden die zu ladenden Module durch die Variable INITRD_MODULES in /etc/sysconfig/kernel angegeben. Diese Variable wird nach der Installation automatisch auf den richtigen Wert gesetzt. Die Module werden genau in der Reihenfolge geladen, in der sie in INITRD_MODULES erscheinen. Dies ist besonders wichtig, wenn mehrere SCSI-Treiber verwendet werden, da anderenfalls die Namen der Festplatten geändert würden. Genau genommen wäre es ausreichend, nur die für den Zugriff auf das Root-Dateisystem erforderlichen Treiber zu laden. Es werden jedoch alle für die Installation erforderlichen SCSI-Treiber mit initramfs oder initrd geladen, da das Laden zu einem späteren Zeitpunkt problematisch sein könnte.

[Important]Aktualisieren von initramfs oder initrd

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

28.1.2. init on initramfs

Der Hauptzweck von init unter initramfs ist es, das Mounten des eigentlichen Root-Dateisystems sowie den Zugriff darauf vorzubereiten. Je nach aktueller Systemkonfiguration ist init für die folgenden Tasks verantwortlich.

Laden der Kernel-Module

Je nach Hardwarekonfiguration sind für den Zugriff auf die Hardwarekomponenten 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.

Verwalten von RAID- und LVM-Setups

Wenn Ihr System so konfiguriert ist, dass das Root-Dateisystem sich unter RAID oder LVM befindet, richtet init LVM oder RAID so ein, dass der Zugriff auf das Root-Dateisystem zu einem späteren Zeitpunkt erfolgt. Informationen zu RAID finden Sie in Abschnitt 2.3, „Soft-RAID-Konfiguration“. Informationen zu LVM finden Sie in Abschnitt 2.2, „LVM-Konfiguration“.

Verwalten von Netzwerkkonfigurationen

Wenn Ihr System für die Verwendung eines Netzwerk-gemounteten Root-Dateisystems (über NFS gemountet) konfiguriert ist, muss init sicherstellen, dass die entsprechenden Netzwerktreiber geladen und für den Zugriff auf das Root-Dateisystem eingerichtet werden.

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

Suchen des Installationsmediums

Wenn Sie den Installationsvorgang starten, lädt Ihr Computer vom Installationsmedium einen Installations-Kernel und ein spezielles initrd mit dem YaST-Installationsprogramm. Das YaST-Installationsprogramm, das in einem RAM-Dateisystem ausgeführt wird, benötigt Daten über den aktuellen Speicherort des Installationsmediums, um auf dieses zugreifen und das Betriebssystem installieren zu können.

Initiieren der Hardware-Erkennung und Laden der entsprechenden Kernel-Module

Wie unter Abschnitt 28.1.1, „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 Werte werden später in die Variable INITRD_MODULES im Verzeichnis /etc/sysconfig/kernel geschrieben, um zu ermöglichen, dass alle nachfolgend Boot-Vorgänge eine benutzerdefinierte initrd verwenden. Während des Installationsvorgangs lädt init die entsprechenden Modulsätze.

Laden des Installations- oder Rettungssystems

Sobald die Hardware erfolgreich erkannt und die entsprechenden Treiber geladen wurden, startet init das Installationssystem, das das eigentliche YaST-Installationsprogramm bzw. das Rettungssystem enthält.

Starten von YaST

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