Tipp: System neustarten ohne init und 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
# telinit 6
bash: /sbin/telinit: 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
root@linux # 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.
root@linux # 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
root@linux # 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.