Upgrade do kernel - padrão do Grub

2

Estou planejando compilar meu próprio kernel, o que fiz muitas vezes antes, mas como sempre ainda há uma chance de que isso possa dar errado e a máquina não consiga reiniciar.

Esta máquina está dentro de um centro de dados remoto para o qual não tenho acesso físico e, portanto, custaria muito para alguém ir fisicamente ao servidor para consertá-la caso a máquina não inicializasse corretamente.

Existe uma maneira que eu posso configurar o grub para usar um novo kernel apenas para uma única inicialização, mas voltar ao antigo kernel após uma reinicialização adicional. Então, eu poderia usar meu console remoto de gerenciamento de energia para reinicializar a máquina se ela não inicializasse corretamente com o novo kernel, e então voltaria para o kernel antigo.

Eu sei que isso é possível com o lilo usando o comando lilo -r kernel , existe um equivalente no grub?

    
por Adam Gibbins 07.06.2009 / 01:25

2 respostas

5

Para citar um pouco do Manual do GRUB que adiciona um pouco de verificação extra para a resposta de katriel.

You can teach GRUB to boot an entry only at next boot time. Suppose that your have an old kernel old_kernel and a new kernel new_kernel. You know that old_kernel can boot your system correctly, and you want to test new_kernel.

To ensure that your system will go back to the old kernel even if the new kernel fails (e.g. it panics), you can specify that GRUB should try the new kernel only once and boot the old kernel after that.

First, modify your configuration file. Here is an example:

 default saved        # This is important!!!
 timeout 10

 title the old kernel
 root (hd0,0)
 kernel /old_kernel
 savedefault

 title the new kernel
 root (hd0,0)
 kernel /new_kernel
 savedefault 0         # This is important!!!

Note that this configuration file uses default saved' (see default) at the head andsavedefault 0' (see savedefault) in the entry for the new kernel. This means that GRUB boots a saved entry by default, and booting the entry for the new kernel saves '0' as the saved entry.

With this configuration file, after all, GRUB always tries to boot the old kernel after it booted the new one, because '0' is the entry of the old kernel.

The next step is to tell GRUB to boot the new kernel at next boot time. For this, execute grub-set-default (see Invoking grub-set-default):

 # grub-set-default 1

This command sets the saved entry to '1', that is, to the new kernel.

This method is useful, but still not very robust, because GRUB stops booting, if there is any error in the boot entry, such that the new kernel has an invalid executable format. Thus, it it even better to use the fallback mechanism of GRUB. Look at next subsection for this feature.

    
por 07.06.2009 / 01:41
1

Você pode tentar usar a diretiva "fallback" em /boot/grub/menu.lst. Você precisará especificar um kernel de fallback ou kernels, e usar a diretiva savedefault nas sub-rotinas do kernel para serem usadas como backups, por exemplo (tiradas da manual do grub ):

default saved        # This is important!!!
timeout 10
fallback 1 2         # This is important!!!

title A
root (hd0,0)
kernel /kernel
savedefault fallback # This is important!!!

title B
root (hd1,0)
kernel /kernel
savedefault fallback # This is important!!!

title C
root (hd2,0)
kernel /kernel
savedefault

Isso fará com que o kernel A seja inicializado e, se ocorrer alguma falha (kernel não encontrado ou kernel panic), o primeiro e depois o segundo fallback serão usados (conforme especificado na diretiva de fallback)

Por favor, note que o manual especifica um kernel em falta ou pânico do kernel, ele não diz nada sobre uma placa de rede não está funcionando. O que no seu caso pode ser tão ruim quanto um kernel panic

    
por 07.06.2009 / 01:37