Bootvorgang

Aus Mikiwiki
Wechseln zu: Navigation, Suche

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.
    • Während der Kernel die Treiber lädt, gibt er auf dem Bildschirm zahlreiche Statusmeldungen aus, die von den meisten Distributionen unter einem grafischen Ladebildschirm (engl. splash screen) versteckt werden. Dieses Bild lädt der Kernel selbst aus der Datei "initrd"; später startet ein Linuxprogramm den animierten Ladebalken. In den meisten Distributionen wird diese Aufgabe von Plymouth übernommen, früher kam oft Usplash zum Einsatz. Um anstelle des Bilds die Textmeldungen zu sehen, wird auf die Taste "Esc" gedrückt. Hilft das nicht, so wird entweder im Bootmenü der Eintrag "Failsafe" aufgerufen (der aber auch weitere Funktionen deaktiviert) oder dem Kernel der Startparameter "splash=no" übergeben. Bei Ubuntu wird einfach der Parameter "splash" weggelassen.
    • 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.
    • Die weiteren Parameter hinter "root=" lösen im Kernel ganz bestimmte Aktionen aus:
      • "apm=off" und "acpi=off" schalten das Energiemanagement aus, was besonders auf einigen Notebooks Hänger vermeidet.
      • "noapic" und "nolapic" deaktivieren vereinfacht gesagt die automatische Hardwareeinrichtung.
      • Eine Liste wichtiger Kernelparameter findet sich unter http://wiki.ubuntuusers.de/Booten
  • Der Linux-Kernel stösst den ersten Prozess im Userland an, das Programm "init". Inzwischen sind die wichtigsten Linux-Distributionen (Ubuntu 7.10, Fedora 9, Ipensuse 11.3) vom alten System V-Init-System auf Upstart umgestiegen.
    • Das System V init startet alle Dienste einer nach dem anderen.
    • Upstart und Systemd starten viele Dienste parallel, was den Bootvorgang entsprechend beschelunigt.
  • Das Programm "init" startet über ein komplexes System von Skripten weitere Prozesse, um abhängig vom eingestellten Runlevel einen bestimmten Zustand herzustellen. Dabei werden etwa grundlegende Dienste gestartet, Treiber nachgeladen, das Netzwerk hochgefahren oder die grafische Benutzeroberfläche aktiviert.

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.

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 von jedem Prozess beim Starten verbrauchte Zeit.

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
country DE.gif Wikipedia ger Bootenwbm Enzyklopädischer Artikel