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

4

Estou executando o Ubuntu 14.04.4 LTS e estou tentando instalar um novo pacote usando o apt-get. Infelizmente, sempre que tento receber 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 alguns googling, descobri que isso pode ser causado por falta de espaço na partição de inicialização (e com certeza, df mostra /boot em 100%). No entanto, sempre que eu tentar executar os comandos apt-get na resposta aceita, recebo os mesmos erros acima.

Procurando outra solução que não use apt-get , deparei-me com esta postagem , que recomenda usar coisas como sudo dpkg --purge linux-image-4.2.0-15-generic em kernels antigos e não usados.

dpkg -l | tail -n +6 | grep -E 'linux-image-[0-9]+' | grep -Fv $(uname -r) (da postagem acima mencionada) mostra que eu tenho vários kernels antigos no estado pi (desejado removido, o estado é instalado de acordo com isto )

uname -r me diz que o kernel que estou rodando é 3.16.0-62-generic, então achei que deveria estar seguro remover esses kernels antigos. No entanto, tentar fazer isso com coisas como sudo dpkg --purge linux-image-3.16.0-49-generic resulta 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 no fim da minha cabeça, e fora do meu limite (não sei muito sobre o dpkg ou o apt-get), então eu preciso de ajuda.

Perguntas:

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

  2. Se essa pergunta não puder ser resolvida diretamente, acho que, em última análise, quero saber: O que preciso fazer para entrar em um estado em que posso 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 : resultados em:
Unpacking linux-image-3.16.0-70-generic (3.16.0-70.90~14.04.1) ...
dpkg: error processing archive /var/cache/apt/archives/linux-image-3.16.0-70-generic_3.16.0-70.90~14.04.1_amd64.deb (--unpack):
 cannot copy extracted data for './boot/vmlinuz-3.16.0-70-generic' to '/boot/vmlinuz-3.16.0-70-generic.dpkg-new': failed to write (No space left on device)
No apport report written because the error message indicates a disk full error
                                                                              dpkg-deb: error: subprocess paste was killed by signal (Broken pipe)
Examining /etc/kernel/postrm.d .
run-parts: executing /etc/kernel/postrm.d/initramfs-tools 3.16.0-70-generic /boot/vmlinuz-3.16.0-70-generic
run-parts: executing /etc/kernel/postrm.d/zz-update-grub 3.16.0-70-generic /boot/vmlinuz-3.16.0-70-generic
Errors were encountered while processing:
 /var/cache/apt/archives/linux-image-3.16.0-70-generic_3.16.0-70.90~14.04.1_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

Observação : eu migrei essa questão de " Unix e Linux Stack Exchange "

    
por augray 12.05.2016 / 06:21

1 resposta

2

Use uname -r para mostrar seu kernel atualmente em execução. NÃO DELETE nada com este número de versão.

Você pode encontrar em quais pacotes os kernels em /boot pertencem:

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

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

Você pode encontrar mais pacotes relacionados aos kernels a serem deletados, 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 que não sejam o kernel atual e todos os pacotes cujas versões correspondam aos kernels excluídos ( Danger, Wil Robinson ):

Basta anexar

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

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

Se o seu /boot estiver tão cheio que você não pode excluir pacotes, você pode criar algum espaço em /boot removendo o arquivo /boot/initrd.img* mais antigo,

    
por waltinator 12.05.2016 / 06:49