Quando é necessária uma reinicialização?

27

Além de atualizar o kernel, há alguma alteração em um sistema Linux que exija reinicialização? Sei que existem situações em que uma reinicialização facilita as coisas, mas há outras que não podem ser realizadas, exceto com uma reinicialização?

Para esclarecer: Estou pensando em um sistema típico de desktop ou servidor que não esteja sofrendo de mau funcionamento de hardware.

Marca
fonte
3
tudo pode ser feito sem reiniciar. mesmo alterar o kernel pode ser feito usando o ksplice para que você possa trocar seu kernel a quente. A única coisa que você precisa levar em consideração é o fato de tomada de tudo sem reiniciar pode ser muito complexo
kiwy
4
Sua pergunta é muito ampla, porque "sistema Linux" pode significar muitas coisas muito diferentes.
Zrin 04/04
Além disso, "qualquer alteração" pode significar várias situações diferentes. A recuperação do disco rígido com falha que faz parte de um espelho MD é uma mudança? Se sim, então - infelizmente - às vezes é necessário reiniciar, porque, por exemplo, algumas falhas no disco rígido (em alguns controladores de disco rígido) podem deixar o sistema sem resposta. Mas você provavelmente não está perguntando sobre essas "mudanças" ...
Zrin 04/04
3
@Kiwy Tecnicamente, o ksplice não altera o kernel . O Ksplice permite que um kernel em execução seja corrigido enquanto estiver em execução. Você pode estar pensando no kexec , que permite que uma nova imagem do kernel seja carregada "sobre" um kernel em execução na memória.
Thomas Nyman
Isso me lembra que o Windows XP (eu nunca fui além) nunca termina de reiniciar, mesmo que apenas tenha atualizado o IE8 (ou qualquer outro número) que não esteja aberto há 4 anos, desde a instalação do Windows e, portanto, a necessidade de baixar um navegador.
Shahbaz #

Respostas:

44

Algumas coisas vêm à mente:

  • Recupere-se de um pânico no kernel

    Um pânico do kernel, por definição, não pode ser recuperado sem reiniciar o kernel.

  • Recupere de travamentos que deixam você sem acesso ao terminal

    Se o sistema não responder e você ficar sem uma maneira de emitir comandos para recuperar, a única coisa que você poderá fazer é reiniciar. Geralmente, você deseja evitar o ciclo manual de energia. Para esse tipo de situação, o kernel do Linux tem suporte ao Magic SysRq, que pode ser usado para reiniciar a máquina em caso de emergência.

    Desde que a CONFIG_MAGIC_SYSRQopção tenha sido ativada na configuração do kernel e a kernel.sysrq sysctlopção esteja ativada, você pode emitir comandos diretamente para o kernel com combinações mágicas de teclas SysRq:

    Observe que Alt+ SysRqabaixo significa pressionar e segurar e Alt , em seguida, pressione e segure SysRq (normalmente a PrintScrntecla).

    1. Alt+ SysRq+ r: recuperar o controle do teclado
    2. Alt+ SysRq+ e: envia SIGTERMa todos os processos, exceto init, dando a eles a chance de finalizar normalmente
    3. Alt+ SysRq+ i: envia SIGKILLpara todos os processos, exceto initforçando-os a terminar
    4. Alt+ SysRq+ s: tenta sincronizar todos os sistemas de arquivos montados
    5. Alt+ SysRq+ u: remontar todo o sistema de arquivos somente leitura
    6. Alt+ SysRq+ b: reinicialização ou

      Alt+ SysRq+ o: desligamento

    Um mnemônico para as combinações mágicas de teclas SysRq para tentar uma reinicialização normal é:

    "Reboot Even If System Utterly Broke"

    Para servidores sem cabeça, há até um destino de tabelas de ip que permite sequências remotas do SysRq em uma rede.

  • Recuperar do estado não inicializável

    Se o sistema já foi levado a um estado em que uma inicialização regular não é possível (por exemplo, como resultado de uma falha na atualização do sistema, sistema de arquivos corrompido etc.), a única maneira de acessar um console de recuperação no sistema pode ser reinicializar usando as opções apropriadas de tempo de inicialização.

  • Alterar os parâmetros do kernel no momento da inicialização

    Alguns parâmetros do kernel (por exemplo, auditpara ativar / desativar a auditoria do kernel) só podem ser definidos quando o kernel é carregado no momento da inicialização.

Thomas Nyman
fonte
3
"Reinicie mesmo que o sistema seja totalmente quebrado" Estou favorecendo essa pergunta por precaução, mas acho que nunca vou esquecer isso.
embedded.kyle
11
É possível notar que você pode sair do pânico usando um kexec e evitar uma reinicialização completa. Isso também se aplica igualmente à saída do ponto de estado não inicializável. (eles não são a mesma coisa, de qualquer forma, pelo menos em um sistema x86). No entanto, +1 para o restante desta resposta.
Vality
Obrigado por seu comentário. Se o kexec requer uma reinicialização, isso depende talvez até certo ponto do ponto de vista. A documentação do kdump, por exemplo, descreve o kexec-on-panic como uma reinicialização que preserva a imagem de memória do kernel do sistema. Quanto ao ponto sobre o estado não inicializável, também considerei coisas como configuração incorreta do carregador de inicialização (por exemplo, falha ao carregar o kernel em primeiro lugar), onde o kexec não ajuda. Dada a natureza da questão, acho que alguma diferença de opinião em relação à semântica é inevitável.
Thomas Nyman
@ThomasNyman Obrigado pela sua resposta detalhada, olhando para a pergunta correta. Eu acho que falar sobre o kexec provavelmente complicará desnecessariamente as coisas para o público-alvo ou para esta pergunta. E você também faz um bom argumento em relação aos erros do carregador de inicialização.
Vality 04/04
Eu nunca tinha notado aquele pequeno SysRq escrito na tela de impressão! Isso é incrível. Eu gostaria de saber isso quando estava aprendendo a programação de módulos do kernel!
Shahbaz #
2

Há duas vezes em que posso pensar onde eu gostaria de reiniciar:

  1. Quando eu preciso garantir que o sistema possa inicializar no estado adequado.

    Certa vez, trabalhei em um sistema que tinha algum daemon configurado enquanto estava em execução. Depois de alguns anos, uma falha de energia causou a reinicialização, mas o daemon não fazia parte do processo de inicialização e ninguém tinha idéia de como havia sido configurado anos antes. O sistema ficou inativo por dias, enquanto descobrimos como reconfigurá-lo.

    Na verdade, a reinicialização é a única maneira de ter certeza de que o sistema será reiniciado corretamente após uma falha de energia.

  2. Quando uma biblioteca do sistema foi atualizada.

    Digamos que uma grande falha de segurança foi descoberta em uma biblioteca compartilhada com muitos aplicativos / servidores no sistema. Você pode atualizar a biblioteca sem reiniciar, mas quantos processos ainda estão em execução com a biblioteca não segura carregada? Você pode reiniciar meticulosamente qualquer coisa usando a biblioteca antiga (se conseguir descobrir), mas isso é propenso a erros e pode levar mais tempo do que apenas reiniciar.

    A reinicialização é a melhor maneira de garantir que todos os processos em execução ainda não estejam usando a antiga biblioteca de bugs.

Gabe
fonte
Existem maneiras melhores de encontrar todos os binários, dependendo de uma determinada biblioteca, se você usar um bom gerenciador de pacotes. revdep-reconstruído do Gentoo vem à mente.
Spidey
11
@ Spidey: Depois de reconstruir os binários, como garantir que não haja processos antigos em execução na biblioteca de bugs?
Gabe
11
Como você sabe quais daemons têm as bibliotecas ofensivas carregadas?
Gabe
11
@ Gabriel Você pode, por exemplo, verificar quais processos têm as bibliotecas mapeadas para o espaço de memória usando lsofantes de atualizar as bibliotecas.
Thomas Nyman
11
@ Gabriel Claro, e embora eu concorde que essa é uma boa razão para reiniciar, o OP não está explicitamente perguntando em quais casos uma reinicialização é mais conveniente , mas quando uma reinicialização é absolutamente necessária .
Thomas Nyman
0

Se você quer dizer mudanças planejadas na configuração do software e assume um hardware que funcione perfeitamente (ainda não o vi) e um software livre de bugs (você sabe ...), apenas um bug no kernel ou no driver o forçará a reiniciar. :)

Fora isso ... Não sei se seria possível substituir initsem alternar para o modo de usuário único e fazer alguma mágica que não é essencialmente muito diferente de uma reinicialização.

Zrin
fonte