¿Cómo apagar cuando no hay systemd / init (por ejemplo, usando init = / bin / bash)?

9

poweroffse queja de que no puede conectarse a systemd a través de DBus (por supuesto, no está vivo). Yo syncseguí por kill $$, pensando que la EPI 1 muriendo sería señalar el kernel para de apagado, pero que causó un kernel panic. Luego sostuve el botón de encendido para forzar el apagado.

¿Cuál es la forma más adecuada de apagarse en este escenario?

JoL
fuente
Existe una premisa implícita no establecida de la pregunta de que el conjunto de herramientas systemd está instalado. Cuando "no hay systemd" en realidad significa que no se ha instalado ningún conjunto de herramientas systemd, que es cómo también se puede leer el título, las respuestas son bastante diferentes; y eso probablemente valga una pregunta separada por derecho propio.
JdeBP
@JdeBP Tienes razón en que, leyendo solo el título e ignorando la init=/bin/bashpista / implicación, es ambiguo si systemd está instalado o no. Me refería a que no hay ningún sistema en ejecución . En cualquier caso, al no tener systemd en ejecución, pensé que el conjunto de herramientas systemd sería inútil y que las respuestas usarían otros medios como los de sysrq.
JoL

Respuestas:

10

Desmonta los sistemas de archivos que montaste. El sistema de archivos raíz es un caso especial; para esto puedes usar mount / -o remount,ro. En Linux, umount /también funciona porque se convierte efectivamente al comando anterior.


Dicho esto, no necesita preocuparse por desmontar demasiado, a menos que

  1. Ha montado un sistema de archivos antiguo como FAT, como lo utiliza la partición del sistema EFI, o ext2, que no implementa el registro diario o equivalente. Con un sistema de archivos moderno, syncse supone que es suficiente, y el sistema de archivos se reparará muy rápidamente en el próximo arranque.
  2. Es posible que haya dejado un proceso en ejecución que escribe en el sistema de archivos, y que tenía la intención de cerrarlo limpiamente. En ese caso, es útil intentar desmontar los sistemas de archivos, porque umount fallará y mostrará un error de ocupado para recordarle el escritor restante.

Lo anterior es la parte importante. Después de eso, también puede apagar convenientemente el hardware usando poweroff -f. O reiniciar con reboot -f.

Hay un systemdequivalente de específico de poweroff -f: systemctl poweroff -f -f. Sin embargo, poweroff -fhace lo mismo y systemdadmite este comando incluso si se ha creado sin compatibilidad SysV.


Técnicamente, recuerdo que mi disco duro USB fue documentado como un requerimiento de "eliminación segura" de Windows o equivalente. Pero este requisito no es seguro en caso de falla de energía, y Linux no lo hace durante un apagado normal de todos modos. Es mejor interpretar que significa que no debe mover el disco duro mientras está girando, incluso intentando desconectarlo. Un apagado total debería detener el giro de la unidad. Probablemente pueda escuchar, sentir o ver si no se detiene :-).

sourcejedi
fuente
Para que lo sepas, no me estoy olvidando de aceptar. Es solo que he visto el consejo de esperar un tiempo antes de aceptar una respuesta para permitir que otros (tal vez en diferentes zonas horarias) vean la pregunta y tengan la oportunidad de proporcionar sus propias respuestas.
JoL
sync()es suficiente para ext2. Se quejará de estar sucio, pero en realidad no se habrá dañado, excepto por la información resumida. Generalmente considero que init = / bin / bash o cualquier equivalente local es una situación de emergencia.
Joshua
@Joshua ext2 fsck es increíble . Pero el rendimiento de fsck en sistemas de archivos grandes es mucho peor que la reproducción de diarios. En una situación de emergencia, no desea retrasarse debido a un desmontaje impuro.
sourcejedi
Sabes sobre fsck.mode=skipderecho?
Joshua
3
@Joshua, que es relevante ¿por qué? Si realiza un desmontaje inmundo, eventualmente deberá reparar el FS. ¡No use fsck.mode=skiparrancar normalmente después de un desmontaje sucio!
sourcejedi
5

Simplemente ejecutaré debajo de dos comandos:

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

Asumiendo que la llave mágica esté habilitada en el núcleo

SHW
fuente
4

Ok, entonces se me ocurrió que tenía la opción de hacerlo exec init. A partir de ahí, probablemente podría hacerlo más tarde poweroff. Sin embargo, me pregunto si hay mejores alternativas.

JoL
fuente
@ G-Man, ¿no comenzará el proceso de arranque normal y finalmente te dará tu shell normal?
muru
2
@muru Podrías hacer exec init 0. Eso no funcionará con todos los sistemas init, pero los mismos pasarán por una secuencia de apagado.
Austin Hemmelgarn
1
Creo que esta es una muy buena respuesta por otras razones; particularmente porque la mayoría de los casos de apagado no es tan deseable como reiniciar y esto evita el reinicio una vez que se repara el daño.
Joshua
1
@Joshua Eso es conveniente, pero si quieres estar más seguro, a menudo es una buena idea verificar que el proceso de arranque completo funcione :-).
sourcejedi
3

Efectivamente, debe llamar a reinicio (2) syscall.

Dos formas de hacer esto:

  1. Ejecutar reboot -fo poweroff -f, esto debería llamar reboot(2)directamente.

  2. Si está en la terminal virtual de Linux real (no en el emulador de terminal GUI), presione Ctrl+ Alt+ Delete.

Tenga en cuenta que el método abreviado de teclado puede ser desactivado por algún programa de espacio de usuario (generalmente init), cuando se desactiva el método abreviado enviará una señal a init en su lugar.

Todos los comandos anteriores se deben realizar después de desmontar todos los discos o volver a montarlos como de solo lectura, y ejecutar la sincronización, de lo contrario, puede perder datos no escritos. Si su shell es el único proceso en ejecución, la sincronización puede ser suficiente.

Lie Ryan
fuente
1

Puede usar las teclas Magic SysRq ( https://en.wikipedia.org/wiki/Magic_SysRq_key ) para apagar su computadora.

Para cerrar correctamente, puede usar lo siguiente (formulario de cotización Wikipedia):

Un uso común de la clave mágica SysRq es realizar un reinicio seguro de una computadora Linux que de otro modo se hubiera bloqueado (abreviado REISUB ). Esto puede evitar que fsckse requiera al reiniciar y brinda a algunos programas la oportunidad de guardar copias de seguridad de emergencia del trabajo no guardado. [5]   El QWERTY (o AZERTY) mnemónicos: " R aising E lephants I s S o U tterly B oring", " R eboot E ven I f S istema U tterly Broken "o simplemente la palabra" BUSIER "leída al revés, a menudo se usa para recordar la siguiente secuencia de teclas SysRq:

  • un Raw (toma el control del teclado desde X),
  • t Erminate (envía SIGTERM a todos los procesos, permitiéndoles terminar con gracia),
  • k Ill (envía SIGKILL a todos los procesos, obligándolos a terminar de inmediato),
  • Sync (vaciar datos al disco),
  • Unmount (volver a montar todos los sistemas de archivos de solo lectura),
  • re Boot.

Pero sustituyendo la última B con O (por azerty / qwerty) por "power O ff"

Breversa
fuente