Por que o Ubuntu não usa os kernels instalados pela atualização automática?

5

Eu usei o script descrito nesta pergunta para listar o kernel instalado no computador:

Como faço para remover versões antigas do kernel para limpar o menu de inicialização?

No 3.2.0, eu tenho 33, 34, 35, 36, 37, 38, 39, 41, 43, 44, 45 e 48. Eu esperaria estar executando 3.2.0-48 após uma reinicialização, mas ainda estou correndo 3.2.0-32. Por que os kernels instalados pela atualização automática não são usados (e não são oferecidos no menu.lst)?

[Estou executando 12.04 LTS]

grep title /boot/grub/menu.lst resulta em:

title       Ubuntu 12.04.1 LTS, kernel 3.2.0-32-generic
title       Ubuntu 12.04.1 LTS, kernel 3.2.0-32-generic (recovery mode)
title       Ubuntu 12.04.1 LTS, kernel 2.6.32-45-generic
title       Ubuntu 12.04.1 LTS, kernel 2.6.32-45-generic (recovery mode)
title       Ubuntu 12.04.1 LTS, kernel 2.6.32-44-generic
title       Ubuntu 12.04.1 LTS, kernel 2.6.32-44-generic (recovery mode)
title       Ubuntu 12.04.1 LTS, kernel 2.6.32-43-generic
title       Ubuntu 12.04.1 LTS, kernel 2.6.32-43-generic (recovery mode)
title       Ubuntu 12.04.1 LTS, memtest86+

Eu esperaria que o kernel entre 3.2.0-33 a 3.2.0-48 estivesse nesse arquivo e o padrão fosse o mais recente. Por que o kernel 3.2.0-33 a 48 não é adicionado neste arquivo?

Quando eu corri sudo dpkg-reconfigure linux-image-3.2.0-48-generic , ele encontrou todos os outros kernels e regenerou menu.lst, mas contém apenas as mesmas 9 entradas.

    
por Guillaume Coté 23.06.2013 / 05:21

1 resposta

0

Você está fazendo duas perguntas: por que isso aconteceu e como corrigi-lo?

O que deve acontecer

Quando o gerenciador de pacotes instala um novo kernel, o script em /etc/kernel/postinst.d/apt-auto-removal marca o kernel anterior para exclusão na próxima vez que o gerenciador de pacotes for executado. funciona corretamente para a maioria dos usuários na maioria das vezes.

O roteiro é bastante conservador. Ele não elimina todos os kernels antigos, e erra no lado de deixar os kernels no lugar, erroneamente deletar seu kernel atual ou o kernel anterior (no caso de você precisar reverter). Ele não faz a varredura para ver todos os kernels que você instalou - apenas usa os números de versão dos kernels novos e atuais.

Por que isso não aconteceu

Poderia ter havido um bug no script, um problema de gerenciamento de pacotes diferente poderia ter impedido a marcação, várias ações do usuário poderiam ter indicado o pacote para ser instalado manualmente antes da exclusão. A causa exata é desconhecida e possivelmente incognoscível. É tudo uma tapeçaria rica.

Como corrigir isso

A correção é muito fácil. Você precisa de duas informações:

  1. O kernel atual (use o comando: uname -r)
  2. Os outros kernels instalados (use o comando: ls / boot)

Exemplo:

$ uname -r
3.11.0-15-generic

$ ls /boot
abi-3.11.0-14-generic         initrd.img-3.11.0-14-generic
abi-3.11.0-15-generic         initrd.img-3.11.0-15-generic
config-3.11.0-14-generic      System.map-3.11.0-14-generic
config-3.11.0-15-generic      System.map-3.11.0-15-generic
extlinux                      vmlinuz-3.11.0-14-generic
grub                          vmlinuz-3.11.0-15-generic

Ignore todos os arquivos nomes . Veja todos os números da versão . Você pode ver no exemplo que existem duas versões de kernel instaladas:

  • 3.11.0-14-genérico (pode ser excluído)
  • 3.11.0-15-generic (o kernel em execução - NÃO apague!)

Para que possamos excluir o kernel antigo:

sudo apt-get remove linux-image-3.11.0-14-generic

Quando um kernel é removido, o gerenciador de pacotes removerá automaticamente todos esses arquivos de / boot e atualizará o menu grub.

    
por user535733 26.01.2014 / 05:29

Tags