Gibt es unter Linux (insbesondere bei den RHEL-Derivaten CentOS und Fedora) einen Unterschied?
echo b > /proc/sysrq-trigger
"Starten Sie das System sofort neu, ohne die Bereitstellung oder Synchronisierung von Dateisystemen aufzuheben", so Wikipedia.
reboot -n
"Nicht vor dem Neustart synchronisieren oder anhalten. Beachten Sie, dass der Kernel und die Speichertreiber möglicherweise noch synchronisiert werden", so Man 8-Neustart. Gibt es tatsächlich einen Unterschied in diesem Verhalten?
Antworten:
Das
/sbin/reboot
ist eine reguläre ausführbare Datei im Dateisystem. Wenn Ihr Dateisystem abgespritzt ist (z. B. Dateisystemtreiber hängen, SATA-Hardware hängen oder Festplatten-Firmware hängen), sind die Änderungen für die erfolgreiche Ausführung dieser ausführbaren Datei gering bis gar nicht. Angenommen, Sie haben bereits eine Root-Shell geöffnet,echo b > /proc/sysrq-trigger
ist kein Dateisystemzugriff erforderlich.quelle
$ sync; echo b > /proc/sysrq-trigger
$ whereis echo echo: /usr/bin/echo /usr/share/man/man1p/echo.1p.gz /usr/share/man/man1/echo.1.gz
$ whereis reboot reboot: /usr/sbin/reboot /usr/share/man/man2/reboot.2.gz /usr/share/man/man8/reboot.8.gz
echo
ist normalerweise eine eingebaute Shell, daher ist sie verfügbar, wenn Sie eine Shell-Eingabeaufforderung haben. Ja,/bin/echo
existiert auch, da nach POSIX-Regeln alle Befehle im Pfad vorhanden sein müssen, aber durch eine Shell-Implementierung ersetzt werden können, um die Leistung zu erhöhen. Dasecho
wird so oft verwendet, dass nur sehr sehr einfache Shells es nicht implementieren. (Vergleichehelp echo
vs.man echo
)