Não é possível limpar kernels antigos (problemas de dependência), mas/boot está sem espaço

Não é possível limpar kernels antigos (problemas de dependência), mas/boot está sem espaço

Estou executando o Ubuntu 14.04.4 LTS e estou tentando instalar um novo pacote usando o apt-get. Infelizmente, sempre que tento recebo mensagens como:

The following packages have unmet dependencies:
 linux-image-extra-3.16.0-70-generic : Depends: linux-image-3.16.0-70-generic but it is not going to be installed
 linux-image-generic-lts-utopic : Depends: linux-image-3.16.0-70-generic but it is not going to be installed
 linux-signed-image-3.16.0-70-generic : Depends: linux-image-3.16.0-70-generic (= 3.16.0-70.90~14.04.1) but it is not going to be installed

Fazendo uma pesquisa no Google, descobri queisso pode ser causado por falta de espaço na partição de inicialização(e com certeza, dfmostra /boot100%). No entanto, sempre que tento executar os apt-getcomandos da resposta aceita, recebo os mesmos erros acima.

Procurando outra solução que não usava apt-get, me depareiesta postagem, que recomenda usar coisas como sudo dpkg --purge linux-image-4.2.0-15-genericem kernels antigos e não utilizados.

dpkg -l | tail -n +6 | grep -E 'linux-image-[0-9]+' | grep -Fv $(uname -r)(do post mencionado acima) mostra que tenho vários kernels antigos no piestado (desejado eliminado, o estado é instalado de acordo comesse)

uname -rme disse que o kernel que estou executando é 3.16.0-62-genérico, então pensei que seria seguro remover esses kernels antigos. No entanto, tentar fazer isso com coisas como sudo dpkg --purge linux-image-3.16.0-49-genericresulta em:

dpkg: error processing package linux-image-3.16.0-49-generic (--purge):
 dependency problems - not removing
Errors were encountered while processing:
 linux-image-3.16.0-49-generic

Garrg! Estou perdendo o juízo e fora do meu alcance (realmente não sei muito sobre dpkg ou apt-get), então preciso de ajuda.

Questões:

  1. Por que não consigo desinstalar os kernels antigos dpkg?

  2. Se essa questão não puder ser resolvida diretamente, acho que quero saber:O que preciso fazer para chegar a um estado em que possa instalar novos pacotes novamente?


Outras coisas que tentei:

  • sudo apt-get autoremove: resulta no erro original sobre dependências não atendidas
  • sudo apt-get -f autoremove: resulta em:
Descompactando linux-image-3.16.0-70-generic (3.16.0-70.90~14.04.1) ...
dpkg: erro ao processar arquivo /var/cache/apt/archives/linux-image-3.16.0-70-generic_3.16.0-70.90~14.04.1_amd64.deb (--unpack):
 não é possível copiar os dados extraídos de './boot/vmlinuz-3.16.0-70-generic' para '/boot/vmlinuz-3.16.0-70-generic.dpkg-new': falha ao gravar (não resta espaço no dispositivo)
Nenhum relatório de aportação foi escrito porque a mensagem de erro indica um erro de disco cheio
                                                                              dpkg-deb: erro: a pasta do subprocesso foi eliminada pelo sinal (tubo quebrado)
Examinando /etc/kernel/postrm.d .
run-parts: executando /etc/kernel/postrm.d/initramfs-tools 3.16.0-70-generic /boot/vmlinuz-3.16.0-70-generic
run-parts: executando /etc/kernel/postrm.d/zz-update-grub 3.16.0-70-generic /boot/vmlinuz-3.16.0-70-generic
Erros foram encontrados durante o processamento:
 /var/cache/apt/archives/linux-image-3.16.0-70-generic_3.16.0-70.90~14.04.1_amd64.deb
E: O subprocesso /usr/bin/dpkg retornou um código de erro (1)

Observação: Migrei esta pergunta de"Troca de pilha Unix e Linux"

Responder1

Use uname -rpara mostrar o kernel em execução no momento. NÃO EXCLUA nada com este número de versão.

Você pode descobrir a quais pacotes os kernels /bootpertencem:

for i in /boot/vmlinuz* ; do 
    dpkg -S $i| egrep -v $(uname -r)
done

Você pode remover esses pacotes comsudo apt-get purge nome do pacote ....

Você pode encontrar mais pacotes relacionados aos kernels a serem excluídos procurando por outros pacotes com o mesmo número de versão:

Para extrair os números de versão:

for i in /boot/vmlinuz* ; do 
    dpkg -S $i | egrep -v $(uname -r)
done |cut -d- -f3-4  

Para encontrar outros pacotes com os mesmos números de versão:

for j in $(
    for i in /boot/vmlinuz* ; do 
        dpkg -S $i| egrep -v $(uname -r)
    done |cut -d- -f3-4 ) ; 
do 
     dpkg -l "*$j*" | egrep '^ii|^rc'
done  

Para automatizar a exclusão de todos os kernels diferentes do kernel atual e de todos os pacotes cujas versões correspondam aos kernels excluídos (Perigo, Wil Robinson):

Basta anexar

| awk '{print $2}' | xargs sudo apt-get --dry-run purge

ao fragmento de código anterior. Quando tiver certeza de que ele faz o que deseja, remova o --dry-run.

Se o seu /bootestiver tão cheio que você não consiga excluir pacotes, você pode liberar espaço /bootremovendo o /boot/initrd.img*arquivo mais antigo,

informação relacionada