Come configurare in anticipo il kernel Linux per riavviare in caso di panico?


13

Puoi mettere "panic = N" sulla riga di comando del kernel per far riavviare il sistema N secondi dopo un panico.

Ma esiste un'opzione di configurazione per specificare questo (diverso dall'opzione predefinita della riga di comando del kernel) prima che anche il boot loader entri in gioco? Qualche opzione del kernel potrebbe essere?


Attraverso il sottosistema watchdog del kernel, forse?
Gilles 'SO- smetti di essere malvagio' il

Il file di configurazione è il file di configurazione di avvio (grub) stesso, poiché è un parametro richiamato al momento dell'avvio e non ci si può aspettare che grub legga da qualche altro file di configurazione mentre il filesystem non è montato.
Nikhil Mulley,

Presumo che vorrai riavviare un altro kernel? Ciò richiederà un po 'di collaborazione dal bootloader e, a quel punto, sarai sicuramente in grado di passare argomenti da riga di comando. Alcuni bootloader possono essere configurati per riavviare un altro kernel in caso di errore di avvio (facendo in modo che un programma di userland indichi al bootloader che l'avvio è riuscito).
Gilles 'SO- smetti di essere malvagio' il

Sì, eseguirò l'avvio su un altro kernel o fornirò al kernel un diverso percorso rootfs. Esiste una variabile nella configurazione del bootloader che viene cambiata quando lo spazio utente viene avviato correttamente; se non cambia, sa provare qualcosa di diverso. Speravo in qualcosa di più della semplice riga di comando del kernel, perché la configurazione del bootloader può essere modificata dallo spazio utente di Linux. Se c'è un problema, è probabile che userspace abbia iniziato a scrivere, quindi il dispositivo si è spento; e esiste una configurazione predefinita di fallback per questo; Sto ancora cercando il più solido possibile.
Shawn J. Goff,

Risposte:



19

Da man proc:

/ Proc / sys / kernel / panic

Questo file dà accesso in lettura / scrittura alla variabile del kernel panic_timeout. Se questo è zero, il kernel andrà in loop su un panico; se diverso da zero indica che il kernel dovrebbe avviarsi automaticamente dopo questo numero di secondi. Quando si utilizza il driver del dispositivo watchdog software, l'impostazione consigliata è 60.


Sto cercando un'opzione di configurazione del kernel qui, non qualcosa dallo spazio utente. In particolare, se per qualche motivo, non è possibile montare il filesystem di root (o per qualche altro motivo, lo spazio utente non viene mai visualizzato), ho bisogno che si riavvii.
Shawn J. Goff,

@ ShawnJ.Goff Se sei anche preoccupato che lo spazio utente non venga visualizzato, stai facendo la domanda sbagliata (vuoi riavviare anche se il kernel non si fa prendere dal panico). E la risposta è una forma di cane da guardia per definizione; è necessario attivare il sottosistema watchdog (attivare un riavvio se /dev/watchdognon viene toccato da un po '). Vedere Documentation/watchdog/watchdog-api.txt.
Gilles 'SO- smetti di essere malvagio' il

1
Sì, ho un cane da guardia. Sto solo installando quante più reti di sicurezza possibili.
Shawn J. Goff,

Qualche modo per spegnere invece di riavviare?
Ciro Santilli 20 改造 中心 法轮功 六四 事件

Il caricatore di avvio di @ ShawnJ.Goff supporta la trasmissione di questo parametro molto prima dell'avvio di userspace. Comunque, vedi la mia risposta: unix.stackexchange.com/a/517364/6622
poige

5

Il file di configurazione è il file di configurazione di avvio (grub), poiché è un parametro richiamato al momento dell'avvio e non ci si può aspettare che grub legga da qualche altro file di configurazione mentre il filesystem non è montato.

Tuttavia, essendo questa un'impostazione inizializzata, il runtime può anche essere modificato tramite sysctl. Quindi, essenzialmente l'aggiornamento /etc/sysctl.confcon parametro kernel.panic = 3è un aggiornamento di configurazione.


1
grub non è su tutti i sistemi; quello con cui sto lavorando non sta usando grub. La configurazione del mio bootloader è memorizzata in flash.
Shawn J. Goff,

sì, ancora .. può montare il filesystem e leggere il file di configurazione del kernel? se sì, allora eccoti. Perché è il boot loader che passa i parametri del kernel al kernel durante il caricamento del kernel.
Nikhil Mulley,


3

Nel kernel di Linux, (ho visto in 3 e sopra) c'è un'opzione nel file .config. CONFIG_PANIC_TIMEOUTè il parametro e il valore predefinito è 0. In queste versioni del kernel Linux, anche la risposta di Lekensteyn funzionerà. Ma quella variabile sta prendendo dall'unica .config.

int panic_timeout = CONFIG_PANIC_TIMEOUT;

1

Supporto del kernel Linux CONFIG_CMDLINE_BOOL

Consentire di specificare gli argomenti di avvio nel kernel al momento della compilazione. Su alcuni sistemi (ad esempio quelli integrati), è necessario o conveniente fornire alcuni o tutti gli argomenti di avvio del kernel con il kernel stesso (ovvero, non fare affidamento sul boot loader per fornirli).

Ci sono alcuni esempi anche su questo "portale", ad es

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


0

È possibile utilizzare questa patch, che aggiunge un'opzione di configurazione.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.