3.8 Systemstart und -stop bei Debian

3.8.1 System starten
3.8.2 System herunterfahren
3.8.3 inittab
3.8.4 Fehlermeldungen

3.8.1 System starten

Der Start eines Debian-System ähnelt zunächst sehr dem Systemstart anderer Linux-Versionen. Nach dem einschalten des Systems lädt der Bootloader (meist GRUB oder LILO auf X86-Systemen) den gewünschten Kernel in den Speicher. Der Kernel wird gestartet und bindet das Wurzeldateisystem (Root) ein. Als erstes Programm wird /sbin/init aufgerufen und erhält somit immer die Prozessnummer 1, alle weiteren Prozesse werden direkt oder indirekt von init gestartet. Man bezeichnet init deshalb auch als „Vater aller Prozesse“. init liest die Konfigurationsdatei/etc/inittab, in dieser ist festgelegt das zunächst das Skript /etc/init.d/rcS ausgeführt werden soll.

Dieses Skript führt in einer festgelegten Reihenfolge (aufsteigend in numerischer/alphabetischer Reihenfolge) alle Skripte im Verzeichnis /etc/rcS.d aus. Skripte deren Dateiname mit einem „K“ beginnt werden mit der Option „stop“ ausgeführt, mit dem Buchstaben „S“ beginnende Skripte dagegen werden mit der Option „start“ ausgeführt. Mit diesen Skripten werden beispielsweise alle weiteren Partitionen eingebunden, Module geladen, das Netzwerk aktiviert und Dienste gestartet. Aus Gründen der Kompatibilität werden abschliessend die Skripte in /etc/rc.boot/ ausgeführt.

Debian verwendet das vom Unix System V eingeführte Konzept verschiedener Zustände des Systems, die sogenannten Runlevel. Ein Runlevel ist ein Softwarezustand des Systems, der es nur einer bestimmten Gruppe von Prozessen erlaubt ausgeführt zu werden. So können Runlevel beispielsweise für unterschiedliche Betriebsmodi eines Systems verwendet werden. Es ist möglich zwischen (fast allen) Runleveln im laufenden Betrieb zu wechseln, ohne das System neu starten zu müssen.

Jeder der verfügbaren Runlevel kann mit dem Kommando telinit n, wobei n die Zahl des gewünschten Runlevels ist, aktiviert werden. Zum Einsatz kommen die Runlevel 0-9 sowie S und s, wobei den Runleveln 0, 1 und 6 eine besondere Bedeutung zukommt.

Debian Runlevel

0

halt, hält das System an ohne es neuzustarten.

1

bringt das System in den Single-User-Modus. Es werden nur die minimal benötigten Dienste gestartet, Netzwerkschnittstellen sind nicht aktiviert. Dieser Modus ist für Wartungsarbeiten gedacht.

2 bis 5

Multiuser Modus, in diesen Runleveln wird üblicherweise gearbeitet. Ein unverändertes Debian System läuft im Normalbetrieb im Runlevel 2.

6

Dieser Runlevel dient zum Neustarten (Reboot) des Systems.

7 bis 9

Diese Runlevel werden nicht verwendet. init ist aber in der Lage diese zu benutzen wenn vom Administrator entsprechende Skripte und Verzeichnisse angelegt werden.

S und s

bringen das System in den Single-User-Modus. Siehe auch Runlevel 1.

a bis c

Sogenannte „ondemand“-Runlevel. Siehe inittab.

3.8.2 System herunterfahren

Schalten Sie Ihr Debian GNU/Linux-System niemals einfach aus! Sie riskieren in diesem Fall einen Verlust Ihrer Daten!

Wenn Sie Ihren Computer zu Hause benutzen, möchten Sie ihn vielleicht nachts abschalten (eigentlich schaltet kein richtiger Linux-Fan seinen Computer jemals ab, aber trotzdem wollen wir diesen Ausnahmefall kurz besprechen...).

Es ist eine sehr schlechte Idee, einen Linux-Computer nach der Arbeit einfach auszuschalten oder die RESET-Taste zu drücken. Der Linux-Kernel hat, um die Performance zu erhöhen, einen internen Festplatten-Cache. Das bedeutet, dass Informationen temporär im Arbeitsspeicher (RAM) des Computers abgelegt werden, bevor sie auf der Festplatte gespeichert werden. Dies beschleunigt viele Aktionen stark. Periodisch wird der Inhalt dieses Puffers auf die Festplatte übertragen. Dies können Sie auch selbst durch das Kommando sync erreichen.

Um Ihren Rechner ordnungsgemäß herunterzufahren, benutzen Sie bitte das Kommando reboot (als Administrator - „root“) oder drücken die Tastenkombination STRG+ALT+DEL gleichzeitig. Debian GNU/Linux wird nun unmittelbar alle Programme beenden und den Rechner neu starten.

Um den Rechner abzuschalten, müssen Sie Administrator (root) sein. Benutzen Sie das Kommando shutdown -h now. Wenn Sie die Zeile System halted, it's safe to turn off the computer. sehen, können Sie den Rechner ausschalten.

Bei neueren Computern mit Advanced Power Management-Unterstützung (APM) und einem Kernel, der dies unterstützt, schaltet sich der Rechner selbsttätig ab.

Sie können aber auch als normaler Benutzer den Rechner jederzeit mit der Tastenkombination STRG+ALT+ENTF herunterfahren, wenn der Administrator dies nicht deaktiviert hat (in /etc/inittab). Keine Angst, das System wird auch so korrekt heruntergefahren, es gehen keine Daten verloren.

3.8.3 inittab

Die Datei /etc/inittab beschreibt die Prozesse die beim Systemstart und im normalen Betrieb ausgeführt werden. Ein Eintrag in dieser Datei ist wie folgt aufgebaut

id:runlevels:action:process
    

Zeilen die mit dem Zeichen # beginnen sind Kommentare und werden nicht ausgewertet. Die Werte in den einzelnen Feldern einer Datei haben die folgende Bedeutung

Felder in der Datei inittab

id

Ist eine eindeutige Zeichenkette mit der maximalen Länge von vier Zeichen.

runlevels

Beschreibt in welchen Runleveln der Prozess gestartet werden soll. Hier können mehrere Runlevel, beispielsweise 1234, angegeben werden.

action

Die auszuführende Aktion. Die Aktionen werden weiter unten im Detail beschrieben.

prozess

Das auszuführende Kommando.

Der Eintrag im Feld „action“ steuert auf welche Weise ein Prozess gestartet wird. Das Feld kann mit den im folgenden beschriebenen Werten belegt werden.

Aktionen

respawn

Der Prozess wird neugestartet falls das Programm beendet wird.

wait

Der Prozess wird beim wechsel in den angegebenen Runlevel gestartet und init wartet bis der Prozess beeendet wird.

once

Der Prozess wird einmalig gestartet wenn der Runlevel erreicht wird.

boot

Der Prozess wird beim Systemstart gestartet, das Feld „runlevels“ wird ignoriert.

bootwait

Der Prozess wird beim Systemstart gestartet, init wartet bis der Prozess beendet wird. Das Feld „runlevels“ wird ignoriert.

off

Dieser Eintrag wird ignoriert.

ondemand

Wird bei dem entsprechenden „ondemand“-Runlevel ausgeführt. Der Runlevel wird nicht gewechselt. „ondemand“-Runlevel sind „a“, „b“ und „c“.

initdefault

Beschreibt den normalen Runlevel eines Systems, Debian verwendet hier den Runlevel 2. Ist kein Runlevel angegeben, so wird beim Systemstart nach dem gewünschten Runlevel gefragt.

sysinit

Dieser Eintrag wird beim Systemstart, vor Einträgen mit der Kennung „boot“ oder „bootwait“ ausgeführt. Das Feld „runlevels“ wird nicht ausgewertet.

powerwait

Unterbrechungsfreie Stromversorgung Der Prozess wird gestartet wenn die Netzspannung unterbrochen wird (dies setzt natürlich eine USV - Unterbrechnungsfreie Stromversorgung - voraus). init wird über den Ausfall informiert, durch ein Programm welches die USV überwacht, und wartet bis der Prozess beendet ist.

powerfail

Wie „powerwait“, jedoch wird nicht auf die Beendigung des Prozesses gewartet.

powerokwait

Dieser Prozess wird ausgeführt wenn die Netzspannung wieder verfügbar ist.

powerfailnow

Geht die Ladung der USV soweit zur Neige das nur noch für kurze Zeit der Betrieb aufrecht erhalten werden kann, so wird dieser Eintrag ausgeführt und das System wird herruntergefahren.

ctrlaltdel

Wird die Tastenkombination STRG+ALT+ENTF gedrückt, so führt dies zum herrunterfahren das Systems, ähnlich wie man es von anderen Betriebssystemen kennt. Für ein Serversystem sollte dieser Eintrag deaktiviert werden um zu verhindern das das System „versehentlich“ heruntergefahren wird. Ansonsten bietet dieser Eintrag eine Möglichkeit das System ohne Administrator Passwort herunterzufahren.

kbrequest

Hierüber können spezielle Tastenkombinationen an init weitergereicht werden. Die Dokumentation hierzu findet sich im Paket kbd.

Hier einige Beispiele für Einträge in der Datei /etc/inittab. Zunächst der Eintrag für den Runlevel in dem das System gestartet werden soll

id:2:initdefault:
    

Debian verwendet hier den Runlevel 2, dies weicht von einigen anderen Distributionen ab. Mit folgendem Eintrag wird festgelegt welche Aktion auszuführen ist wenn das System im Single-User-Modus gestartet wird.

~~:S:wait:/sbin/sulogin
    

Die Runlevel 0 bis 6 werden über die folgenden Zeilen gesteuert, genau genommen wird in jedem Fall das Skript /etc/init.d/rc mit dem Runlevel als Option aufgerufen.

l0:0:wait:/etc/init.d/rc 0
l1:1:wait:/etc/init.d/rc 1
l2:2:wait:/etc/init.d/rc 2
l3:3:wait:/etc/init.d/rc 3
l4:4:wait:/etc/init.d/rc 4
l5:5:wait:/etc/init.d/rc 5
l6:6:wait:/etc/init.d/rc 6
    

Das nächste Beispiel aktiviert die virtuellen Konsolen. Debian bietet in den Runleveln 2 und 3 sechs virtuelle Konsolen, in den Runleveln 4 und 5 ist nur die erste Konsole aktiv.

1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6
    

Die Datei /etc/inittab auf einem Debian System ist gut kommentiert, so das mit Hilfe dieses Abschnittes und der Kommentare weitere Anpassungen leicht fallen werden. Aber Achtung: bitte jede Änderung gut prüfen da es bei Problemen zu einem Systemzustand führen kann in dem beispielsweise ein Login nicht möglich ist.

3.8.4 Fehlermeldungen

Mitunter kann es vorkommen das init nicht in der Lage ist ein Programm zu starten. Die Ursache kann ein fehlerhafter Eintrag in der Datei /etc/inittab, oder auch ein fehlerhaftes Programm sein. Bemerkbar macht sich dies durch die Ausgabe der Zeile

init: Id "D1" respawning to fast: disabled for 5 Minutes
    

wobei „D1“ hier beispielhaft für den entsprechenden Eintrag in der Datei inittab steht. Da init nicht in der Lage ist das Programm zu starten wird der entsprechende Eiintrag für die nächsten 5 Minuten ignoriert um die Belastung des Systems nicht unnötig in die Höhe zu treiben.