Kapitel 7. Ein Linux-System booten und konfigurieren

Inhaltsverzeichnis

7.1. Der Linux-Bootvorgang
7.2. Das init-Programm
7.3. Die Runlevel
7.4. Wechsel des Runlevels
7.5. Die Init-Skripten
7.6. System Services (Runlevel)
7.7. SuSEconfig und /etc/sysconfig
7.8. Der YaST Sysconfig-Editor

Zusammenfassung

Bei einem Linux-System ist der Bootvorgang ein komplexer Prozess, an dem viele Komponenten beteiligt sind, die alle reibungslos zusammenarbeiten müssen. Dieses Kapitel gibt eine Einführung in die zugrunde liegenden Mechanismen und die am Bootvorgang beteiligten Komponenten. Außerdem werden Sie mit dem Konzept von Runlevels sowie mit der Konfiguration eines SUSE-Systems mittels sysconfig vertraut gemacht.

7.1. Der Linux-Bootvorgang

Bei Linux besteht der Bootvorgang aus verschiedenen Stufen. Jede davon wird von einer bestimmten Komponente übernommen. Die folgende Aufzählung gibt einen Überblick über den Bootvorgang und eine kurze Beschreibung der daran beteiligten Hauptkomponenten.

  1. BIOS

    Nach dem Einschalten des Rechners werden vom BIOS Bildschirm und Tastatur initialisiert sowie der Hauptspeicher getestet. Massenspeichergeräte sind zu diesem Zeitpunkt noch nicht am Bootvorgang beteiligt. Zunächst werden Informationen über das aktuelle Datum, die Uhrzeit und die wichtigsten angeschlossenen Geräte aus den CMOS-Werten (CMOS Setup) ausgelesen. Wenn die erste Festplatte samt ihrer Geometrie bekannt ist, geht die Kontrolle über das System vom BIOS auf den Bootloader über.

  2. Bootloader

    Der physikalisch erste Datensektor von 512 Byte Größe wird von der ersten Festplatte in den Speicher geladen und das Programm (der Bootloader) am Anfang dieses Sektors übernimmt die Kontrolle. Die Abfolge der vom Bootloader ausgeführten Anweisungen bestimmt den weiteren Ablauf des Bootvorgangs. Die ersten 512 Byte auf der ersten Festplatte werden deshalb auch als Master Boot Record bezeichnet. Der Bootloader übergibt schließlich die Kontrolle an das eigentliche Betriebssystem, in unserem Falle also an den Linux-Kernel. Näheres zum Linux-Bootloader GRUB finden Sie in Kapitel 8, Der Bootloader.

  3. Kernel und initrd

    Neben dem Kernel wird außerdem die initrd in den Speicher geladen, das heißt eine virtuelle oder RAM-Disk zur Hardware-Initialisierung. Der Linux-Kernel kann nämlich noch vor dem Mounten der eigentlichen Root-Partition ein kleines Dateisystem in einer solchen RAM-Disk ansprechen, um dort bestimmte Programme auszuführen. Die initrd wird dazu vom Kernel entpackt und dann als temporäre Root-Partition gemountet. Der Inhalt dieses initrd-Dateisystems ist ein minimales Linux-System, dass ein Programm namens linuxrc enthält. Dieses Programm wird gestartet, bevor die eigentliche Root-Partition eingebunden wird. Nachdem linuxrc seine Aufgabe erfüllt hat, löscht der Kernel die gesamte initrd aus dem Speicher (falls dies möglich ist) und startet das Programm init. Weitere Informationen zur initrd finden Sie unter Abschnitt 7.1.1, „initrd“.

  4. linuxrc

    Dieses Programm führt alle Aktionen aus, die zum Mounten der eigentlichen Root-Partition erforderlich sind, wie die Bereitstellung von Kernel-Funktionen für das Dateisystem und Gerätetreiber für Massenspeicher-Controller. Nachdem die Root-Partition gemountet ist, beendet sich linuxrc, und der Kernel startet das Programm init. Weitere Informationen zu linuxrc finden Sie unter Abschnitt 7.1.2, „linuxrc“.

  5. init

    Dieses Programm ist für den eigentlichen Systemstart verantwortlich, bei dem eine Reihe von Funktionsebenen abgearbeitet werden. init wird unter Abschnitt 7.2, „Das init-Programm“ genauer beschrieben.

7.1.1. initrd

Bei initrd handelt es sich um ein kleines (üblicherweise komprimiertes) Dateisystem, das in eine RAM-Disk geladen und dann als temporäre Root-Partition eingebunden werden kann. Dieses minimale Linux-System wird von BIOS-Routinen in den Arbeitsspeicher geladen und hat keine speziellen Hardwareanforderungen außer dem Bedürfnis nach einem ausreichend großen Speicher. Die initrd muss immer ein Programm namens linuxrc bereitstellen, dass ohne Fehler abgeschlossen werden muss.

Bevor die Root-Partition eingebunden und das System gestartet werden kann, muss der Kernel über die entsprechenden Treiber verfügen, um Zugriff auf das Gerät zu erhalten, auf dem sich dieses Dateisystem befindet. Dies können spezielle Treiber für bestimmte Festplatten sein, aber auch Netzwerktreiber (denn es kann sich dabei auch um ein Netzwerk-Dateisystem handeln — siehe Vorbereitung des Netzwerks). Zusätzlich muss der Kernel über die Treiber zum Lesen des eigentlichen Dateisystems der initrd verfügen. Die für das Root-Dateisystem benötigten Module können von linuxrc geladen werden.

Eine initrd kann mit dem Skript mkinitrd erstellt werden. Bei SUSE LINUX werden die zu ladenden Treibermodule unter der Variablen INITRD_MODULES in der Datei /etc/sysconfig/kernel angegeben. Nach der Installation des Systems ist diese Variable bereits auf den korrekten Wert gesetzt (da linuxrc die während der Installation geladenen Treiber automatisch ermittelt und hier abspeichert). Die Treibermodule werden in genau der Reihenfolge geladen, in der sie unter INITRD_MODULES angegeben sind. Dies ist besonders dann von Belang, wenn mehrere SCSI-Treiber verwendet werden, denn nur mit der richtigen Reihenfolge kann man vermeiden, dass die Bezeichnungen von Festplatten vertauscht werden. Streng genommen müsste man zu diesem Zeitpunkt nur die Treiber laden, die für den Zugriff auf die Root-Partition notwendig sind. Tatsächlich werden jedoch alle für die Installation erforderlichen SCSI-Treiber schon mittels initrd geladen, denn ein späteres Laden solcher Treiber würde zu Problemen führen.

[Important]Aktualisierung der initrd

Der Bootloader lädt die initrd in der gleichen Weise wie den Kernel. Daher ist es nach einer Aktualisierung der initrd nicht erforderlich, GRUB neu zu installieren. GRUB durchsucht beim Booten das entsprechende Verzeichnis nach der passenden Datei.

7.1.2. linuxrc

Das Programm linuxrc ist hauptsächlich dafür verantwortlich, das Mounten und den Zugriff auf die eigentliche Root-Partition zu ermöglichen. Je nach der Konfiguration des System werden dabei die folgenden Schritte abgearbeitet:

Laden von Kernel-Modulen

In Abhängigkeit von der bestehenden Hardware-Konfiguration werden spezielle Treiber für den Zugriff auf einzelne Komponenten geladen (wobei die Festplatte meist die wichtigste davon ist). Außerdem werden Treibermodule für den Zugriff auf das eigentliche Dateisystem geladen.

Vorbereitung von RAID- und LVM-Systemen

Wenn Ihr System so konfiguriert ist, dass die Root-Partition in einem RAID- oder LVM-Schema enthalten ist, so startet linuxrc RAID bzw. LVM, um später Zugriff auf das entsprechende Dateisystem zu erlauben. Informationen über RAID finden sie unter Abschnitt 3.8, „Konfiguration von Soft-RAID“, und über LVM unter Abschnitt 3.7, „LVM-Konfiguration“.

Vorbereitung des Netzwerks

Wenn das System so konfiguriert ist, dass die Root-Partition übers Netzwerk geladen werden soll (mittels NFS), wird linuxrc sicherstellen, dass die erforderlichen Netzwerk-Treiber geladen werden, und dass das Netzwerk für den Zugriff auf das Dateisystem eingerichtet wird.

Während einer Installation wird linuxrc ebenfalls beim erstmaligen Booten ausgeführt. Die dabei abgearbeiteten Schritte unterscheiden sich von den Obengenannten:

Ermittlung der Installationsquelle

Zu Beginn der Installation wird von der Installationsquelle ein Installations-Kernel und eine spezielle initrd mit dem YaST-Installationsprogramm geladen. Das YaST-Installationsprogramm, das von einem virtuellen Dateisystem läuft, muss über den Ort der Installationsquelle informiert sein, damit es darauf zugreifen und das Betriebssystem installieren kann.

Einleitung der Hardware-Erkennung und Laden der benötigten Kernel-Module

Wie im Abschnitt 7.1.1, „initrd“ erwähnt, wird der Bootvorgang mit einer minimalen Auswahl an Treibern begonnen, die für die meisten Hardware-Kombinationen geeignet ist. Zur Ermittlung der passenden Treiber für Ihr System startet linuxrc dann einen Prozess zur Hardware-Erkennung. Die ermittelten Werte werden zum einen unter der Variablen INITRD_MODULES in der Datei /etc/sysconfig/kernel eingetragen und können später zum Booten mit einer modifizierten initrd verwendet werden. Zum anderen verwendet linuxrc die ermittelten Werte, um die entsprechenden Treiber für die Installation zu laden.

Starten des Installations- bzw. Rettungssystems

Sobald die Hardware erkannt und die passenden Treiber geladen sind, startet linuxrc das Installationssystem, also das eigentliche YaST-Installationsprogramm bzw. das Rettungssystem.

Start von YaST

Abschließend startet linuxrc YaST, mit dem sich die Pakete installieren lassen und das System konfiguriert werden kann.

7.1.3. Zusätzliche Informationen

Weitere Informationen finden Sie in den Dateien /usr/src/linux/Documentation/ramdisk.txt, /usr/src/linux/Documentation/initrd.txt und in den Manualpages initrd(4) und mkinitrd(8).


SUSE LINUX Administrationshandbuch 9.3