Was passiert eigentlich beim Starten eines PCs (X86)? Das Grundgerüst sieht folgendermaßen aus:

Oft lässt sich der Bootprozess auch noch beschleunigen: BootProzess/beschleunigen

BIOS

Natürlich wird zuerst das BIOS angezeigt, mit dem hübschen Pinguin-Logo statt Energy Star. Was? Noch kein Pinguin im BIOS? Na dann aber schnell zu PinguinBootLogo!

Von BIOS ist es dann abhängig von wo aus man booten kann, normalerweise Floppy und IDE Harddisk/CDROM. Aber auch USB oder Firewire Devices sind bei neueren BIOSen als Bootdevice möglich. Bootlader arbeiten noch mit den BIOS-Aufrufen, die auch DOS benutzt(e), um Platten anzusprechen. Erst nachdem der Kernel geladen ist, übernimmt Linux die Hardware.

Wenn das BOOT-Device von einer zusätzlichen Karte zur Verfügung gestellt wird (z.B. Netzwerk oder SCSI-Devices) werden Extension BIOSe benutzt diese befinden sich meist auf diesen zusätzlichen Karten. In seltenen Fällen werden sie ins gleiche Flash wie das Haupt-BIOS gebrannt.

Kernel laden

Der Kernel wird irgendwie in den Speicher kopiert und ausgeführt. Das kann von einem beliebigen Programm geschehen, wie z.B. LOADLIN, welches einfach eine Datei nimmt (die idealerweise den Kernel enthält :-), und diese in den Speicher kopiert (damit DOS überschreibt). Eine zweite Möglichkeit ist LILO, der Linux Loader, der einfach bei der Konfiguration überprüft, auf welchen physikalischen Sektoren der Kernel auf der Festplatte liegt (als Datei), diese mit sich selbst in den MBR (oder Bootsektor) schreibt, und beim Booten dann genau diese Sektoren ausliest, ins RAM schreibt und 'anstößt', also ausführt. Seit einiger Zeit gibt es mit GRUB einen BootLoader, der auch Dateisysteme lesen kann.

Der Kernel ist prinzipiell für die Erkennung und Einbindung der gesamten Hardware zuständig, diese Meldungen kann man beim Booten beobachten. Will man etwas länger lesen, so sind die Tasten Pause und ScrollLock bzw. Rollen ganz nützlich. Zum Schreiben in eine Datei siehe unten. Natürlich funktioniert hier auch der Scrollback-Puffer schon - Shift Bild-Hoch bzw. Shift Bild-Runter.

/sbin/init

Die letzte Aufgabe des Kernels ist es, die Partition, die ihm (via LILO oder via LOADLIN Parameter oder wie auch immer) als root-Partition vorgegeben wurde, anzumelden (zu 'mounten') und den ersten Prozeß zu starten, der normalerweise init heißt (/sbin/init). Jetzt ist der Kernel prinzipiell mit Laden fertig und die gesamte Hardware (die er eingebunden hat) steht zur Verfügung. Die Meldungen, die Kernel und Programm trennen, lauten

 VFS: mounted root (ext2 filesystem) readonly.                      (das war noch der Kernel)
 INIT: Version X.XX booting                                         (das ist bereits INIT)

Init guckt sich jetzt verschiedene Sachen an. Zuallererst wird die Datei /etc/inittab geladen, damit init z.B. weiß, welcher RunLevel zu starten ist. Danach guckt init, welches Programm als nächstes starten soll -- bisher ist noch kein Serverdienst gestartet, noch keine Shell, noch kein Netzwerk, noch nicht einmal andere Partitionen sind gemountet. (dies steht in der Zeile si:I:wait:PROGRAMM). Meist ist PROGRAMM gleich /etc/rc.d/init.boot, oder /sbin/init.d/boot, und dies wird jetzt ausgeführt.

Das Boot-Skript macht - normalerweise, denn ab hier ist alles und nichts konfigurierbar - folgendes:

Wohlgemerkt: Dein System kann hiervon geringfügig abweichen . Meist gibts in dem gleichen Verzeichnis auch eine Datei boot.local, die von boot zum Schluss ausgeführt wird und in die du deine eigenen Befehle schreiben kannst. Wenn nicht, kannst du sie auch ins boot-Skript direkt anhängen -- aber vorsicht, hier nichts einfach ändern, wenn du nicht weißt, was es tut!

Init guckt jetzt, welcher Runlevel festgelegt wurde (in der /etc/inittab), und je nach Runlevel werden jetzt Skripte gestartet (/etc/inittab: lN:N:wait:SCRIPT, wobei N=Runlevel), die bei den meisten Systemen einfach alles starten, was in /etc/init.d/rcN.d/ oder so ähnlich liegt (N=Runlevel). Hier werden also die ganzen Services, Dämonen ;-) und Dienste gestartet, die dann später im Hintergrund laufen. Gleichzeitig wird für diese Prozesse etwas Buch geführt, z.B. Lock-Dateien angelegt, oder ähnliches. Guck Dir einfach mal die Scripts an.

Login-Dienste

Wenn das fertig ist, startet INIT für alle Terminals, die ihm gesagt wurden, ein "getty", das ist ein Programm, was die Kontrolle über dieses Terminal bekommt und normalerweise erstmal /bin/login startet. Dies wird ebenfalls in der /etc/inittab festgelegt. respawn heißt hier, daß das Programm, sobald es sich beendet, sofort erneut gestartet wird. Sonst könnte man sich auf jedem Terminal nur einmal einloggen ... =;) Falls man ein grafisches Login eingestellt hat (Runlevel 5 nach LSB-Standard), wird auch gleich noch der xdm bzw. kdm gestartet und man bekommt ein grafisches X-Window-Login-Fenster. Dies funktioniert übrigens auch, wie so manches, übers Netzwerk: normalerweise sollte ein X -query andererrechner einem ein Login-Fenster von einem anderen Rechner im Netzwerk liefern (vorausgesetzt, diese Funktion ist freigeschaltet, was aus Sicherheitsgründen normalerweise nicht der Fall ist).

Wenn man sich angemeldet hat, wird normalerweise das Script /etc/profile (für alle Benutzer identisch) und die Dateien .profile, .login und für die bash-Shell auch .bashrc, .bash_login und .bash_profile (falls vorhanden) ausgewertet bzw. ausgeführt. Das entspräche am ehesten einer AUTOEXEC.BAT unter DOS. :)

JETZT -- nach dem Login -- wird die Shell gestartet und man kann das System benutzen. Ist doch alles halb so wild. :)

Jedenfalls läßt sich der Systemstart-Vorgang auf alle möglichen Gegebenheiten anpassen. Man kann, falls man einmal sein root-Passwort vergessen hat, aber LILO nicht abgesichert hat, problemlos z.B. mit

dem Linux Kernel sagen, daß er halt nicht /sbin/init als erstes Programm ausführen soll, sondern /bin/bash. Hui, das sorgt immer für Erheiterungen, wenn jemand im FIDO Netz oder im Usenet diese "Sicherheitslücke" "neu" entdeckt ;-) Dies ist auch dann nützlich, wenn das System so stark beschädigt wurde, daß der Bootvorgang hängen bleibt - was wir hier mal keinem wünschen wollen.

(man mache sich bitte mit dem Parameter 'restricted' in der /etc/lilo.conf vertraut.)

BootProzess (zuletzt geändert am 2008-04-19 15:02:44 durch dslb-084-060-122-117)