¿Qué pasaría si se borrase init?

22

Solo una pregunta teórica ...

¿Pero qué pasaría si se eliminara init (en /sbin/init )?

    
pregunta Kaz Wolfe 02.06.2014 - 01:13

2 respuestas

31

El gestor de arranque cargará el kernel, el núcleo intentará ejecutar init, no lo encontrará y entrará en pánico.

La salida es reiniciar, editar los parámetros de arranque, agregar init=/bin/bash y arrancar de esa manera. El núcleo usará bash como init. Esto le dará la oportunidad de ejecutar comandos y arreglar el sistema.

Corrección
Aparentemente, el kernel (archivo init / main.c ) sí lo hace:

if (!try_to_run_init_process("/sbin/init") ||
    !try_to_run_init_process("/etc/init") ||
    !try_to_run_init_process("/bin/init") ||
    !try_to_run_init_process("/bin/sh"))
        return 0;

panic("No working init found.  Try passing init= option to kernel. "
      "See Linux Documentation/init.txt for guidance.");

Encontraría / bin / sh (que es un enlace para correr) y eso le dará un shell y la posibilidad de arreglarlo sin usar el parámetro de inicio init=/bin/bash .

    
respondido por el sмurf 02.06.2014 - 01:29
12

No pasa nada hasta que intenta reiniciar. Mientras el sistema se esté ejecutando, y no intente cambiar los niveles de ejecución ejecutando /sbin/init n , ni siquiera se daría cuenta de que ya no está.

En realidad, la eliminación de /sbin/init se puede deshacer si te das cuenta del error temprano y mantienes la calma. Los administradores del sistema se han recuperado de de "lobotomías" mucho más desagradables mientras mantienen el sistema operativo en funcionamiento.

Una forma de recuperarse de la eliminación de /sbin/init es reinstalar el paquete upstart usando APT.

La manera más macho de recuperarse es usar solo los recursos en la máquina misma. Un factor a su favor es que /sbin/init siempre se está ejecutando. Por lo tanto, cuando ejecuta rm /sbin/init , el archivo simplemente se desvincula del sistema de archivos. El inodo y el contenido del archivo permanecen en el disco y en la memoria hasta que el PID 1 se cierra. Simplemente necesita volver a crear /sbin/init desde el inodo apropiado.

La manera más fácil para lograr eso es:

# cp /proc/1/exe /sbin/init
# chmod 755 /sbin/init
    
respondido por el 200_success 02.06.2014 - 20:04

Lea otras preguntas en las etiquetas