Bootvorgang
Als Bootvorgang (auch: Booten, Bootprozess, Hochfahren, Rechnerstart, Starten; engl. to boot, to bootstrap) wird das Laden des Betriebssystems bezeichnet, wie es beispielsweise nach dem Einschalten eines Rechners erforderlich ist.
Linux
Der Bootvorgang eines Linux-Rechners läuft folgendermassen ab:
- Das BIOS
- weckt alle Hardwarekomponenten
- führt einige grundlegende Tests durch, in der Gesamtheit auch als Power on Self Test / POST bekannt.
- verschafft sich einen Überblick über die angeschlossene Hardware
- zeigt gemäss den BIOS-Einstellungen entweder ein Einschaltbild (etwa das Herstellerlogo) oder Textinformationen, die mit der Taste "Pause" angehalten werden können. Üblicherweise werden an dieser Stelle alle erkannten Laufwerke (Festplatten, DVD, USB) aufgelistet.
- sucht gemäss den BIOS-Einstellungen nach einem startfähigen Medium.
- sucht am Anfang des startfähigen Mediums im 512 Byte grossen Master Boot Record nach dem Bootloader sowie der Partitionstabelle, wo die Aufteilung des Mediums hinterlegt ist.
- lädt den Bootloader
- Der Bootloader startet das Betriebssystem, indem er
- die Partition mit dem Linux-System (die "Root-Partition") betritt
- dort ins Verzeichnis "/boot" wechselt, wo der Linux-Kernel liegt (üblicherweise stark komprimiert in der Datei "vmlinuz")
- den Linux-Kernel im Arbeitsspeicher entpackt
- den Linux-Kernel startet
- dem Linux-Kernel die volle Kontrolle über den Rechner übergibt
- Der Linux-Kernel initialisiert die zu diesem Zeitpunkt wesentliche Hardware und lädt die passenden Treiber. Dabei müssen häufig Treiber und Subsysteme geladen werden, die nicht fest im Linux-Kernel einkompiliert sind, jedoch gibt es zu diesem Zeitpunkt noch keinen Zugriff auf die Festplatte - aus diesem Grund enthalten viele Linux-Distributionen in der Datei "/boot/initrd" (engl. initial RAM disk) ein Mini-Linuxsystem.
- Der Bootloader lädt die Datei "initrd" anhand der Angaben der Datei "menu.lst" in den Arbeitsspeicher, wo der Linux-Kernel ihren Inhalt wie eine Mini-Festplatte sieht. Da die Datei "initrd" wichtige Treiber enthält, bleibt das System ohne sie im schlimmsten Fall stehen.
- Nachdem der Kernel alle grundlegenden Treiber geladen hat, wird die Datei "initrd" wieder aus dem Arbeitsspeicher entfernt.
- Der Kernel bindet anhand des Parameters "root=" in der Datei "menu.lst" die Festplattenpartition mit dem richtigen Linux-System ein. Mittlerweile verwenden alle Linux-Distributionen keine Gerätenamen mehr, sondern erkennen die Partitionen anhand einer eindeutigen Nummer, dem Universally Unique Identifier / UUID. Kann der Kernel zwar starten, jedoch das Root-Dateisystem nicht einbinden, so ist möglicherweise diese Nummer falsch und sollte dann in der Datei "menu.lst" bzw. im GRUB 2-Bootmenü durch den richtigen Gerätenamen (z. B. "/root=/dev/sda1") ersetzt werden.
- Der Linux-Kernel stösst den ersten Prozess im Userland namens "Init" an
- Der Init-Prozess startet über ein komplexes System von Skripten weitere Prozesse, um abhängig vom eingestellten Runlevel einen bestimmten Zustand herzustellen.
Durch bestimmte Parameter erfährt der Linux-Kernel, auf welcher Partition das Root-Dateisystem liegt und mit welcher grafischen Auflösung er booten soll. Ausserdem können Modulparameter angegeben werden - Informationen, die dem Linux-Kernel sagen, mit welchen Optionen er einen Gerätetreiber für bestimmte Hardware laden soll. Alle Startparameter, die der Linux-Kernel nicht kennt, ignoriert er und gibt sie an den ersten gestarteten Prozess (init) weiter. Ist der Parameter in den Startskripten des Systems definiert, reagiert "init" entsprechend darauf.
Fie meisten Linux-Distributionen verwenden für den Bootvorgang das SysV-Init-System. Zwar nutzen Ubuntu und Fedora inzwischen Upstart, nutzen es aber nicht nativ, um Prozesse zu parallelisieren. Init-NG und Apples Launchpad wären Alternativen. Wem das nicht reicht, nutzt einfach Suspend oder Hibernate.
Mit dmesg können die Bootmeldungen nachträglich angesehen werden, sobald das Betriebssystem erfolgreich gebootet wurde.
Bootchart klinkt sich als Init-Prozess ein und misst die Zeit jedes Prozesses.
FAQ
Bootvorgang beschleunigen
Einige Methoden zur Beschleunigung des Bootvorgangs wurden 2008 von Phil Endecott im Artikel "Booting Debian in 14 seconds" beschrieben:
- Diagnose des Ist-Zustands mit Hilfe von Bootchart und Bootgraph. Bei Endecott vergingen von GRUB bis zur Anzeige des XDM-Anmeldefensters 33 Sekunden.
- Erste einfache Massnahmen sind: Verringerung des GRUB-Timeouts auf ein Minimum, Entfernung ungenutzter Dienste, Booten mit höchster CPU-Frequenz (bei regelbaren Prozessoren)
- Kernel-Tuning: Endecott setzt einen Linux-Kernel ohne Initrd oder Initramfs sowie mit einkompilierten Gerätereibern ein, sodass das zeitaufwändige Laden von Kernelmodulen wegfällt.
- Auch das Coldplugging (das Erstellen der Gerätedateien durch Udev) frisst normalerweise Zeit. Endecott stellt ein Skript zur Verfügung, das die einmal von Udev erstellten Einträge im Verzeichnis "/dev" speichert und in Zukunft automatisch ohne Udev-Detektionsvorgang erzeugt.
- Zu den weiteren Verfahren gehört Disk-Readahead, was allerdings nur geringe Zeitersparnis bringt. Auch beim Stellen der Systemuhr mit hwclock (was Debian zweimal tut) lässt sich ein wenig Zeit gewinnen. X wird früher, die Netzwerkgeräte dagegen werden später gestartet, als Debian es in der Standardeinstellung tut.
- Endecotts gesamte Zeitersparnis betrug 19 Sekunden, womit sein Debian also in 14 Sekunden bootete.
SUSE Linux ab Diskette booten
# umount /dev/fd0 # dd if=/media/cdrom/boot/bootdsk1 of=/dev/fd0 # dd if=/media/cdrom/boot/bootdsk2 of=/dev/fd0 # dd if=/media/cdrom/boot/bootdsk3 of=/dev/fd0
Weblinks
Herausgeber | Sprache | Webseitentitel | Anmerkungen |
---|---|---|---|
Wikipedia | ger | Bootenwbm | Enzyklopädischer Artikel |