Es gibt Fälle, da beginnt das Troubleshooting bereits vor der Arbeit. Ein System fährt nicht mehr hoch oder bringt Fehlermeldungen gleich bei der Anmeldung oder kurz davor. Ein Szenarion, welches ich bei Mac OSx vielleicht aus den Anfangszeiten oder auch bei Windows ab NT4 kenne, sich aber zunehmend seltener zeigt. Dennoch habe ich schon immer die Philosophie vertreten, dass man die Startsequenz eines Systems kennen muss. Da man während des Bootens oft nur als Passagier der Dinge harrt die da kommen, grenzt man die Fehlersuche ungemein ein, wenn man versteht an welcher Stelle die Probleme auftreten. Dieser Artikel ist ein Nebenprodukt meiner Bemühungen den Startvorgang von Mac OSX Leopard bzw. Snow Leopard1) zu analysieren und zu verstehen. Der Startvorgang - Auf moderner Hardware in ca. einer Minute erledigt und ein Thema, welches Bücher füllen könnte. Ich fand es immer schon spannend, auch wenn das folgende möglicherweise eine Knochenarbeit wird.
Kurz gefasst läuft der Start Prozess folgendermaßen ab:
StartUp Phase | Event |
---|---|
Power On: | Boot-ROM/RAM check is initialized |
BootROM-POST: | Black screen, power LED on → POST or BootROM failure Flashing power LED once per second → bad RAM, no RAM Three flashes, a pause, and three more flashes (occurs continuously) → marginal RAM |
BootROM-EFI: | Boot chime |
Boot EFI: | Metallic Apple → found boot.efi Circle with Slash → could not load boot.efi, or some other issue Flashing globe → looking for booter/kernel on netboot server Metallic Apple with spinning earth below → found booter/kernel on netboot server Broken Folder that blinks → no bootable device has been found |
kernel: | Grey screen with Metallic Apple and spinning gear |
launchd: | Blue Screen |
loginwindow: | Login window appears |
User Environment Setup: | The text "Logging in…" appears in login window along with a progress bar. Upon successful login, the Desktop and Dock appear. |
Die Mac Firmware, auch BootROM genannt, befindet sich in einem Flash Speicher auf dem Motherboard. Sobald der Start-Button gedrückt wird, wird die Firmware quasi als Mini Betriebssystem gestartet, welches die grundlegenden Hardwarekomponenten initialisiert. In Intel-basierten Mac Systeme basiert die Firmware auf die Extensible Firmware Interface (EFI) Technologie. Neben dem Betrieb von Mac OS auf Intel Systemen wird durch die Verwendung von EFI auch die Nutzung anderer Plattformen, wie zB Windows, auf Mac Hardware möglich. Das EFI ist die interaktive Schnittstelle zwischen Firmware und Betriebssystem und kann über diverse Tastenkombinationen während des Bootvorgangs gesteuert werden. Das EFI ist in etwa vergleichbar mit dem BIOS eines konventionellen IBM kompatiblen PCs2).
Als erstes wird durch die Firmware ein Power On Self Test (POST3)) durchgeführt, der sicherstellt, dass die Basiskomponenten des Systems (RAM, CPU, Grafikkarte etc) einwandfrei funktionieren. Hat das System diese Phase fehlerfrei überstanden, hört man den System-Beep und alle (an der Hauptgrafikkarte) angeschlossenen Bildschirme wechseln von Schwarz auf Grau. Nach einem erfolgreichem POST sucht die Firmware nach einem Boot File bzw. einem Boot Image.
Treten allerdings beim POST Störungen auf, bleibt der Bildschirm Weiss bzw Schwarz oder es werden möglicherweise Fehlermeldungen ausgegeben. Welches der Szenarien zutrifft, hängt auch von der fehlerauslösenden Komponente ab. Abhängig vom Modell Typ und auch vom Alter des Systems können diese Fehler Codes auch akustisch über den Systemlautsprecher oder visuell über die Power On LED übermittelt werden. Unabhängig davon, welcher Fehlercode im Detail ausgegeben wird, kann man in dieser Phase davon ausgehen, dass es sich um Hardwareprobleme handelt. Um die Fehlercodes zu analysieren, kann man die Support Homepage von Apple www.apple.com/support kontaktieren und für sein Computermodel die Lister der Fehlercodes heraussuchen.
Wird der POST erfolgreich abgeschlossen, sucht die Firmware nach dem Boot Image, welches als letztes in den Systemeinstellungen → Bootvolume in Mac OS oder Windows Boot Camp Konfiguration eingestellt wurde. Die Information zur Position der Boot Images wird in einem NVRAM4) auf dem Motherboard abgelegt, die Bootimages selber befinden sich jeweils in den Partitionen, in denen das restliche Betriebssystem auch liegt. Wird das Boot Image gefunden, wird dieses geladen und ausgeführt. Das macht sich auf dem Bildschirm durch ein dunkelgraues Apple Logo auf dem Hauptbildschirm bemerkbar. Sollte kein Boot Image gefunden werden, wird dies durch ein dunkelgraues Ordnersymbol mit einem Fragezeichen angezeigt. Des Weiteren kennt das EFI zahlreiche Tastenkombinationen während des Bootvorgangs, mit welchen der Bootprozess beeinflusst werden kann. Das kann zB der Safe Mode oder der Single-User Mode sein, oder bei mehreren vorhandenen Betriebssystemen die Auswahl des zu startenden Betriebssystems. Mit Snow Leopard wird das System mit einem optionalen 64-Bit Kernel ausgeliefert, welcher während dem Booten mit der Tastenkombination 4 + 6 geladen werden kann. Weitere Informationen zu den Tastenkombinationen finden Sie im Artikel -> Boot Optionen und -> 64 Bit Kernel booten
Die abschliessende Aufgabe von EFI bzw. der Firmware, ist das Laden des Boot Images. Das Boot Image, welches sich wie oben bereits erwähnt im Dateisystem der Partition des zu startenden Betriebssystem befindet, ist verantwortlich den Betriebssystem Kernel mit allen notwendigen Treibern und Kernel Extensions zu laden, damit der Kernel den Bootprozess fortführen kann. Im Prinzip ist dies der Boot Loader. Die Firmware übergibt dem Boot Loader auch die Information, wenn vom Benutzer durch eine Tastenkombination ein spezieller Boot Modus, wie zB der Safe Mode oder den Single-User Mode, angefordert wird. Das Boot Image befindet sich sich in /System/Library/CoreServices/boot.efi
Um den Startprozess zu optimieren, versucht der Boot Loader weitere Kernel Dateien aus einen Cache zu laden. Die Cache Dateien beinhalten einen optimierten Kernel, der benötigte Treiber und Kernel Extensions (KEXTs) beinhaltet. Diese Cache Dateien befinden sich im /System/Library/Caches/com.apple.kernel.caches bzw. /System/Library/Caches/com.apple.kext.caches Verzeichnis. Fordert der Benutzer zB einen sicheren Systemstart an, wird auf das Laden dieser Cache Dateien verzichtet und die benötigten Kernel Extensions werden zur Laufzeit in /System/Library/Extensions gesucht und in den Kernel eingebunden. Die zum Start notwendigen Extensions sind in der Info.plist mit dem OSBundleRequired Flag gekennzeichnet. Bei dieser Startvariante dauert der Startvorgang erheblich länger, ist aber bei fehlerhaften Systemen eine der ersten Maßnahmen zum Troubleshooting.
Wie zuvor schon am Bildschirm durch ein dunkelgraues Apple Logo angezeigt wurde, dass die Firmware das Boot Image gefunden hat, wird jetzt das erfolgreiche Laden des Kernels durch einen grauen, sich drehenden, Fortschrittskreis angezeigt. Sollte dagegen das Boot Image nicht in der Lage sein, den Kernel zu laden, wird dies durch einen durchgestrichenen grauen Kreis, der an ein Parkverbot Schild erinnert, signalisiert.
Nachdem das Boot Loader Image erfolgreich den Kernel und alle notwendigen KEXTs (Kernel Extensions) geladen hat, übernimmt der Kernel selbst den weiteren Startprozess. Der Kernel ist nun durch weitere KEXTs in der Lage das vorliegende Dateisystem zu erkennen, wodurch er weitere KEXTs nachladen kann um das Core BSD Unix System zu starten. Das sich drehende Fortschrittsrad unterhalb des Apple Logos auf dem immer noch grauen Startbildschirm zeigt dies an. Zum Schluss startet der Kernel den ersten (nonkernel) Prozess, den launchd-Prozess (PID 1), welcher den Parent Prozess aller folgender Prozesse darstellt. Das Laden des Kernels ist somit erfolgreich beendet, weißer Bildschirmhintergrund mit dem Apple Logo zeigt an, dass launchd dabei ist weitere Prozesse zu starten.
Ist der Kernel geladen und launchd5) gestartet, ist der Mac bereit weitere Prozesse zu starten. Frühere Versionen von Mac OSX zeigten einen "Willkommen in Mac OS X" Dialog mit einem Statusbalken, der den Fortschritt des Ladens der weiteren benötigten Prozesse anzeigt. Ab Mac OS 10.5 wurde der Startprozess optimiert und auf einen sehr kurzen Moment reduziert. Diese letzte Startphase wird durch einen blauen Bildschirmhintergrund angezeigt. Dieser blaue Hintergrund wird ausgelöst, wenn launchd den loginwindow-Prozess startet, welcher zB das Benutzer Interface (zB den Anmeldedialog) erzeugt und zeigt letztlich an, dass alle vorangegangenen Startphasen erfolgreich abgeschlossen wurden.
launchd ist sozusagen die Mutter aller Prozesse, was sich in der elitären Process ID 1 (PID 1) manifestiert. launchd arbeitet die in /System/Library/LaunchDaemons; /System/Library/LaunchAgents; /Library/LaunchDaemons; /Library/LaunchAgents; ~/Library/LaunchAgents als plist-Files abgelegten Startskripts ab. Weiterhin werden von launchd die UNIX Start Skripte in /etc/rc.local ausgeführt, falls solche vorhanden sind; was bei ≥ 10.4.x »out of the box« allerdings nicht der Fall ist. Wird ein netzwerkfähiger Daemon mit der Startoption »OnDemand« registriert, öffnet launchd den dazugehörigen Netzwerk-Port und überwacht diesen nach eingehenden Anforderungen (gestartet wird der Daemon erst dann, wenn es notwendig ist → OnDemand)6). Des Weiteren startet launchd einen Start Helfer Prozess: Den SystemStarter. Dieser Prozess startet zB die in /System/Library/StartUpItems und /Library/StartUpItems abgelegten Third Party Start Elemente.
Hat launchd seine Arbeit erledigt, wird als letzte Startphase der loginwindow-Prozess gestartet. Dieser Prozess kontrolliert nun verschiedene Aspekte der Benutzeranmeldung und stellt das Anmeldefenster zur Authentifizierung auf dem Bildschirm dar. Dabei gibt es einige Ausnahmen:
Nach erfolgreicher Anmeldung prüft loginwindow ob es einen LoginHook7) gibt. Dabei handelt es sich um ein Shellskript, das bei der Anmeldung irgendeines Benutzers mit root-Rechten ausgeführt wird. Zur Einrichtung eines Login-Hooks muss folgender Befehl ausgeführt werden:
$ sudo defaults write com.apple.loginwindow LoginHook /Pfad/zum/Skript
Nach der Benutzeranmeldung konfiguriert loginwindow die Benutzerumgebung und protokolliert die Logininformationen. Im Detail stellt sich das wie folgt dar:
Note: Werden Finder, Dock oder der SystemUIserver unerwartet beendet, werden diese von loginwindow automatisch neu gestartet. Wird loginwindow unerwartet beendet, wird dieser automatisch von launchd neu gestartet.
Verwandte Artikel:
-> Der launchd Prozess
-> Start-Skript erstellen (launchd)
-> Scheduled Tasks (launchd)
-> Admin oder User Passwort zurücksetzen
— pronto 2010/05/02 21:11