¿Es posible reiniciar un sistema operativo Linux sin reiniciar el hardware?

89

¿Hay alguna manera de reiniciar un sistema Linux (Debian en particular) sin reiniciar el hardware?

Tengo un controlador RAID que tarda un poco en ejecutarse antes de que se inicie el sistema operativo, y me gustaría si hubiera una manera de reiniciar rápidamente el sistema operativo Linux sin tener que pasar por todo el proceso de reinicio para reiniciar el controlador RAID, etc.

lacrosse1991
fuente
66
Todos los sistemas basados ​​en UEFI pueden cambiar el sistema operativo sin reiniciar. También tiene kexec()cuál es exec(), pero para los núcleos de Unix.
user2284570

Respuestas:

98

Utilizo kexec-reboot en casi todos mis sistemas de producción.

Funciona increíblemente bien, lo que me permite evitar el largo tiempo de POST en los servidores HP ProLiant y reducir el ciclo de arranque de 5 minutos a ~ 45 segundos.

Ver: https://github.com/error10/kexec-reboot

La única advertencia es que no parece funcionar en los sistemas RHEL / CentOS 6.x que arrancan UEFI. Pero la mayoría de las combinaciones sensatas de SO / hardware funcionan.

ewwhite
fuente
62
¡Yo escribí esa! Pero aún funciona bastante bien ...
Michael Hampton
1
Fascinante. Entonces, ¿cómo se ve el proceso real? De acuerdo con un artículo de Hariprasad Nellitheertha (vinculado desde la página de wikipedia kexec), "a diferencia del proceso normal de reinicio, kexec no realiza un apagado limpio del sistema antes de reiniciar. Le corresponde a usted matar todas las aplicaciones y desmontar los sistemas de archivos antes de intentar un reinicio kexec ". Noto algunas cosas cuestionables, por ejemplo, Wim Coekaerts dice que "sync; umount -a; kexec -e" hará un reinicio muy rápido. Pero no puede desmontar un sistema de archivos ocupado. Al leer la web, parece que muchos ignoran la parte de 'matar todas las aplicaciones'.
Mike S
2
@ Mike Esto no es kexec. Es la kexec-rebootutilidad. La descripción de Github describe la diferencia y lo que la utilidad agrega al proceso.
ewwhite
44
@MikeS Después de organizar kexec, simplemente haces una shutdown -r. Las secuencias de comandos del sistema notarán que kexec se ha organizado y hará lo correcto. ¿Cómo se ve? Tres o cuatro o quince minutos más cortos. Tengo un video de calidad muy horrible que saqué de la consola de iDRAC, pero realmente no quieres sufrir por eso ... El kexec-rebootscript está destinado a automatizar el proceso de llevar los argumentos correctos de la línea de comandos a kexec, lo que puede ser complicado .
Michael Hampton
1
@MichaelHampton - genial. Veo que en CentOS 6.5 cerca del final de /etc/rc3d/rc6.d/S01reboot existe: [ -n "$kexec_command" ] && $kexec_command -e -x >& /dev/null. Por lo tanto, si kexec -l carga un núcleo, el sistema se reiniciará sin un / sbin / reinicio completo ... ¡kexec está integrado! No lo sabía, gracias. Supongo que las distribuciones más modernas también lo tienen cubierto. Por cierto, si kexec no se ejecutó previamente con -l, el script de reinicio dirá "¡No se ha cargado nada!" Es por eso que la salida se envía a / dev / null, y por qué nunca estuve al tanto de esta instalación.
Mike S
17

Sí, es posible. kexec permitirá que un kernel de Linux se inicie directamente desde Linux sin pasar por el proceso de arranque del BIOS.

Kasperd
fuente
Además, el UEFI permite cambiar el sistema operativo sin reiniciar.
user2284570
1
@ user2284570 Hasta donde yo sé, UEFI no proporciona dicho mecanismo.
Jonathon Reinhart
16

Si. Debes usar kexec-tools. Para hacer la vida más fácil, uso kexec-reiniciar .

$sudo apt-get install kexec-tools
$wget https://raw.githubusercontent.com/vadmium/kexec-reboot/master/kexec-reboot
$chmod +x kexec-reboot
$sudo mv kexec-reboot /usr/local/sbin/kexec-reboot
$sudo /usr/local/sbin/kexec-reboot
Jose Raul Barreras
fuente
13
Para que no haya confusión, no escribí esto.
Michael Hampton
Es probable que solo sea Ubuntu / Debian, ¿verdad?
ewwhite
1
@ewwhite Probablemente funcionaría en RHEL / CentOS, pero en una lectura del código encontré varios puntos problemáticos donde los casos extremos podrían hacer que fallara. Y la fuente parece reconocer esto con un comentario:# The error checking is very basic.
Michael Hampton