Comment configurer tôt le noyau Linux pour redémarrer en cas de panique?

13

Vous pouvez mettre "panic = N" sur la ligne de commande du noyau pour faire redémarrer le système N secondes après une panique.

Mais existe-t-il une option de configuration pour spécifier cela (autre que l'option de ligne de commande du noyau par défaut) avant même que le chargeur de démarrage entre en jeu? Une option du noyau peut être?

Shawn J. Goff
la source
Grâce au sous-système de surveillance du noyau, peut-être?
Gilles 'SO- arrête d'être méchant'
le fichier de configuration est le fichier de configuration de démarrage (grub) lui-même, car il s'agit d'un paramètre appelé au moment du démarrage et on ne peut pas s'attendre à ce que grub lise à partir d'un autre fichier de configuration alors que le système de fichiers n'est pas monté.
Nikhil Mulley
Je suppose que vous voudrez redémarrer vers un autre noyau? Cela va nécessiter une certaine coopération du chargeur de démarrage, et à ce stade, vous serez sûrement en mesure de passer des arguments en ligne de commande. Certains chargeurs de démarrage peuvent être configurés pour redémarrer sur un autre noyau si un démarrage échoue (en faisant en sorte qu'un programme utilisateur indique au chargeur de démarrage que le démarrage a réussi).
Gilles 'SO- arrête d'être méchant'
Oui, je vais soit démarrer sur un autre noyau, soit donner au noyau un chemin rootfs différent. Il y a une variable dans la configuration du chargeur de démarrage qui est modifiée lorsque l'espace utilisateur démarre correctement; si cela ne change pas, il sait essayer quelque chose de différent. J'espérais quelque chose de plus que la simple ligne de commande du noyau pour cela, car la configuration du chargeur de démarrage peut être modifiée par l'espace utilisateur Linux. S'il y a un problème, il est probable que l'espace utilisateur a commencé à écrire, puis l'appareil s'est éteint; et il y a une configuration par défaut de secours pour cela; Je cherche toujours le plus solide que je puisse obtenir.
Shawn J. Goff,

Réponses:

2

Il ne semble pas y avoir une telle option de configuration. Le délai d'expiration par défaut est 0, ce qui, selon http://www.mjmwired.net/kernel/Documentation/kernel-parameters.txt#1898, est "attendre indéfiniment".

L'option est définie dans kernel / panic.c , vous pouvez écrire un patch qui définit la valeur initiale sur quelque chose de différent.

Pour coder en dur un redémarrage après 3 secondes, changez:

int panic_timeout;

à:

int panic_timeout = 3;
Lekensteyn
la source
C'est un mauvais conseil de bricoler avec les sources quand il y a un mécanisme spécial: unix.stackexchange.com/a/517364/6622
poige
19

De man proc:

/ proc / sys / kernel / panic

Ce fichier donne un accès en lecture / écriture à la variable du noyau panic_timeout. Si c'est zéro, le noyau bouclera en panique; si différent de zéro, cela indique que le noyau devrait redémarrer automatiquement après ce nombre de secondes. Lorsque vous utilisez le pilote de périphérique de surveillance du logiciel, le paramètre recommandé est 60.

jpalecek
la source
Je cherche une option de configuration du noyau ici, pas quelque chose de l'espace utilisateur. Plus précisément, si pour une raison quelconque, il ne peut pas monter le système de fichiers racine (ou pour une autre raison, l'espace utilisateur ne s'affiche jamais), j'en ai besoin pour redémarrer.
Shawn J. Goff
@ ShawnJ.Goff Si vous êtes également préoccupé par le fait que l'espace utilisateur ne se présente pas, vous posez la mauvaise question (vous voulez redémarrer même si le noyau ne panique pas). Et la réponse est une forme de chien de garde par définition; vous devez activer le sous-système de surveillance (déclencher un redémarrage s'il /dev/watchdogn'a pas été touché depuis un certain temps). Tu vois Documentation/watchdog/watchdog-api.txt.
Gilles 'SO- arrête d'être méchant'
1
Oui, j'ai un chien de garde. Je mets juste autant de filets de sécurité en place que possible.
Shawn J. Goff
Est-il possible d'arrêter au lieu de redémarrer?
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
@ Le chargeur de démarrage ShawnJ.Goff prend en charge la transmission de ce paramètre bien avant le démarrage de l'espace utilisateur. Quoi qu'il en soit, voir ma réponse: unix.stackexchange.com/a/517364/6622
poige
5

Le fichier de configuration est le fichier de configuration de démarrage (grub) lui-même, car il s'agit d'un paramètre appelé au moment du démarrage et on ne peut pas s'attendre à ce que grub lise à partir d'un autre fichier de configuration alors que le système de fichiers n'est pas monté.

Cependant, étant un paramètre initialisé, le runtime peut également être modifié sysctl. Donc, essentiellement la mise /etc/sysctl.confà jour avec paramètre kernel.panic = 3est une mise à jour de configuration.

Nikhil Mulley
la source
1
grub n'est pas sur tous les systèmes; celui avec qui je travaille n'utilise pas grub. La configuration de mon chargeur de démarrage est stockée en flash.
Shawn J. Goff
oui, encore .. peut-il monter le système de fichiers et lire le fichier de configuration du noyau? si oui, alors voilà. Parce que c'est le chargeur de démarrage qui transmet les paramètres du noyau au noyau lors du chargement du noyau.
Nikhil Mulley
3

kernel.panicest un sysctl . Il existe de nombreuses façons de les configurer, par exemple via sysctl.d .

Tobu
la source
3

Dans le noyau Linux, (j'ai vu en 3 et plus), il y a une option dans le .config. CONFIG_PANIC_TIMEOUTest le paramètre par défaut 0. Dans ces versions du noyau Linux, la réponse de Lekensteyn fonctionnera également. Mais cette variable prend de la .configseule.

int panic_timeout = CONFIG_PANIC_TIMEOUT;
RatDon
la source
1

Prise en charge du noyau Linux CONFIG_CMDLINE_BOOL

Permet de spécifier des arguments de démarrage pour le noyau au moment de la construction. Sur certains systèmes (par exemple, ceux intégrés), il est nécessaire ou pratique de fournir certains ou tous les arguments de démarrage du noyau avec le noyau lui-même (c'est-à-dire de ne pas compter sur le chargeur de démarrage pour les fournir.)

Il y a même des exemples sur ce "portail", par exemple

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

poige
la source
0

Vous pouvez utiliser ce patch, qui ajoute une option de configuration.

mgalgs
la source