Bootvorgang von Linux-Systemen

Linux Bootvorgang von Linux-Systemen

Dieses Dokument beschreibt den allgemein üblichen Bootvorgang eines Linux-Systems. Viel Spaß beim Lesen.

1. Einschalten des Rechners, Bootmanager

Nach dem Einschalten des Rechners und dem Durchlaufen des POST (Power On Self Test) wird normalerweise von der ersten IDE-Festplatte der Bootsektor ausgeführt. Unter Linux wird hierfür meistens der LILO (Linux Loader) oder GRUB verwendet. Der Bootmanager kann verschiedene Betriebssysteme auch von unterschiedlichen Festplatten starten oder einem Linux-Kernel gewünschte Parameter übergeben.

2. Kernel, Initiale Ramdisk

Wenn im Bootmanager ein zu bootender Linux-Kernel ausgewählt wurde, wird dieser und eventuell eine eingebundene initiale Ramdisk geladen. Der Kernel führt bei jedem Booten des Systems eine Hardware-Erkennung durch und stellt die entsprechenden Schnittstellen zur Verfügung. Ein für Pentium optimierter Kernel läuft sowohl auf Pentium I, II, III und Athlon/Duron. Man muss also nach dem Aufrüsten eines Rechners (Mainboard, Prozessor, Speicher) das System nicht neu installieren, wie das bei Betriebssystemen aus Redmond gang und gäbe war bzw. noch ist. Die initiale Ramdisk ist dafür zuständig, Kernel-Module für SCSI, spezielle Controller und entsprechende Dateisysteme zu laden, die nicht im Kernel enthalten sind. Der Kernel wird dadurch ziemlich modular und klein und somit auch schneller.

3. /sbin/init

Wurde der Kernel geladen und eventuell eine initiale Ramdisk ausgeführt, wird die Root-Partition "/" im Read-Only Modus gemountet und dort nach dem Programm "/sbin/init" gesucht, welches dann auch ausgeführt wird. Das Init-Programm liest seine Konfiguration aus der Textdatei "/etc/inittab". In dieser Datei wird der Standard-Runlevel festgelegt:

 

id:3:initdefault:

 

Als nächstes folgt die Angabe des Shellscripts, welches beim Starten des Rechners ausgeführt wird:

 

si::sysinit:/etc/init.d/rcS

 

Dieses Script sorgt unter anderem dafür, dass die Dateisysteme überprüft, die in der /etc/fstab stehenden Partitionen gemountet werden und die Systemzeit gestellt wird. Anschließend stehen die Script-Aufrufe für die Runlevel:

 

l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6

 

Auf den Bootvorgang bezogen, wird hier nun das Script für den Standard-Runlevel aufgerufen ("/etc/init.d/rc 3"). In der Datei "/etc/inittab" wird weiterhin das Verhalten beim Drücken der bei Windows-Benutzern bekannten Tastenkombination <Strg>+<Alt>+<Entf> geregelt:

 

ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -h now

 

Wurden also sowohl das Sysinit-Script, als auch das entsprechende Script für den Standard-Runlevel ausgeführt, werden meistens sechs virtuelle Konsolen gestartet:

 

1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6

 

Siehe dazu auch den Artikel [DOC:START:249]Zwischen Grafik- und Textmodus umschalten[DOC:END].

Theorie: Runlevel, Start-/Stop-Scripte

Ein Runlevel legt fest, welche Dienste gestartet werden und welche nicht. Runlevel "1" bzw. "S" ist der Single-User-Modus ohne Netzwerk. Runlevel "2" soll Multi-User mit Netzwerk, Runlevel "3" Netzwerk mit Netzwerkdiensten (Apache, MySQL, ...) und Runlevel "5" mit grafischer Anmeldeoberfläche (xdm, kdm oder gdm) sein. Runlevel "0" bedeutet "Rechner herunterfahren", Runlevel "6" steht für "Rechner neustarten". Runlevel "4" wird nicht genutzt. Mit der Eingabe

 

init 1

 

kann man zum Beispiel in den Runlevel 1, mit

 

init 5

 

wieder zurück in Runlevel 5 wechseln. Der momentane Runlevel kann auch als Benutzer mit dem Befehl

 

/sbin/runlevel

 

abgefragt werden. Die gewünschten Dienste werden über entsprechende Shell-Scripte, die unterhalb des Verzeichnisses "/etc/init.d/" gespeichert sind, gestartet und wieder gestoppt. Für jeden Runlevel existiert unterhalb von "/etc/" ein Verzeichnis "/rcX.d/", wobei "X" für die Nummer des Runlevels steht. In jedem dieser Verzeichnisse befinden sich Links auf die eigentlichen Shell-Scripte. Die Shell-Scripte werden grundsätzlich in alphabetischer Reihenfolge ausgeführt. Der Link "S20network" zum Starten des Netzwerks wird also vor dem Startscript für die Secure Shell "S21ssh" ausgeführt. Beim Herunterfahren wird entsprechend das Script zum Stoppen der Secure-Shell "K01ssh" vor dem Script zum Herunterfahren des Netzwerks "K02network" ausgeführt.

Die Start- und Stop-Scripte können auch manuell aufgerufen werden, um während des Betriebs einen Dienst herunterzufahren bzw. zu starten. Die Änderungen an der Netzwerkkonfiguration können beispielsweise durch den Aufruf von

 

/etc/init.d/networking restart

 

direkt (ohne Neustart des Rechners) wirksam gemacht werden.

Möchte man den Standard-Runlevel ändern, so kann man diesen entweder in "/etc/inittab" eintragen oder dem Kernel als Parameter übergeben. Die Eingabe von

 

linux 3

 

beim LILO startet zum Beispiel den Runlevel 3 (Netzwerkdienste ohne grafische Oberfläche). Dies ist zum Beispiel dann nützlich, wenn man eine neue Grafikkarte eingebaut hat, die erst noch konfiguriert werden muss.

Genauso kann man auch direkt in der LILO-Konfigurationsdatei "/etc/lilo.conf" den von Windows-Systemen bekannten "abgesicherten Modus" konfigurieren:

 

label=abgesichert
    image=/boot/vmlinuz
    root=/dev/hda1
    append="S"
    read-only
    initrd=/boot/initrd.img

 

Nachdem man "lilo" aufgerufen hat, kann man diesen abgesicherten Modus beim Booten bequem auswählen.

Artikelbewertung: 
No votes yet
War dieser Artikel hilfreich?