¿Cuándo se requiere un reinicio?

27

Además de actualizar el kernel, ¿hay algún cambio en un sistema Linux que requiera un reinicio? Sé que hay situaciones en las que un reinicio facilita las cosas, pero ¿hay alguna que no se pueda lograr excepto con un reinicio?

Para aclarar: estoy pensando en un sistema de escritorio o servidor típico que no sufre un mal funcionamiento del hardware.

marca
fuente
3
todo se puede hacer sin reiniciar. incluso cambiar el núcleo se puede hacer usando ksplice para que pueda intercambiar en caliente su núcleo. La única cosa que hay que tener en cuenta es el hecho de hacer todo sin necesidad de reiniciar puede ser muy complejo
Kiwy
44
Su pregunta es muy amplia, porque "sistema Linux" puede significar muchas cosas muy diferentes.
Zrin
Además, "cualquier cambio" puede significar muchas situaciones diferentes. ¿La recuperación del disco duro fallido que forma parte de un espejo MD es un cambio? En caso afirmativo, entonces, desafortunadamente, a veces requerirá un reinicio, porque, por ejemplo, algunas fallas de HDD (en algunos controladores de HDD) pueden hacer que el sistema no responda. Pero probablemente no esté preguntando sobre tales "cambios" ...
Zrin
3
@Kiwy Técnicamente ksplice no cambia el núcleo . Ksplice permite parchear un kernel en ejecución mientras se está ejecutando. Quizás esté pensando en kexec , que permite cargar una nueva imagen del núcleo "sobre" un núcleo en ejecución en la memoria.
Thomas Nyman
Esto me recuerda que Windows XP (nunca fui más allá) nunca se cierra al reiniciar, incluso si acaba de actualizar IE8 (o cualquier número) que no se ha abierto durante 4 años, desde la instalación de Windows y, por lo tanto, la necesidad de descargar un navegador.
Shahbaz

Respuestas:

44

Un par de cosas vienen a la mente:

  • Recuperarse de un kernel panic

    Un kernel panic, por definición, no se puede recuperar sin reiniciar el kernel.

  • Recuperarse de bloqueos que lo dejan sin acceso a la terminal

    Si el sistema no responde y está varado sin una forma de emitir comandos para recuperarse, lo único que puede hacer es reiniciar. Por lo general, querrás evitar el ciclo de potencia manual. Para este tipo de situaciones, el kernel de Linux tiene soporte Magic SysRq que se puede usar para reiniciar la máquina en caso de emergencia.

    Mientras la CONFIG_MAGIC_SYSRQopción se haya habilitado en la configuración del kernel y la kernel.sysrq sysctlopción esté habilitada, puede emitir comandos directamente al kernel con combinaciones mágicas de teclas SysRq:

    Tenga en cuenta que Alt+ a SysRqcontinuación significa presionar y mantener presionado Alt , luego presionar y mantener presionado SysRq (normalmente la PrintScrntecla).

    1. Alt+ SysRq+ r: recuperar el control del teclado
    2. Alt+ SysRq+ e: enviar SIGTERMa todos los procesos, excepto init, dándoles la oportunidad de terminar con gracia
    3. Alt+ SysRq+ i: enviar SIGKILLa todos los procesos, excepto initforzarlos a terminar
    4. Alt+ SysRq+ s: intenta sincronizar todos los sistemas de archivos montados
    5. Alt+ SysRq+ u: volver a montar todo el sistema de archivos de solo lectura
    6. Alt+ SysRq+ b: reiniciar, o

      Alt+ SysRq+ o: apagado

    Una mnemotécnica para las combinaciones mágicas de teclas SysRq para intentar un reinicio elegante es:

    " R eboot E ven I f S istema U tterly B roke "

    Para los servidores sin cabeza, incluso hay un objetivo de iptables que permite secuencias SysRq remotas a través de una red.

  • Recuperarse del estado no arrancable

    Si el sistema ya ha sido llevado a un estado donde no es posible un arranque regular (por ejemplo, como resultado de una actualización fallida del sistema, sistema de archivos dañado, etc.), entonces la única forma de acceder a una consola de recuperación en el sistema podría ser reiniciar usando las opciones apropiadas de tiempo de arranque.

  • Cambiar los parámetros del kernel en el tiempo de arranque

    Algunos parámetros del kernel (por ejemplo, auditpara habilitar / deshabilitar la auditoría del kernel) solo se pueden configurar cuando el kernel se carga en el momento del arranque.

Thomas Nyman
fuente
3
"Reiniciar incluso si el sistema se rompió por completo" Estoy favoreciendo esta pregunta por si acaso, pero no creo que alguna vez lo olvide.
embedded.kyle
1
Posiblemente valga la pena señalar que puede salir del pánico con un kexec y evitar un reinicio completo. Esto también se aplica igualmente a la salida del punto de estado no arrancable. (no son lo mismo de ninguna manera, al menos en un sistema x86). Sin embargo, +1 para el resto de esta respuesta.
Vality
@Vality Gracias por tu comentario. Si kexec implica un reinicio, quizás dependa, en cierta medida, de los puntos de vista. La documentación de kdump, por ejemplo, describe kexec-on-panic como un reinicio que conserva la imagen de memoria del núcleo del sistema. En cuanto al punto sobre el estado no arrancable, también consideré cosas como la configuración incorrecta del cargador de arranque (por ejemplo, la falla al cargar el núcleo en primer lugar), donde kexec no ayuda. Dada la naturaleza de la pregunta, creo que es inevitable alguna diferencia de opinión con respecto a la semántica.
Thomas Nyman
@ThomasNyman Gracias por su respuesta detallada, mirando la pregunta que tiene razón, creo. Creo que hablar sobre kexec probablemente complicará innecesariamente las cosas para el público objetivo o esta pregunta. Y también hace un buen punto con respecto a los errores del cargador de arranque.
Vality
¡Nunca había notado ese pequeño SysRq escrito debajo de la pantalla de impresión! Esto es asombroso ¡Ojalá hubiera sabido esto cuando estaba aprendiendo la programación del módulo del kernel!
Shahbaz
2

Hay dos veces que puedo pensar en dónde me gustaría reiniciar:

  1. Cuando necesito asegurarme de que el sistema se puede iniciar en el estado correcto.

    Una vez trabajé en un sistema que tenía algún demonio configurado mientras se estaba ejecutando. Después de que se ejecutó durante algunos años, una falla de energía provocó que se reiniciara, pero el demonio no era parte del proceso de inicio y nadie tenía idea de cómo se había configurado años antes. El sistema estuvo inactivo durante días mientras descubríamos cómo reconfigurarlo.

    En realidad, reiniciar es la única forma de saber con certeza que su sistema se reiniciará correctamente después de una falla de energía.

  2. Cuando se ha actualizado una biblioteca del sistema.

    Digamos que se ha descubierto una falla de seguridad importante en una biblioteca que se comparte con muchas aplicaciones / servidores en el sistema. Puede actualizar la biblioteca sin reiniciar, pero ¿cuántos procesos se siguen ejecutando con la biblioteca insegura cargada? Puede reiniciar minuciosamente cualquier cosa utilizando la biblioteca anterior (si puede resolverlo), pero eso es propenso a errores y puede llevar más tiempo que simplemente reiniciar.

    El reinicio es la mejor manera de asegurarse de que todos los procesos en ejecución aún no estén utilizando la antigua biblioteca con errores.

Gabe
fuente
Hay mejores formas de encontrar todos los archivos binarios dependiendo de una biblioteca determinada si usa un buen administrador de paquetes. revdep-rebuilt de Gentoo me viene a la mente.
Spidey
1
@Spidey: una vez que reconstruye esos binarios, ¿cómo se asegura de que no haya procesos antiguos ejecutándose con la biblioteca con errores?
Gabe
1
¿Cómo sabes qué demonios tienen cargadas las bibliotecas infractoras?
Gabe
1
@Gabe Podría, por ejemplo, verificar qué procesos tienen las bibliotecas asignadas a su espacio de memoria utilizando lsofantes de actualizar las bibliotecas.
Thomas Nyman
1
@Gabe Claro, y aunque estoy de acuerdo en que esa es una razón perfectamente buena para reiniciar, el OP explícitamente no pregunta en qué casos un reinicio es más conveniente , sino cuándo es absolutamente necesario .
Thomas Nyman
0

Si quiere decir cambios planificados en la configuración del software y asume que el hardware funciona perfectamente (todavía no lo he visto) y un software libre de errores (ya sabe ...), entonces solo un error en el núcleo o un controlador lo obligaría a reiniciar. :)

Aparte de eso ... No estoy seguro de si sería posible reemplazarlo initsin cambiar al modo de usuario único y hacer algo de magia que esencialmente no es muy diferente a un reinicio.

Zrin
fuente