QuickTipp: System neustarten ohne init / systemd

Nach einem Ausfall der Festplatte auf einem Server kann es vorkommen, dass die normalen Wege einen Neustart durchzuführen nicht mehr funktionieren.

# reboot
bash: /sbin/reboot: Input/output error
# shutdown -r now
bash: /sbin/shutdown: Input/output error
# init 6
bash: /sbin/init: Input/output error

Das Problem mit der Festplatte verhindert das Laden der Befehle und macht sie somit unnutzbar.

Wennn nun kein physikalischer Zugriff oder eine Netzkonsole zur Administration des Servers zur Verfügung steht ist meist ein eine Fahrt zum Server oder die Nutzung des Services vor Ort nicht zu umgehen.

Oftmals reicht der Neustart um den Server wieder zum Laufen zu bekommen oder zumindest einen Zustand herzustellen in dem ein Filesystemcheck die Festplatte prüft und eventuelle Fehler behebt.

Da die normalen Kommandos nicht zur Verfügung stehen muss man sich einer anderen Möglichkeit bedienen den Server neu zu starten.

Der magic SysRq key bietet die Möglichkeit Kommandos direkt an den Kernel durch das /proc Dateisystem zu senden. Hierzu muss der Kernel mit der Option CONFIG_MAGIC_SYSRQ kompiliert sein. Dies trifft für die meisten Distributionen und die darin eingesetzten Kernel zu. Im nächsten Schritt erfolgt die Aktivierung. Diese erfolgt entweder über einen Kernelparameter oder einen Eintrag in der Datei /etc/sysctl.conf

echo "kernel.sysrq = 1" >> /etc/sysctl.conf

Da im aktuell laufenden Server kaum Kommandos zur Verfügung stehen – die Festplatte ist defekt – können wir auch direkt per echo den magic SysRq aktivieren.

echo 1 > /proc/sys/kernel/sysrq

Der Befehl echo funktioniert an dieser Stelle, da er ein in die Shell eingebauter Befehl ist und somit schon mit der Shell zusammen im Speicher liegt ohne Zugriff auf die Festplatte.

Nun stehen uns die Tastaturkombinationen für den magic SysRq zur Verfügung. Leider können wir diese nicht per SSH-Verbindung auf dem Server auslösen, sondern müssten sie direkt auf einer angeschlossenen Tastatur eingeben.

Diese Eingabe lässt sich aber auch durch einen echo Befehl in das /proc Dateisystem simulieren und ein Reboot kann mit dem folgenden Aufruf durchgeführt werden

echo b > /proc/sysrq-trigger

Im Gegensatz zum normalen Neustart werden weder Versuche durchgeführt die eingehangenen Dateisysteme auszuhängen oder per sync nicht geschriebene Daten auf die Festplatten zu schreiben. Es wird nur ein Reboot ausgeführt unter Umgehung aller Scripte und Dienste direkt über den Kernel. Daher sollte diese Art eines Neustarts nur benutzt werden, wenn es absolut notwendig ist.

In unserem Fall wäre ein Wegschreiben der Daten sowieso nicht möglich gewesen und es macht nichts aus.

Zusätzlich zum Reboot des Servers ist es möglich über magic SysRq auch die Speicherinformationen in die Konsole zu schreiben, alle Dateisysteme zu syncen, alle Dateisystem in den Read-Only – Modus zu setzen oder auch den Server komplett abzuschalten.

Alle Zeichen und die Tastaturkombinationen für die verschiedenen Plattformen sind in der Datei sysrq.txt hinterlegt, die in der Linux Kernel Dokumentation zu finden ist. Auch die Suche nach sysrq.txt in einer Suchmaschine findet die Datei.