Como configurar o kernel do Linux para reiniciar em pânico?

13

Você pode colocar "panic = N" na linha de comando do kernel para fazer o sistema reiniciar N segundos após um pânico.

Mas existe uma opção de configuração para especificar isso (além da opção de linha de comando do kernel padrão) antes mesmo que o carregador de inicialização entre em jogo? Alguma opção do kernel pode ser?

Shawn J. Goff
fonte
Através do subsistema de vigilância do kernel, talvez?
Gilles 'SO- stop be evil'
O arquivo de configuração é o próprio arquivo de configuração de inicialização (grub), pois é um parâmetro invocado no momento da inicialização e não se pode esperar que o grub leia algum outro arquivo de configuração enquanto o sistema de arquivos não estiver montado.
Nikhil Mulley
Presumo que você queira reiniciar em um kernel diferente? Isso exigirá alguma cooperação do gerenciador de inicialização e, nesse ponto, você certamente poderá passar argumentos de linha de comando. Alguns gerenciadores de inicialização podem ser configurados para reinicializar em um kernel diferente se uma inicialização falhar (fazendo com que um programa do usuário indique ao gerenciador de inicialização que a inicialização foi bem-sucedida).
Gilles 'SO- stop be evil'
Sim, inicializarei em um kernel diferente ou darei ao kernel um caminho rootfs diferente. Há uma variável na configuração do carregador de inicialização que é alterada quando o espaço do usuário é inicializado com êxito; se não mudar, sabe tentar algo diferente. Eu esperava algo mais do que apenas a linha de comando do kernel para isso, porque a configuração do carregador de inicialização pode ser modificada pelo espaço de usuário do Linux. Se houver algum problema, é provável que o espaço do usuário tenha começado a escrever e o dispositivo foi desligado; e há uma configuração padrão de fallback para isso; Ainda estou procurando o mais sólido possível.
Shawn J. Goff

Respostas:

2

Não parece haver essa opção de configuração. O tempo limite padrão é 0 que, de acordo com http://www.mjmwired.net/kernel/Documentation/kernel-parameters.txt#1898, é "espera para sempre".

A opção é definida no kernel / panic.c , você pode escrever um patch que define o valor inicial para algo diferente.

Para codificar uma reinicialização após 3 segundos, altere:

int panic_timeout;

para:

int panic_timeout = 3;
Lekensteyn
fonte
É mau aconselhamento para mexer com fontes quando há mecanismo especial: unix.stackexchange.com/a/517364/6622
poige
19

De man proc:

/ proc / sys / kernel / panic

Este arquivo fornece acesso de leitura / gravação à variável do kernel panic_timeout. Se for zero, o kernel entrará em pânico; se diferente de zero, indica que o kernel deve se auto-iniciar após esse número de segundos. Quando você usa o driver de dispositivo de vigilância de software, a configuração recomendada é 60.

jpalecek
fonte
Estou procurando uma opção de configuração do kernel aqui, não algo do espaço do usuário. Especificamente, se por algum motivo, ele não pode montar o sistema de arquivos raiz (ou por algum outro motivo, o espaço do usuário nunca aparece), preciso que ele seja reiniciado.
Shawn J. Goff
@ ShawnJ.Goff Se você também está preocupado com o espaço do usuário não aparecer, está fazendo a pergunta errada (você deseja reiniciar mesmo que o kernel não entre em pânico). E a resposta é uma forma de cão de guarda por definição; você precisa ativar o subsistema watchdog (acionando uma reinicialização se /dev/watchdognão for tocado há algum tempo). Veja Documentation/watchdog/watchdog-api.txt.
Gilles 'SO- stop be evil'
1
Sim, eu tenho um cão de guarda. Estou apenas colocando o maior número possível de redes de segurança.
Shawn J. Goff
Alguma maneira de desligar em vez de reiniciar?
Ciro Santilli escreveu:
@ O gerenciador de inicialização ShawnJ.Goff suporta a transmissão desse parâmetro muito antes da inicialização do espaço do usuário. De qualquer forma, ver a minha resposta: unix.stackexchange.com/a/517364/6622
poige
5

O arquivo de configuração é o próprio arquivo de configuração de inicialização (grub), pois é um parâmetro invocado no momento da inicialização e não se pode esperar que o grub leia algum outro arquivo de configuração enquanto o sistema de arquivos não estiver montado.

No entanto, sendo uma configuração inicializada, o tempo de execução também pode ser modificado sysctl. Portanto, atualizar essencialmente /etc/sysctl.confcom o parâmetro kernel.panic = 3é uma atualização de configuração.

Nikhil Mulley
fonte
1
O grub não está em todos os sistemas; a pessoa com quem estou trabalhando não está usando o grub. A configuração do meu carregador de inicialização é armazenada em flash.
Shawn J. Goff
sim, ainda .. ele pode montar o sistema de arquivos e ler o arquivo de configuração do kernel? se sim, então você vai. Porque é o carregador de inicialização que passa os parâmetros do kernel para o kernel enquanto carrega o kernel.
Nikhil Mulley
3

kernel.panicé um sysctl . Existem várias maneiras de configurá-las, por exemplo, através do sysctl.d .

Tobu
fonte
3

No Linux Kernel, (já vi em 3 e acima), há opção no .config. CONFIG_PANIC_TIMEOUTé o parâmetro e o padrão é 0. Nessas versões do kernel Linux, a resposta de Lekensteyn também funcionará. Mas essa variável está tirando da .configúnica.

int panic_timeout = CONFIG_PANIC_TIMEOUT;
RatDon
fonte
1

Suportes do kernel Linux CONFIG_CMDLINE_BOOL

Permita especificar argumentos de inicialização para o kernel no momento da compilação. Em alguns sistemas (por exemplo, sistemas embarcados), é necessário ou conveniente fornecer alguns ou todos os argumentos de inicialização do kernel com o próprio kernel (ou seja, não confiar no carregador de inicialização para fornecê-los.)

Existem alguns exemplos até neste "portal", por exemplo

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

poige
fonte
0

Você pode usar este patch, que adiciona uma opção de configuração.

mgalgs
fonte