Não é possível limpar um / boot completo devido a dependências não atendidas

34

Recebi uma mensagem de erro explicando que meu / boot está cheio. tentar limpar arquivos de imagem antigos sempre parece falhar devido a erros de disco cheio ou erros de dependência. Alguém poderia explicar onde estou indo errado.

$ sudo apt-get autoremove
Reading package lists... Done
Building dependency tree       
Reading state information... Done
You might want to run ‘apt-get -f install’ to correct these.
The following packages have unmet dependencies.
 linux-image-extra-3.13.0-44-generic : Depends: linux-image-3.13.0-44-generic but it is not installed
 linux-image-extra-3.13.0-45-generic : Depends: linux-image-3.13.0-45-generic but it is not installed
 linux-image-generic : Depends: linux-image-3.13.0-45-generic but it is not installed
E: Unmet dependencies. Try using -f.

$ ls /boot
abi-3.13.0-32-generic         initrd.img-3.13.0-43-generic
abi-3.13.0-36-generic         lost+found
abi-3.13.0-37-generic         memtest86+.bin
abi-3.13.0-39-generic         memtest86+.elf
abi-3.13.0-40-generic         memtest86+_multiboot.bin
abi-3.13.0-43-generic         System.map-3.13.0-32-generic
config-3.13.0-32-generic      System.map-3.13.0-36-generic
config-3.13.0-36-generic      System.map-3.13.0-37-generic
config-3.13.0-37-generic      System.map-3.13.0-39-generic
config-3.13.0-39-generic      System.map-3.13.0-40-generic
config-3.13.0-40-generic      System.map-3.13.0-43-generic
config-3.13.0-43-generic      vmlinuz-3.13.0-32-generic
grub                          vmlinuz-3.13.0-36-generic
initrd.img-3.13.0-32-generic  vmlinuz-3.13.0-37-generic
initrd.img-3.13.0-36-generic  vmlinuz-3.13.0-39-generic
initrd.img-3.13.0-37-generic  vmlinuz-3.13.0-40-generic
initrd.img-3.13.0-39-generic  vmlinuz-3.13.0-43-generic
initrd.img-3.13.0-40-generic

eu usei

kernelver=$(uname -r | sed -r 's/-[a-z]+//')
dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print }' | grep -ve $kernelver

para obter

linux-headers-3.13.0-32
linux-headers-3.13.0-32-generic
linux-headers-3.13.0-36
linux-headers-3.13.0-36-generic
linux-headers-3.13.0-37
linux-headers-3.13.0-37-generic
linux-headers-3.13.0-39
linux-headers-3.13.0-39-generic
linux-headers-3.13.0-40
linux-headers-3.13.0-40-generic
linux-headers-3.13.0-44
linux-headers-3.13.0-44-generic
linux-headers-3.13.0-45
linux-headers-3.13.0-45-generic
linux-image-3.13.0-32-generic
linux-image-3.13.0-36-generic
linux-image-3.13.0-37-generic
linux-image-3.13.0-39-generic
linux-image-3.13.0-40-generic

Em seguida, escolha a primeira imagem para remover

$ sudo apt-get purge linux-image-3.13.0-32-generic
Reading package lists... Done
Building dependency tree       
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies.
 linux-image-extra-3.13.0-32-generic : Depends: linux-image-3.13.0-32-generic but it is not going to be installed
 linux-image-extra-3.13.0-44-generic : Depends: linux-image-3.13.0-44-generic but it is not going to be installed
 linux-image-extra-3.13.0-45-generic : Depends: linux-image-3.13.0-45-generic but it is not going to be installed
 linux-image-generic : Depends: linux-image-3.13.0-45-generic but it is not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).
    
por Philip Howard 15.02.2015 / 14:00

3 respostas

47

Nesse caso, eu usaria a ferramenta dpkg para forçar a remoção de alguns pacotes do kernel. Isso não é sugerido para uso comum e é um pouco perigoso , mas, nesse caso, com dependências não atendidas pode ajudar.

Primeiro, localize o kernel no qual o sistema é inicializado. Aquele que está atualmente carregado. Abra um terminal (CTRL + ALT + T) e emita o seguinte comando

uname -r

Ele mostrará o kernel carregado, você NÃO deve tentar remover este.

Em seguida, emita o comando

ls /boot 

retornará todas as imagens instaladas. Escolha um ou dois e tente removê-los. Tente forçar a remoção / remoção deles. Por exemplo

sudo dpkg --force-all -P linux-image-3.13.0-32-generic

Você pode fazer o mesmo para outras imagens, a fim de liberar algum espaço.

Você pode tentar instalar os pacotes ausentes ou

sudo apt-get install -f 

para tentar resolver as dependências.

Finalmente, emita o comando "cleanern old kernels"

 sudo apt-get purge $(dpkg -l linux-{image,headers}-"[0-9]*" | awk '/ii/{print }' | grep -ve "$(uname -r | sed -r 's/-[a-z]+//')")

O comando acima removerá TODOS os kernels, exceto o que está atualmente carregado.

Como você tem uma partição / boot separada, lembre-se de que precisará rastrear seu espaço e limpar com frequência (a frequência depende do espaço de / boot)

    
por Nick Thom 15.02.2015 / 14:39
2

Isso é o que funcionou para mim no Ubuntu 16.04.

sudo apt autoremove --purge
sudo apt autoremove
sudo apt-get -f install
sudo apt-get upgrade
    
por msa 15.01.2018 / 13:20
0

Listar todos os kernels:

dpkg --list 'linux-image*'

Exibir o kernel atual:

uname -r

Listar todos os kernels EXCETO atual:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print }' | grep -v -e 'uname -r | cut -f1,2 -d"-"' | grep -e '[0-9]'

Verifique se o seu kernel atual não está nessa lista.

Remova todos os kernels EXCETO atual:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print }' | grep -v -e 'uname -r | cut -f1,2 -d"-"' | grep -e '[0-9]' | xargs sudo apt-get -y purge

Limpar outras coisas:

sudo apt-get autoremove
    
por Hemant Thorat 21.05.2018 / 18:44