É possível reiniciar um sistema operacional Linux sem reiniciar o hardware?

89

Existe uma maneira de reiniciar um sistema Linux (Debian em particular) sem reiniciar o hardware?

Eu tenho um controlador RAID que demora um pouco para ser executado antes da inicialização do sistema operacional e eu gostaria que houvesse uma maneira de reiniciar rapidamente o sistema operacional Linux sem precisar passar por todo o processo de reinicialização para reiniciar o controlador RAID, etc.

lacrosse1991
fonte
6
Todos os sistemas baseados em UEFI podem alternar entre sistemas operacionais sem reiniciar. Você também tem o kexec()que é parecido exec(), mas para os kernels do Unix.
user2284570

Respostas:

98

Eu uso o kexec-reboot em quase todos os meus sistemas de produção.

Funciona incrivelmente bem, permitindo-me ignorar o longo tempo de POST nos servidores HP ProLiant e reduzir o ciclo de inicialização de 5 minutos para ~ 45 segundos.

Consulte: https://github.com/error10/kexec-reboot

A única ressalva é que ele não parece funcionar nos sistemas RHEL / CentOS 6.x inicializando UEFI. Mas a maioria das combinações sãs de SO / hardware funciona.

ewwhite
fonte
62
Eu escrevi isso! Mas ainda funciona muito bem ...
Michael Hampton
1
Fascinante. Então, como é o processo real? De acordo com um artigo de Hariprasad Nellitheertha (vinculado à página da kexec wikipedia), "Diferente do processo normal de reinicialização, o kexec não executa um desligamento limpo do sistema antes da reinicialização. É necessário que você mate todos os aplicativos e desmonte os sistemas de arquivos antes de tentar uma reinicialização do kexec ". Percebo algumas coisas questionáveis, por exemplo, Wim Coekaerts diz que "sync; umount -a; kexec -e" fará uma reinicialização muito rápida. Mas você não pode desmontar um sistema de arquivos ocupado. Examinando a web, parece que muitos ignoram a parte "matar todos os aplicativos".
Mike S
2
@ MikeS Isso não é kexec. É a kexec-rebootutilidade. A descrição do Github descreve a diferença e o que o utilitário adiciona ao processo.
ewwhite
4
@MikeS Depois de executar o kexec, você simplesmente faz um shutdown -r. Os scripts do seu sistema perceberão que o kexec foi preparado e faz a coisa certa. Como se parece? Três, quatro ou quinze minutos a menos. Eu tenho um vídeo de qualidade muito horrível que tirei do console iDRAC, mas você realmente não quer sofrer com isso ... O kexec-rebootscript destina-se a automatizar o processo de obter os argumentos da linha de comando certos para o kexec, o que pode ser complicado. .
Michael Hampton
1
@MichaelHampton - cool. Vejo que no CentOS 6.5 perto do final do /etc/rc3d/rc6.d/S01reboot existe: [ -n "$kexec_command" ] && $kexec_command -e -x >& /dev/null. Portanto, se um kernel for carregado pelo kexec -l, o sistema será reinicializado sem um / sbin / reboot completo ... o kexec será instalado! Eu não sabia disso, obrigado. Suponho que distribuições mais modernas também tenham sido cobertas. BTW, se o kexec não foi executado anteriormente com -l, o script de reinicialização dirá "Nada foi carregado!" é por isso que a saída é enviada para / dev / null e por que eu nunca estava ciente desse recurso.
25815 Mike S S
17

Sim, é possível. O kexec permitirá que um kernel do Linux seja inicializado diretamente do Linux sem passar pelo processo de inicialização do BIOS.

Kasperd
fonte
Além disso, o UEFI permite alternar o sistema operacional sem reiniciar.
user2284570
1
@ user2284570 Tanto quanto sei, a UEFI não fornece esse mecanismo.
Jonathon Reinhart
15

Sim. Você deve usar o kexec-tools. Para facilitar a vida, eu uso o kexec-reboot .

$sudo apt-get install kexec-tools
$wget https://raw.githubusercontent.com/vadmium/kexec-reboot/master/kexec-reboot
$chmod +x kexec-reboot
$sudo mv kexec-reboot /usr/local/sbin/kexec-reboot
$sudo /usr/local/sbin/kexec-reboot
Jose Raul Barreras
fonte
13
Para que não haja confusão, eu não escrevi isso.
Michael Hampton
Provavelmente é apenas para Ubuntu / Debian, certo?
ewwhite
1
@ewwhite Provavelmente funcionaria no RHEL / CentOS, mas em uma leitura do código, encontrei vários pontos problemáticos nos quais casos extremos podem causar falhas. E a fonte parece reconhecer isso com um comentário:# The error checking is very basic.
Michael Hampton