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.