¿Cómo configurar temprano el kernel de Linux para reiniciar en pánico?

13

Puede poner "panic = N" en la línea de comando del kernel para que el sistema se reinicie N segundos después de un pánico.

¿Pero hay una opción de configuración para especificar esto (que no sea la opción de línea de comando predeterminada del núcleo) antes de que incluso el cargador de arranque entre en juego? Alguna opción de kernel puede ser?

Shawn J. Goff
fuente
¿A través del subsistema kernel watchdog, tal vez?
Gilles 'SO- deja de ser malvado'
El archivo de configuración es el archivo de configuración de arranque (grub) en sí, ya que es un parámetro invocado en el momento del arranque y no se puede esperar que grub lea de algún otro archivo de configuración mientras el sistema de archivos no está montado.
Nikhil Mulley
¿Supongo que querrás reiniciar en un kernel diferente? Eso requerirá cierta cooperación del gestor de arranque, y en ese punto, seguramente podrá pasar argumentos de línea de comandos. Algunos gestores de arranque pueden configurarse para reiniciarse en un kernel diferente si falla un arranque (haciendo que un programa de usuario indique al gestor de arranque que el arranque se realizó correctamente).
Gilles 'SO- deja de ser malvado'
Sí, iniciaré en un kernel diferente o le daré al kernel una ruta rootfs diferente. Hay una variable en la configuración del gestor de arranque que cambia cuando el espacio de usuario se inicia correctamente; Si no cambia, sabe probar algo diferente. Esperaba algo más que solo la línea de comando del núcleo para esto porque la configuración del gestor de arranque puede ser modificada por el espacio de usuario de Linux. Si hay un problema, es probable que el espacio de usuario comience a escribir, luego el dispositivo se apagó; y hay una configuración predeterminada de reserva para eso; Todavía estoy buscando el más sólido que pueda conseguir esto.
Shawn J. Goff

Respuestas:

2

No parece haber una opción de configuración. El tiempo de espera predeterminado es 0, que según http://www.mjmwired.net/kernel/Documentation/kernel-parameters.txt#1898 es "esperar para siempre".

La opción se define en kernel / panic.c , puede escribir un parche que establezca el valor inicial en algo diferente.

Para codificar un reinicio después de 3 segundos, cambie:

int panic_timeout;

a:

int panic_timeout = 3;
Lekensteyn
fuente
Es un mal consejo jugar con las fuentes cuando hay un mecanismo especial: unix.stackexchange.com/a/517364/6622
poige
19

De man proc:

/ proc / sys / kernel / panic

Este archivo proporciona acceso de lectura / escritura a la variable del núcleo panic_timeout. Si esto es cero, el núcleo entrará en pánico; si no es cero, indica que el núcleo debería reiniciarse automáticamente después de este número de segundos. Cuando utiliza el controlador del dispositivo de vigilancia del software, la configuración recomendada es 60.

jpalecek
fuente
Estoy buscando una opción de configuración del kernel aquí, no algo del espacio de usuario. Específicamente, si por alguna razón no puede montar el sistema de archivos raíz (o por alguna otra razón, el espacio de usuario nunca aparece), lo necesito para reiniciar.
Shawn J. Goff
@ ShawnJ.Goff Si también le preocupa que el espacio de usuario no aparezca, entonces está haciendo una pregunta incorrecta (desea reiniciar incluso si el núcleo no entra en pánico). Y la respuesta es una forma de perro guardián por definición; debe activar el subsistema de vigilancia (desencadenando un reinicio si /dev/watchdogno se ha tocado en mucho tiempo). Ver Documentation/watchdog/watchdog-api.txt.
Gilles 'SO- deja de ser malo'
1
Sí, tengo un perro guardián. Solo estoy poniendo tantas redes de seguridad como sea posible.
Shawn J. Goff
¿Alguna forma de apagar en lugar de reiniciar?
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
El cargador de arranque @ ShawnJ.Goff admite pasar este parámetro mucho antes de que se inicie el espacio de usuario. De todos modos, vea mi respuesta: unix.stackexchange.com/a/517364/6622
poige
5

El archivo de configuración es el archivo de configuración de arranque (grub) en sí, ya que es un parámetro invocado en el momento del arranque y no se puede esperar que grub lea de otro archivo de configuración mientras el sistema de archivos no está montado.

Sin embargo, al ser una configuración inicializada, el tiempo de ejecución también se puede modificar sysctl. Entonces, esencialmente actualizar /etc/sysctl.confcon el parámetro kernel.panic = 3es una actualización de configuración.

Nikhil Mulley
fuente
1
grub no está en todos los sistemas; con el que estoy trabajando no está usando grub. La configuración de mi gestor de arranque se almacena en flash.
Shawn J. Goff
sí, aún así ... ¿puede montar el sistema de archivos y leer el archivo de configuración del kernel? en caso afirmativo, ahí lo tienes. Porque es el gestor de arranque el que pasa los parámetros del kernel al kernel mientras lo carga.
Nikhil Mulley
3

kernel.panices un sysctl . Hay muchas formas de configurarlos, por ejemplo a través de sysctl.d .

Tobu
fuente
3

En Linux Kernel, (he visto en 3 y superiores) hay una opción en el .config. CONFIG_PANIC_TIMEOUTes el parámetro y su valor predeterminado es 0. En estas versiones del kernel de Linux, la respuesta de Lekensteyn también funcionará. Pero esa variable está tomando del.config única.

int panic_timeout = CONFIG_PANIC_TIMEOUT;
RatDon
fuente
1

Kernel de Linux soporta CONFIG_CMDLINE_BOOL

Permitir especificar argumentos de arranque para el núcleo en tiempo de compilación. En algunos sistemas (por ejemplo, los integrados), es necesario o conveniente proporcionar algunos o todos los argumentos de arranque del núcleo con el núcleo mismo (es decir, no confiar en el cargador de arranque para proporcionarlos).

Hay algunos ejemplos incluso en este "portal", por ejemplo,

/superuser/778826/config-cmdline-override-set-but-hardcoded-vga-boot-parameter-ignored

poige
fuente
0

Puede usar este parche, que agrega una opción de configuración.

mgalgs
fuente