Wie schalte ich aus, wenn kein systemd / init vorhanden ist (z. B. mit init = / bin / bash)?

9

poweroffbeschwert sich, dass es keine Verbindung zu systemd über DBus herstellen kann (natürlich lebt es nicht). Ich syncfolgte mit dem kill $$Gedanken, dass das Sterben von PID 1 den Kernel zum Ausschalten bringen würde, aber das verursachte eine Kernel-Panik. Ich hielt dann den Netzschalter gedrückt, um das Ausschalten zu erzwingen.

Was ist in diesem Szenario der beste Weg zum Ausschalten?

JoL
quelle
Es gibt eine unausgesprochene implizite Voraussetzung für die Frage, ob das systemd-Toolset installiert ist. Wenn "es gibt kein systemd" tatsächlich bedeutet, dass kein systemd-Toolset installiert ist, so dass der Titel auch gelesen werden kann, sind die Antworten ziemlich unterschiedlich. und das ist wahrscheinlich eine eigene Frage wert.
JdeBP
@JdeBP Sie haben Recht, wenn Sie nur den Titel lesen und den init=/bin/bashHinweis / die Implikation ignorieren , ist es nicht eindeutig, ob systemd installiert ist oder nicht. Ich hatte gemeint, dass kein System läuft . Da kein systemd ausgeführt wird, dachte ich auf jeden Fall, dass das systemd-Toolset nutzlos wäre und dass Antworten andere Mittel wie die über sysrq verwenden würden.
JoL

Antworten:

10

Hängen Sie die gemounteten Dateisysteme aus. Das Root-Dateisystem ist ein Sonderfall. dafür kannst du verwenden mount / -o remount,ro. Unter Linux umount /funktioniert das auch, weil es effektiv in den vorherigen Befehl konvertiert wird.


Das heißt, Sie müssen sich keine Sorgen machen, dass Sie zu viel abmontieren müssen, es sei denn

  1. Sie haben ein altes Dateisystem wie FAT - wie es von der EFI-Systempartition verwendet wird - oder ext2 bereitgestellt, das kein Journalling oder ein gleichwertiges Programm implementiert. Mit einem modernen Dateisystem syncsoll das reichen, und das Dateisystem repariert sich beim nächsten Start sehr schnell.
  2. Möglicherweise haben Sie einen laufenden Prozess verlassen, der in das Dateisystem schreibt, und Sie wollten ihn sauber herunterfahren. In diesem Fall ist es hilfreich, zu versuchen, die Dateisysteme zu mounten, da umount fehlschlagen und einen Besetztfehler anzeigen würde, der Sie an den verbleibenden Writer erinnert.

Das Obige ist der wichtige Teil. Danach können Sie die Hardware auch bequem mit ausschalten poweroff -f. Oder starten Sie mit neu reboot -f.

Es gibt ein systemdspezifisches Äquivalent von poweroff -f: systemctl poweroff -f -f. Dies poweroff -fgeschieht jedoch genauso und systemdunterstützt diesen Befehl, auch wenn er ohne SysV-Kompatibilität erstellt wurde.


Technisch gesehen erinnere ich mich, dass meine USB-Festplatte als "sicheres Entfernen" von Windows oder gleichwertig dokumentiert wurde. Diese Anforderung ist jedoch nicht ausfallsicher, und Linux tut dies ohnehin nicht während eines normalen Herunterfahrens. Es wird besser so interpretiert, dass Sie die Festplatte nicht während des Drehens bewegen sollten - auch nicht durch den Versuch, sie vom Stromnetz zu trennen. Ein vollständiges Ausschalten sollte das Drehen des Laufwerks stoppen. Sie können wahrscheinlich hören, fühlen oder sehen, ob es nicht aufhört :-).

sourcejedi
quelle
Nur damit Sie wissen, vergesse ich nicht zu akzeptieren. Es ist nur so, dass ich den Rat gesehen habe, einige Zeit zu warten, bevor ich eine Antwort akzeptiere, damit andere (möglicherweise in verschiedenen Zeitzonen) die Frage sehen und die Möglichkeit haben, ihre eigenen Antworten zu geben.
JoL
sync()reicht für ext2. Es wird sich darüber beschweren, dass es schmutzig ist, aber bis auf die zusammenfassenden Informationen nicht beschädigt worden sein. Generell betrachte ich init = / bin / bash oder ein lokales Äquivalent als Notsituation.
Joshua
@ Joshua ext2 fsck ist unglaublich . Die fsck-Leistung auf großen Dateisystemen ist jedoch viel schlechter als die Journalwiedergabe. In einer Notsituation möchten Sie nicht wegen eines unreinen Abhebens verzögert werden.
Sourcejedi
Sie wissen über fsck.mode=skiprichtig?
Joshua
3
@Joshua was ist relevant warum? Wenn Sie ein unsauberes Aufheben der Bereitstellung durchführen, müssen Sie möglicherweise den FS reparieren. Nicht fsck.mode=skipnormal booten nach einem unsauberen Unmount!
Sourcejedi
5

Ich werde einfach zwei Befehle ausführen:

echo s > /proc/sysrq-trigger    <= For sync
echo o > /proc/sysrq-trigger    <= For shutdown the system

Angenommen, der magische Schlüssel ist im Kernel aktiviert

SHW
quelle
4

Ok, also kam mir gerade der Gedanke, dass ich die Option dazu hatte exec init. Von dort würde ich wahrscheinlich später in der Lage sein poweroff. Ich frage mich jedoch, ob es bessere Alternativen gibt.

JoL
quelle
@ G-Man startet es nicht den normalen Bootvorgang und gibt dir irgendwann deine normale Shell?
Muru
2
@muru Du könntest tun exec init 0. Das funktioniert nicht mit allen Init-Systemen, aber die gleichen durchlaufen eine Shutdown-Sequenz.
Austin Hemmelgarn
1
Ich denke, dies ist aus anderen Gründen eine wirklich gute Antwort. Insbesondere, weil das Ausschalten in den meisten Fällen nicht so sehr erwünscht ist wie ein Neustart, und dies vermeidet den Neustart, sobald der Schaden behoben ist.
Joshua
1
@Joshua Das ist praktisch, aber wenn Sie am sichersten sein möchten, ist es oft eine gute Idee, zu überprüfen, ob der vollständige Startvorgang funktioniert :-).
Sourcejedi
3

Tatsächlich möchten Sie reboot (2) syscall aufrufen .

Zwei Möglichkeiten, wie Sie dies tun können:

  1. Führen Sie reboot -foder aus poweroff -f, dies sollte reboot(2)direkt aufrufen .

  2. Wenn Sie sich auf dem realen virtuellen Linux-Terminal befinden (nicht auf dem GUI-Terminal-Emulator), drücken Sie Ctrl+ Alt+ Delete.

Beachten Sie, dass die Tastenkombination von einem Benutzerbereichsprogramm (normalerweise init) deaktiviert werden kann. Wenn sie deaktiviert ist, sendet die Tastenkombination stattdessen ein Signal an init.

Alle oben genannten Befehle sollten ausgeführt werden, nachdem alle Festplatten bereitgestellt oder erneut als schreibgeschützt bereitgestellt und die Synchronisierung ausgeführt wurden. Andernfalls können ungeschriebene Daten verloren gehen. Wenn nur Ihre Shell ausgeführt wird, reicht möglicherweise die Synchronisierung aus.

Lie Ryan
quelle
1

Sie können die Magic SysRq-Schlüssel ( https://en.wikipedia.org/wiki/Magic_SysRq_key ) verwenden, um Ihren Computer auszuschalten.

Zum ordnungsgemäßen Herunterfahren können Sie Folgendes verwenden (Zitat aus Wikipedia):

Eine gebräuchliche Verwendung des magischen SysRq-Schlüssels besteht darin, einen sicheren Neustart eines Linux-Computers durchzuführen, der ansonsten gesperrt ist (Abk. REISUB ). Dies kann verhindern fsck, dass beim Neustart ein Erfordernis erforderlich ist, und gibt einigen Programmen die Möglichkeit, Notfallsicherungen nicht gespeicherter Arbeit zu speichern. [5]   Die QWERTY (oder AZERTY) Mnemonik: " R Aising E lephants I s S o U tterly B ORing", " R eboot E Ven I F S ystem U tterly Broken "oder einfach das rückwärts gelesene Wort" BUSIER "werden häufig verwendet, um sich an die folgende SysRq-Tastenfolge zu erinnern:

  • un Raw (übernimm die Kontrolle über die Tastatur von X zurück),
  • t Erminate (SIGTERM an alle Prozesse senden, damit diese ordnungsgemäß beendet werden können),
  • k Ill (SIGKILL an alle Prozesse senden und sie zwingen, sofort zu beenden),
  • Sync (Daten auf Festplatte leeren),
  • Unmount (alle Dateisysteme schreibgeschützt erneut bereitstellen),
  • re Boot.

Aber das letzte B durch O (für azerty / qwerty) für "power O ff" ersetzen

Breversa
quelle