Linux Boots

Wie sich herausstellt, gibt es nicht viel auf die Boot-Prozess:

1. Ein Bootloader Findet das Kernel-Image auf der Festplatte, lädt sie in den Speicher und startet es.
2. Der Kernel initialisiert die Geräte und STI-Treiber.
3. Der Kernel stellt die Wurzel bereit fileSystem.
4. Der Kernel beginnt init aufgerufen, um zu planen.
5. init setzt den Rest der Prozesse in Bewegung.
6. Die letzten Prozesse, die init startet als Teil des Boot-Sequenz, die Sie für die Anmeldung zu ermöglichen.

Identifizierung jedes Stadium des Startvorgangs ist bei der Festsetzung der Boot-Probleme und das Verständnis des Systems als Ganzes von unschätzbarem Wert. Um zu beginnen, in Null auf der Boot-Loader, der der Startbildschirm oder fordert Sie erhalten, nachdem der Computer funktioniert STIs Power-On Self-Test, fragen Welches Betriebssystem zu laufen. Nachdem Sie eine Auswahl treffen, wird der Bootloader den Linux-Kernel, Übergabe Steuerung des Systems an den Kernel.

Es gibt eine ausführliche Diskussion des Kernels anderer Stelle in diesem Buch, aus dem dieser Artikel ist ein Auszug. Dieser Artikel behandelt die Kernel-Initialisierung der Bühne, Die Phase Wenn der Kernel eine Reihe von Nachrichten über die Hardware auf dem System vorhanden druckt. Der Kernel beginnt init nur, nachdem sie eine Nachricht zu verkünden zeigt an, dass der Kernel montierte Wurzel fileSystem:

VFS: Mounted root (ext2 fileSystem) schreibgeschützt.

Bald nach, sehen Sie eine Meldung über init Ausgangspunkt, ANSCHLIESSEND Systemdienst Start-Meldungen, und schließlich erhalten Sie die Login-Aufforderung einiger sortieren.

HINWEIS Auf Red Hat Linux, Die init beachten ist offensichtlich vor allem, weil es "begrüßt" Sie "Red Hat Linux." Alle Nachrichten danach zeigen, Erfolg oder Misserfolg in Klammern an der rechten Seite des Bildschirms.

Die meisten in diesem Kapitel beschäftigt sich mit init, Weil es der Teil der Boot-Sequenz, wo man die meiste Kontrolle ist.
init

Es ist nichts Besonderes init. Es ist eine Software wie jedes andere auf dem Linux-System, und du wirst es in / sbin zu finden zusammen mit anderen System-Binärdateien. Der Hauptzweck von init ist zum Starten und Stoppen anderen Programmen in einer bestimmten Reihenfolge. Alles, was Sie wissen müssen, ist, wie diese Sequenz funktioniert.

Es gibt einige verschiedene Varianten, aber die meisten Linux-Distributionen verwenden die System V-Stil hier diskutiert. Einige Distributionen verwenden eine einfachere Version, die dem BSD-Init ähnelt, aber es ist unwahrscheinlich, dass Sie darauf stoßen.

Runlevels

Zu einem bestimmten Zeitpunkt auf einem Linux-System ist eine gewisse Basis-Prozesse eingestellt läuft. Dieser Zustand der Maschine wird als seine runlevel, und es wird mit einer Zahl von 0 durch 6 bezeichnet. Das System verbringt die meiste STIs Zeit in einem einzigen Runlevel. Allerdings, wenn Sie das Gerät heruntergefahren, init-Schalter zu einem anderen Runlevel, um die System-Dienste in geordneten Jahr zu kündigen und den Kernel zu stoppen erzählen. Yet Another Runlevel für Single-User-Modus ist, später diskutiert wird.

Der einfachste Weg, Runlevel in den Griff zu bekommen, besteht darin, die Init-Konfiguration zu untersuchen file, / etc / inittab. Suchen Sie nach einer Zeile wie der folgenden:

ID: 5: initdefault:

Diese Zeile bedeutet, dass der Standard-Runlevel im System 5 ist. Alle Zeilen im inittab file Nehmen Sie diese Form an, wobei vier durch Doppelpunkte getrennte Felder in der folgenden Reihenfolge vorkommen:
# Eine eindeutige Kennung (eine kurze Zeichenfolge, wie ID in dem vorangehenden Beispiel)
# Die geltenden Runlevel (n)
# Die init dieser Aktion nehmen sollte (im obigen Beispiel ist die Aktion, um die Standard-Runlevel auf 5 gesetzt)
# A auszuführende Befehl (optional)

Es gibt keinen Befehl in der vorstehenden initdefault beispielsweise ausgeführt werden, da der Befehl nicht sinnvoll im Zusammenhang mit der Einstellung der Standard-Runlevel. Schauen Sie ein wenig weiter unten in inittab, bis Sie eine Zeile wie diese sehen:

l5: 5: wait :/ etc / rc.d / rc 5

Diese Zeile löst die meisten Systemkonfigurationen und -dienste über die Verzeichnisse rc * .d und init.d aus. Sie können sehen, dass init so eingestellt ist, dass es in Runlevel 5 einen Befehl namens /etc/rc.d/rc 5 ausführt. Die Aktion wait gibt an, wann und wie init den Befehl ausführt: Führen Sie rc 5 einmal aus, wenn enterWarten Sie, bis dieser Befehl beendet ist, bevor Sie etwas anderes tun.

Es gibt mehrere verschiedene Aktionen neben initdefault und warten, vor allem in Bezug auf Power-Management und die inittab (5) Handbuch Seite erfahren Sie alles über sie. Diejenigen, die Sie am ehesten zu begegnen wird in den folgenden Abschnitten erklärt.

respawn

Die Respawn-Aktion bewirkt, dass init den folgenden Befehl ausführt und ihn erneut ausführt, wenn die Ausführung des Befehls abgeschlossen ist. Sie werden wahrscheinlich etwas Ähnliches wie diese Zeile in Ihrem Inittab sehen file:

1: 2345: respawn :/ sbin / mingetty tty1

Die getty-Programme bieten Anmeldung aufgefordert. Die vorangehende Zeile ist für die erste virtuelle Konsole (/ dev / tty1), die, die Sie sehen, wenn Sie ALT oder STRG-ALT-F1 F1 drücken. Die Respawn-Aktion wird die Login-Prompt zurück, nachdem Sie sich abmelden.

ctrlaltdel

Das ctrlDie Aktion altdel steuert, was das System tut, wenn Sie auf einer virtuellen Konsole CONTROL-ALT-DELETE drücken. Auf den meisten Systemen ist dies eine Art Neustartbefehl mit dem Befehl shutdown.

sysinit

Die sysinit-Aktion ist das allererste, was init beim Start ausführen sollte enterin allen Runlevels.

Wie Prozesse in Runlevel starten

Sie sind nun bereit zu lernen, wie init startet die System-Dienste, sondern nur die, bevor sie Sie sich anmelden können. Recall dieses inittab Linie von früher:

l5: 5: wait :/ etc / rc.d / rc 5

Dieses kleine Linie löst viele andere Programme. RC steht für Stellbefehle, und Sie werden hören, wie Leute beziehen sich auf die Befehle wie Skripte, Programme oder Dienstleistungen. Also, wo sind diese Befehle überhaupt?

In diesem Beispiel befinden sich die Befehle für Runlevel 5 wahrscheinlich entweder in /etc/rc.d/rc5.d oder /etc/rc5.d. Runlevel 1 verwendet rc1.d, Runlevel 2 verwendet rc2.d und so weiter. Möglicherweise finden Sie Folgendes items im Verzeichnis rc5.d:

S10sysklogd S20ppp S99gpm
S12kerneld S25netstd_nfs S99httpd
S15netstd_init S30netstd_misc S99rmnologin
S18netbase S45pcmcia S99sshd
S20acct S89atd
S20logoutd S89cron

Die rc 5 Befehl startet Programme in diesem Runlevel-Verzeichnis, indem Sie die folgenden Befehle:

S10sysklogd Hause
S12kerneld Hause
S15netstd_init Hause
S18netbase Hause
...
S99sshd Hause

Beachten Sie die Start-Argument in jedem Befehl. Das S in einem Befehl Name bedeutet, dass der Befehl im Start-Modus ausgeführt werden soll, und die Anzahl (00 durch 99) bestimmt, wo in der Folge rc startet das Kommando.

Die rc *. D Befehle beginnen in der Regel Programme, die Shell-Skripte in / sbin oder / usr / sbin. Normalerweise können Sie herausfinden, was einen der Befehle eigentlich gar Dazu suchen Sie in das Skript mit weniger oder Pager ein anderes Programm.

Sie können eine dieser Dienste zu starten mit der Hand. Zum Beispiel, wenn Sie den httpd Web-Server-Software manuell starten möchten, führen Sie S99httpd Hause. Ebenso, wenn Sie jemals brauchen, um einen der Dienste zu töten, wenn die Maschine eingeschaltet ist, können Sie den Befehl in der rc *. D-Verzeichnis mit dem Anschlag Argument (S99httpd stop, zum Beispiel).

Einige rc *. D Verzeichnisse, die Befehle beginnen mit K (für "töten" oder Stopp-Modus) enthalten. In diesem Fall läuft rc den Befehl mit dem Anschlag Argument anstelle von zu Hause. Sie sind am ehesten K Befehle im Runlevel, dass das System heruntergefahren begegnen.

Hinzufügen und Entfernen von Diensten

Wenn Sie Dienste in den Verzeichnissen rc * .d hinzufügen, löschen oder ändern möchten, müssen Sie sich das genauer ansehen files drinnen. Eine lange Auflistung zeigt eine Struktur wie diese:

lrwxrwxrwx. . . S10sysklogd -> .. / init.d / sysklogd
lrwxrwxrwx. . . S12kerneld -> .. / init.d / kerneld
lrwxrwxrwx. . . S15netstd_init -> .. / init.d / netstd_init
lrwxrwxrwx. . . S18netbase -> .. / init.d / netbase
...

Die Befehle in einem rc * .d-Verzeichnis sind eigentlich symbolische Links zu files in einem init.d-Verzeichnis, normalerweise in / etc oder /etc/rc.d. Linux-Distributionen enthalten diese Links, sodass sie für alle Runlevel dieselben Startskripte verwenden können. Diese Konvention ist keineswegs erforderlich, erleichtert jedoch häufig die Organisation.

Um einen der Befehle in der init.d Verzeichnis aus, die in einer bestimmten Runlevel verhindern, könnten Sie zum Entfernen des symbolischen Link in das entsprechende rc *. D-Verzeichnis zu denken. Dies funktioniert, aber wenn Sie einen Fehler machen und immer müssen die Verbindung wieder an ihrem Platz, könnten Sie Schwierigkeiten haben, Erinnerung an den genauen Namen der Verbindung. Daher sollten Sie nicht entfernen Links in der rc * D-Verzeichnisse, sondern fügen Sie einen Unterstrich (_) an den Beginn der Link-Namen wie diese.:

mv S99httpd _S99httpd

Beim Booten ignoriert rc _S99httpd, weil es nicht mit S-oder K. Darüber hinaus beginnen, ist der ursprüngliche Name noch offensichtlich, und haben Sie schnellen Zugriff auf den Befehl, wenn Sie in eine Prise sind und müssen es von Hand zu starten.

Um einen Dienst hinzuzufügen, müssen Sie ein Skript erstellen, wie die anderen in der init.d Verzeichnis und dann einen symbolischen Link in der richtigen rc *. D Verzeichnis. Der einfachste Weg, um ein Skript zu schreiben, ist die Skripte bereits in init.d untersuchen, machen Sie eine Kopie ein, dass Sie verstehen, und die Kopie ändern.

Beim Hinzufügen eines Service, sicherzustellen, dass Sie diesem Jahr GEEIGNETEN wie in der Boot-Sequenz, um den Dienst zu starten. Wenn der Dienst startet zu früh, kann es nicht funktionieren, da die Abhängigkeit von einigen anderen Service. Für nicht-essentielle Dienstleistungen, bevorzugen die meisten Systemadministratoren Zahlen in den 90s, nachdem die meisten der Dienste, die Cam mit dem System.

Normalerweise Linux-Distributionen mit einem Befehl zu aktivieren und deaktivieren Dienstleistungen im rc * kommen. D Verzeichnisse. Zum Beispiel in Debian, ist der Befehl update-rc.d, und Red Hat Linux ist der Befehl chkconfig. Grafische Benutzeroberflächen ist ebenfalls verfügbar. Mit HILFT Diese Programme halten die Start-Verzeichnisse konsistenten und hilft bei Upgrades.

TIPP: Eines der gängigsten Linux-Installation Probleme ist falsch Jahre konfigurierten Server XFree86 Das Flicks und ausgeschaltet, wodurch das System unbrauchbar auf der Konsole. Um dieses Verhalten, Boot in den Single-User-Modus zu stoppen und ändern Sie Ihre Runlevel oder Runlevel Dienste. Suchen Sie nach etwas mit einem xdm, gdm oder kdm in Ihrem rc *. D Verzeichnisse oder / etc / inittab.

Controlling init

Gelegentlich müssen Sie init einen kleinen Tritt geben, um ihm zu sagen, dass er die Runlevel wechseln soll, um das Inittab erneut zu lesen fileoder nur um das System herunterzufahren. Da init immer der erste Prozess auf einem System ist, ist seine Prozess-ID immer 1.

Sie können steuern, init mit Sellerie. Zum Beispiel, wenn Sie in den Runlevel 3 wechseln möchten, verwenden Sie folgenden Befehl:

telinit 3

Beim Wechseln der Runlevel versucht init, alle Prozesse abzubrechen, die nicht im inittab enthalten sind file für das neue Runlevel. Daher sollten Sie vorsichtig sein, wenn Sie die Runlevel ändern.

Wenn Sie Respawn-Jobs hinzufügen oder entfernen oder andere Änderungen am inittab vornehmen müssen filemüssen Sie init über die Änderung informieren und sie erneut lesen lassen file. Einige Leute benutzen kill -HUP 1, um init anzuweisen, dies zu tun. Diese traditionelle Methode funktioniert auf den meisten Unix-Versionen, sofern Sie sie korrekt eingeben. Sie können diesen telinit-Befehl jedoch auch ausführen:

telinit q

Sie können auch telinit s in den Single-User-Modus zu wechseln.

Herunterfahren

Auch init legt fest, wie das System heruntergefahren und neu gestartet. Der richtige Weg zum Herunterfahren eines Linux-Rechner ist, um das Herunterfahren Befehl verwenden.

Es gibt zwei grundlegende Möglichkeiten zum Herunterfahren verwenden. Wenn Sie das System anzuhalten, schaltet er die Maschine nach unten und hält sie nach unten. Um die Maschine halt sofort machen, verwenden Sie folgenden Befehl:

shutdown-h now

Auf den meisten modernen Maschinen mit relativ aktuellen Versionen von Linux, schneidet ein Halt die Macht der Maschine. Sie können auch den Rechner neu. Für einen Neustart use-R statt-h.

Das Herunterfahren dauert einige Sekunden. Sie sollten nie zurück und schalten Sie die Maschine während dieser Phase.

Im vorherigen Beispiel, ist jetzt die Zeit zum Herunterfahren. Dieses Argument ist obligatorisch, aber es gibt viele Möglichkeiten, Angeben es. Wenn Sie das Gerät nach unten gehen irgendwann in der Zukunft wollen, ist ein Weg zu benutzen + n, wobei n die Anzahl der Minuten Herunterfahren warten, bevor Sie ITS sollte funktionieren. Für andere Optionen, bei der shutdown (8) manual-Seite.

Um das System neu zu starten 10 Minuten, führen Sie diesen Befehl ein:

shutdown-r + 10

Unter Linux benachrichtigt das Herunterfahren jeden angemeldeten Benutzer darüber, dass der Computer ausfällt, aber es macht wenig echte Arbeit. Wenn Sie eine andere Zeit als jetzt angeben, wird beim Herunterfahren eine erstellt file genannt / etc / nologin. Wenn das file vorhanden ist, verbietet das System die Anmeldung von Personen außer dem Superuser.

Wenn die Zeit zum Herunterfahren des Systems endlich erreicht ist, weist das Herunterfahren init an, für einen Stopp auf Runlevel 0 und für einen Neustart auf Runlevel 6 umzuschalten. Wenn init enterBei Runlevel 0 oder 6 finden alle folgenden Aktionen statt, die Sie anhand der Skripte in rc0.d und rc6.d überprüfen können:

1. init tötet jeden Prozess, dass es (wie es beim Einschalten zu einem anderen Runlevel).

# Die ersten Befehle rc0.d / rc6.d werden ausgeführt und sperren das System files an Ort und Stelle und andere Vorbereitungen für das Herunterfahren treffen.
# Die nächsten rc0.d / rc6.d-Befehle heben alle auf fileandere Systeme als die Wurzel.
# Weitere rc0.d / rc6.d-Befehle stellen das Root erneut bereit fileschreibgeschütztes System.
# Noch mehr rc0.d / rc6.d-Befehle schreiben alle gepufferten Daten in die fileSystem mit dem Synchronisierungsprogramm.
# Die letzten rc0.d / rc6.d Befehlen Sie den Kernel neu zu starten oder mit dem reboot, halt oder poweroff Programm zu stoppen.

Die reboot und halt Programme verhalten sich anders für jeden Runlevel, was möglicherweise zu Verwirrung. Standardmäßig nennen diese Programme Herunterfahren mit der Option-r oder-h Optionen, aber wenn das System bereits im Stillstand oder Neustart Runlevel, sagen die Programme der Kernel selbst abgeschaltet sofort. Wenn Sie wirklich wollen, um Ihr Gerät heruntergefahren in Eile (ohne Berücksichtigung der Schäden aus einer ungeordneten Abschaltung möglich), verwenden Sie die Option-f.

Linux Boots

Hinterlasse einen Kommentar