Como você remove kernels antigos do terminal?

6

Eu tenho passado por várias perguntas sobre como limpar antigos kernels do Linux. Todos eles parecem ter respostas diferentes e são velhos, então alguém é obrigado a dizer que a pergunta é muito antiga e começar um novo post, então aqui está:

Eu quero fazer o seguinte:

  1. Remova os kernels antigos do Linux manualmente no terminal.
  2. Remover todos os arquivos de configuração
  3. Remover todos os arquivos de cabeçalho
  4. Remover inodes desnecessários?
  5. Explicar porque o dpkg -l | grep linux-image não retorna os mesmos resultados que eu vejo na listagem do grub2 durante o boot
  6. Explique rc vs ii no dpkg -l | lista de imagens linux grep
  7. Explique a discrepância entre as entradas no diretório / usr / src (ou onde quer que esses arquivos sejam encontrados em outras versões do Ubuntu) e os dois métodos acima para determinar as versões de kernel em excesso.
  8. Quais são as ramificações de uma limpeza completa de kernels mais antigos. Preciso me preocupar com dependências? Como sei se algum aplicativo no meu computador depende dos arquivos de configuração dos kernels mais antigos.

O que eu não quero:

  • Links para outras respostas que você não testou pessoalmente ou não aborda TODOS os problemas envolvidos em uma limpeza completa.
  • Qualquer resposta que você não tenha testado pessoalmente.
  • Scripts que tentam limpar automaticamente tudo de uma vez. Eu só quero fazer isso manualmente até entender tudo o que está acontecendo.

Por favor, obtenha uma solução abrangente para o problema de desenvolvimento do kernel. Eu estou atualmente jogando com uma versão mais antiga do Ubuntu (10.04) antes de atualizar, mas eu tive o mesmo problema com o Ubuntu 12.04. Se a solução for diferente para versões diferentes, indique a versão usada para testar sua solução.

O que funciona:

uname -r

Isso retorna corretamente a versão do kernel que estou usando no momento.

Coisas que não funcionam:

sudo apt-get autoremove
sudo apt-get clean
sudo apt-get autoremove linux-image-x.x.xx-xx-generic

O que eu achei que deveria funcionar, mas não:

sudo apt-get purge linux-image-x.x.xx-xx-generic

Isso funcionou para diminuir a lista gerada por dpkg -l | grep linux-image :

sudo dpkg --purge linux-image-x.x.xx-xx-generic

Além disso, aqui está uma vantagem sobre o problema rc/ii :

ii significa 'Ele deve ser instalado e instalado' enquanto rc significa 'Foi removido / desinstalado, mas seus arquivos de configuração ainda estão lá'.

Acho que isso resolve o problema entre a discrepância entre a listagem de terminais e o menu grub2 na inicialização. Pelo que me lembro, as listagens ii correspondem à listagem grub2. A questão aqui é como as entradas ii chegaram lá em primeiro lugar?

    
por JamesH 22.12.2014 / 08:22

3 respostas

6

O acúmulo de kernels antigos até / boot está cheio, quebrando assim o apt, é um bug: LP # 1357093 , com uma correção implementada em todos os sabores do Ubuntu 16.04 e mais recente.

A maioria dos usuários que observam este problema instalou 'criptografia de todo o disco', o que cria uma minúscula partição não criptografada / de inicialização. Como é pequena, a partição é preenchida rapidamente e esses usuários percebem o problema muito mais cedo do que outros.

Quando um novo kernel é instalado, o script /etc/kernel/postinst.d/apt-auto-removal marca os kernels mais antigos como elegíveis para autoremoval ... mas não executa autoremove. A falta de autoremove foi originalmente planejada para permitir que um humano revise a lista de pacotes removidos.

O bugfix para LP # 1357093 funciona para a maioria dos usuários - se não funcionar para você, então existe outra causa subjacente que impede que pacotes antigos do kernel sejam marcados apt como qualificados para autoremove. Procure ajuda individual nos canais de suporte do Ubuntu.

Nas versões mais antigas do Ubuntu, você deve corrigir os kernels antigos de ervas daninhas para preservar o espaço manualmente. Como você o corrige manualmente depende se o seu / boot está cheio ou não. A maioria dos usuários não percebe o problema até que / boot esteja cheio, e eles estão recebendo os erros apt e dpkg no-space-left-on-device.

Se o / boot não estiver cheio e o apt funcionar corretamente, um simples

sudo apt-get autoremove      ## Ubuntu 14.04 and older
sudo apt autoremove          ## Ubuntu 16.04 and newer

deve remover todos os pacotes do kernel que são elegíveis para autoremoval.

Se / boot estiver cheio , e as ações apt falharem com o erro dpkg 'sem espaço sobrando no dispositivo', então é muito tarde para usar autoremove.

É tarde demais porque o Aptdaemon enfileira as ações do pacote. O Autoremove está na parte de trás da fila, e o apt anula toda a fila restante quando qualquer ação falha ... incluindo falta de espaço. (Este é possivelmente um bug no apt / aptdaemon)

A melhor prática aqui é usar 'uname' e 'dpkg' para remover um ou dois kernels antigos, liberando espaço para o apt completar suas ações na fila. Então o autoremove funcionará.

Exemplo:

$ uname -r
3.16.0-36-generic    ## This is kernel you MUST NOT remove.

$ dpkg -l | grep linux-image
rc  linux-image-3.16.0-23-generic    ## 'rc' means already removed
rc  linux-image-3.16.0-28-generic    ## 'rc' can be safely ignored
rc  linux-image-3.16.0-29-generic
ii  linux-image-3.16.0-30-generic    ## 'ii' means installed. Removable
ii  linux-image-3.16.0-31-generic    ## Removable
ii  linux-image-3.16.0-33-generic    ## Removable
ii  linux-image-3.16.0-34-generic    ## Backup working kernel. Don't remove
ii  linux-image-3.16.0-36-generic    ## Current kernel. DO NOT REMOVE

## Use dpkg to remove one older kernel, freeing enough space for apt to work
$ sudo dpkg --remove linux-image-3.16.0-30-generic
$ sudo apt-get autoremove     ## Ubuntu 14.04 and older
$ sudo apt autoremove         ## Ubuntu 16.04 and newer

Se você tem ignorado o problema por um longo tempo , existem efeitos de segunda ordem, como o linux-image-generic apontando para a versão incorreta do kernel, e os erros de dependência do apt. Não há uma maneira única de consertar tudo isso de uma só vez.

Geralmente, a maneira fácil de limpar a maioria desses problemas é limpar os pacotes antigos do cache de pacotes locais, atualizar o banco de dados de pacotes e reinstalar os pacotes ofensivos dos repositórios do Ubuntu (em vez de seu cache local).

$ sudo apt-get update       ## Refresh the package database (14.04 and older)
$ sudo apt update           ##                              (16.04 and newer)

$ sudo apt-get autoclean    ## Delete the obsolete packages from your local cache (14.04 and older)
$ sudo apt autoclean        ##                                                    (16.04 and newer)

$ sudo apt-get install --reinstall <packagename>     ## Reinstall the offending package with the latest version in the Ubuntu repositories (14.04 and older)
$ sudo apt install --reinstall <packagename>         ##                (16.04 and newer)

Se você ainda encontrar erros apt e / ou dpkg, procure ajuda individual nos canais de suporte do Ubuntu.

    
por user535733 31.12.2015 / 17:24
1

Você pode tentar esses comandos para remover arquivos de configuração antigos e kernels antigos:

exec sudo -i

CONFOLD=$(dpkg -l | grep '^rc' | awk '{print }')

KERNELCUR=$(uname -r | sed 's/-*[a-z]//g' | sed 's/-386//g')

PKGLINUX="linux-(image|headers|ubuntu-modules|restricted-modules)"

METAPKGLINUX="linux-(image|headers|restricted-modules)-(generic|i386|server|common|rt|xen)"

KERNELSOLD=$(dpkg -l | awk '{print }' | grep -E "$PKGLINUX" | grep -vE "$METAPKGLINUX" | grep -v "$KERNELCUR")

apt-get purge "$CONFOLD"

apt-get purge "$KERNELSOLD"

update-grub
    
por kyodake 19.08.2017 / 17:32
0

Você pode executar o comando abaixo para encontrar a lista de kernels instalados.

  

rpm -q kernel

Depois de encontrar a lista de kernels, execute o comando abaixo para remover os kernels.

  

sudo apt-get remove linux-image-x.x.x.x-generic

    
por vembutech 25.12.2014 / 12:58