Come spegnere quando non c'è systemd / init (ad esempio usando init = / bin / bash)?


9

poweroffsi lamenta che non può connettersi a systemd tramite DBus (ovviamente, non è vivo). Ho syncseguito kill $$, pensando che la morte di pid 1 avrebbe causato lo spegnimento del kernel, ma ciò ha causato un panico nel kernel. Ho quindi tenuto premuto il pulsante di accensione per forzare lo spegnimento.

Qual è il modo più corretto per spegnere in questo scenario?


C'è una premessa implicita non dichiarata della domanda che il set di strumenti systemd è installato. Quando "non c'è systemd" in realtà significa che non è installato alcun set di strumenti di systemd, che è anche il modo in cui il titolo può essere letto, le risposte sono piuttosto diverse; e questo probabilmente vale una domanda a sé stante.
JdeBP,

@JdeBP Hai ragione che, leggendo solo il titolo e ignorando il init=/bin/bashsuggerimento / le implicazioni, è ambiguo se systemd è installato o meno. Intendevo dire che non c'è sistema in esecuzione . In ogni caso, non avendo systemd in esecuzione, ho pensato che il set di strumenti di systemd sarebbe stato inutile e che le risposte avrebbero usato altri mezzi come quelli su sysrq.
JoL

Risposte:


10

Smonta i filesystem che hai montato. Il filesystem di root è un caso speciale; per questo puoi usare mount / -o remount,ro. Su Linux funziona umount /anche perché è effettivamente convertito nel precedente comando.


Detto questo, non devi preoccuparti di smontare troppo, a meno che

  1. È stato montato un vecchio file system come FAT, utilizzato dalla partizione di sistema EFI, o ext2, che non implementa journaling o equivalenti. Con un moderno filesystem, syncdovrebbe essere sufficiente e il filesystem si riparerà molto rapidamente all'avvio successivo.
  2. Potresti aver lasciato un processo in esecuzione che scrive nel filesystem e avevi intenzione di chiuderlo in modo pulito. In tal caso è utile tentare di smontare i filesystem, perché umount fallirebbe e mostrerebbe un errore di occupato per ricordare il rimanente writer.

Quanto sopra è la parte importante. Successivamente, è anche possibile spegnere comodamente l'hardware utilizzando poweroff -f. O riavviare con reboot -f.

C'è un systemdequivalente -specifica di poweroff -f: systemctl poweroff -f -f. Tuttavia poweroff -ffa la stessa cosa e systemdsupporta questo comando anche se è stato creato senza compatibilità SysV.


Tecnicamente, ricordo che il mio disco rigido USB è stato documentato come "rimozione sicura" di Windows o equivalente. Ma questo requisito non è sicuro in caso di mancanza di corrente, e Linux non lo fa comunque durante un normale arresto. È meglio interpretato nel senso che non dovresti fare jogging sul disco rigido mentre gira, anche cercando di scollegarlo. Uno spegnimento completo dovrebbe arrestare la rotazione dell'unità. Probabilmente puoi sentire, sentire o vedere se non si ferma :-).


Solo per sapere, non sto dimenticando di accettare. È solo che ho visto il consiglio di aspettare un po 'di tempo prima di accettare una risposta per consentire ad altri (forse in fusi orari diversi) di vedere la domanda e avere la possibilità di fornire le proprie risposte.
JoL

sync()è sufficiente per ext2. Si lamenterà di essere sporco ma non sarà stato effettivamente danneggiato, tranne per le informazioni di riepilogo. In genere considero init = / bin / bash o qualsiasi equivalente locale una situazione di emergenza.
Giosuè,

@Joshua ext2 fsck è incredibile . Ma le prestazioni di fsck su filesystem di grandi dimensioni sono molto peggiori del replay di journal. In una situazione di emergenza, non si desidera essere ritardati a causa di uno smontaggio impuro.
Fontejedi

Sai di fsck.mode=skipvero?
Giosuè,

3
@Joshua che è rilevante perché? Se esegui uno smontaggio sporco, alla fine dovrai riparare l'FS. Non utilizzare fsck.mode=skipper l'avvio normale dopo uno smontaggio impuro!
Fontejedi

5

Eseguirò semplicemente sotto due comandi:

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

Supponendo che la chiave magica sia abilitata nel kernel


4

Ok, quindi mi è appena venuto in mente che avevo la possibilità di farlo exec init. Da lì, probabilmente sarei in grado di farlo più tardi poweroff. Mi chiedo se ci siano alternative migliori, però.


@ G-Man non avvierà il normale processo di avvio e alla fine ti darà la tua normale shell?
muru,

2
@muru Potresti farlo exec init 0. Ciò non funzionerà con tutti i sistemi init, ma gli stessi passeranno attraverso una sequenza di spegnimento.
Austin Hemmelgarn,

1
Penso che questa sia davvero una buona risposta per altri motivi; in particolare perché la maggior parte dei casi di spegnimento non è desiderata tanto quanto il riavvio e questo evita il riavvio dopo aver riparato il danno.
Giosuè,

1
@Joshua È comodo, ma se vuoi essere più sicuro, spesso è una buona idea controllare che il processo di avvio completo funzioni :-).
Fontejedi

3

In effetti, vuoi chiamare reboot (2) syscall.

Due modi per farlo:

  1. Esegui reboot -fo poweroff -f, questo dovrebbe chiamare reboot(2)direttamente.

  2. Se ti trovi sul vero terminale virtuale Linux (non sull'emulatore di terminale GUI), premendo Ctrl+ Alt+ Delete.

Nota che la scorciatoia da tastiera può essere disabilitata da alcuni programmi spaziali dell'utente (di solito init), quando disabilitata la scorciatoia invierà invece un segnale a init.

Tutti i comandi sopra dovrebbero essere eseguiti dopo aver smontato tutti i dischi o rimontati in sola lettura e aver eseguito la sincronizzazione, altrimenti si potrebbero perdere dati non scritti. Se la shell è l'unico processo in esecuzione, la sincronizzazione potrebbe essere sufficiente.


1

È possibile utilizzare le chiavi Magic SysRq ( https://en.wikipedia.org/wiki/Magic_SysRq_key ) per spegnere il computer.

Per chiudere correttamente, è possibile utilizzare quanto segue (modulo di preventivo Wikipedia):

Un uso comune della chiave magica SysRq è di eseguire un riavvio sicuro di un computer Linux che altrimenti si è bloccato (abbr. REISUB ). Ciò può impedire che fsckvenga richiesto al riavvio e offre ad alcuni programmi la possibilità di salvare backup di emergenza di lavori non salvati. [5]   Il QWERTY (o AZERTY) mnemonico: " R aising E lephants I s S o U tterly B oring", " R eboot E ven I f S istema U tterly Broken "o semplicemente la parola" BUSIER "letta al contrario, vengono spesso utilizzate per ricordare la seguente sequenza di tasti SysRq:

  • un Raw (riprendi il controllo della tastiera da X),
  • t Erminate (invia SIGTERM a tutti i processi, permettendo loro di terminare con grazia),
  • k Ill (invia SIGKILL a tutti i processi, costringendoli a terminare immediatamente),
  • Sync (scarica i dati su disco),
  • Unmount (rimonta tutti i filesystem in sola lettura),
  • re Boot.

Ma sostituendo l'ultimo B con O (per azerty / qwerty) con "power O ff"


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.