alterna entre versões diferentes do kernel sem reiniciar

11

Eu quero alternar entre versões diferentes do kernel instaladas no meu sistema sem reiniciar.

Isto é, se eu tiver ' 3.0.0-16-generic kernel atualmente em execução e eu tiver o kernel antigo 3.0.0-14-generic também, então talvez eu possa mudar para 3.0.0-14-generic (o outro kernel) sem reiniciar.

(Eu preciso fazer depuração ao vivo do kernel e fazer alterações, então para fazer isso eu não posso reiniciar)

    
por coder 12.03.2012 / 12:15

3 respostas

6

Não há como trocar dois Kernels completos. Tenho certeza que você pode entender o significado de um kernel monolítico como o Linux e por que isso torna impossível simplesmente substituir.

O mais próximo que você pode obter é um processo de atualização ao vivo usando o Ksplice . Ele converte as atualizações do Kernel em shims mágicos que podem causar falhas em um kernel em execução, permitindo que você mantenha o computador ligado indefinidamente sem precisar de uma reinicialização. Para seus propósitos, também permite reverter alterações.

É gratuito para as edições do Ubuntu Desktop, para que você possa brincar com ele, mas você precisa pagar uma assinatura para servidores (onde esse tipo de coisa é mais necessário).

Acabei de ver sua edição. O Ksplice provavelmente não ajudará se você estiver hackeando manualmente e criando seus próprios Kernels para depuração, já que "o serviço" é que eles fornecem as atualizações especiais e não são algo que você possa gerar sozinho.

Se você está apenas criando coisas contra um kernel oficial, ainda pode funcionar.

Mais uma ideia: Virtualização. Você pode construir seu novo kernel e trocar coisas na sua VM e reinicializar. Ainda vai demorar o tempo que precisa para reiniciar, mas você pode tornar a VM muito mais leve do que a sua máquina de desenvolvimento (baseie-a no Ubuntu Server, derrube o servidor X se você não precisar dele, etc).

    
por Oli 12.03.2012 / 12:25
2

Como Oli mencionado, sua melhor chance é provavelmente a virtualização.

Dito isso, se você estiver mexendo com hardware, a virtualização pode não ser adequada para você. Nesse caso, você pode usar kexec para trocar o kernel em execução sem uma reinicialização completa.

Extraído da página ArchWiki kexec :

kexec -l /boot/new-kernel --initrd=/boot/new-initrd --reuse-cmdline
kexec -e

Observe que o acima ainda reiniciará todos os serviços , incluindo seu sistema init, o servidor de exibição, rede, etc. No entanto, se você usar um sistema init rápido o suficiente, como systemd , pode inicializar em seu novo kernel em 2-3 segundos, já que você está ignorando o BIOS / UEFI e o bootloader.

Uma descrição semelhante pode ser encontrada na página Wiki do RapidReboot Ubuntu .

    
por Attila O. 29.07.2015 / 12:04
0

Acho que essas respostas precisam ser atualizadas.

Existe kpatch agora , que é mais nativo do que ksplice et al.

Não é possível alterar as estruturas de dados no kernel, por razões óbvias, por isso é bastante útil para os hotpatches de segurança.

O problema geral é sempre: Os processos em execução ainda mantêm as estruturas de dados do kernel por perto, esperando que as funções do kernel as esperem e devolvam. E sem que esses processos sejam feitos para isso, não é realmente possível saber se esse é o caso. Então você não pode alterá-los até que todos os processos que os utilizam sejam reiniciados. Isso exigiria a atualização de todos esses programas também.
E nem mencionei alterações de driver, quando o hardware está em um estado especial. (Mesmo problema com o kexec .)

    
por Evi1M4chine 28.03.2017 / 15:56

Tags