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

43

Recebi uma mensagem de erro explicando que meu / boot está cheio. a tentativa de limpar arquivos de imagem antigos sempre parece falhar devido a erros de disco cheio ou a erros de dependência. Alguém poderia explicar onde estou 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 $2}' | 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).
Philip Howard
fonte
Edite sua pergunta e a saída de sudo apt-get autoremovee ls /boot.
Muni
Tente a resposta de Phrog. Use o uname -rcomando para descobrir sua versão atual do kernel e tente remover um kernel que não seja esse.
muru

Respostas:

64

Nesse caso, eu usaria a dpkgferramenta 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. O que está carregado no momento. Abra um terminal (CTRL + ALT + T) e execute o seguinte comando

uname -r

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

Em seguida, emita o comando

ls /boot 

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

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

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

Em seguida, você pode tentar instalar os pacotes ausentes ou

sudo apt-get install -f 

para tentar resolver as dependências.

Por fim, emita o comando "cleanup old kernels"

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

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

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

NickTux
fonte
1
Olá, quando tento removê-los, recebo um erro sudo dpkg --force-all -P abi-3.13.0-32-generic dpkg: warning: ignoring request to remove abi-3.13.0-32-generic que não é instalado #
Philip Howard
9
Isso funcionou para mim, com uma modificação: após a remoção de imagens do kernel com dpkg, eu tive que correr sudo apt-get -f autoremovepara conseguir apt-getparar de reclamar sobre dependências não satisfeitas. Caso contrário, sudo apt-get -f installaparentemente continuava tentando reinstalar todas as imagens do kernel com as dpkgquais eu removi , as quais obviamente só foram preenchidas /bootnovamente.
precisa saber é o seguinte
4
Após a limpeza forçada e o apt-get -f autoremovecomentário @mdunsmuir acima, ele ainda deseja instalar todos os kernels antigos durante qualquer uma das operações de limpeza acima. Existe uma maneira de dizer a ele para ignorar dependências não relacionadas e remover um único kernel antigo completo?
NKijak
3
Gostaria de acrescentar que também tive que desinstalar os extras sudo dpkg --force-all -P linux-image-extra-3.13.0-32-generic. Caso contrário, esses extras ainda dependem da imagem real e o -fsinalizador fará com que a imagem seja reinstalada e, em seguida, fique sem espaço em disco.
Ghostkeeper 21/03/19
1
@LonnieBest Concordo. Por outro lado, o Arch Linux mantém apenas um fallback. Nem o Fedora parece ter esse problema.
Franklin Yu
5

Isto é 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
msa
fonte
Este método funcionou para mim.
Bok
2

Listar todos os kernels:

dpkg --list 'linux-image*'

Exibir o kernel atual:

uname -r

Liste todos os kernels EXCETO atual:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | 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 o atual:

dpkg -l linux-{image,headers}-"[0-9]*" | awk '/^ii/{ print $2}' | 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
Hemant Thorat
fonte
Se ainda houver erro de espaço em disco de inicialização para instalar / desinstalar arquivos, remova diretamente uma imagem antiga do diretório / boot, ls -lh /boot/*-3.13.0-119*; rm /boot/*-3.13.0-119*; NOTA: Revise a imagem atual do kernel novamente antes de excluir qualquer imagem.
Hemant Thorat
Ainda reclama que possui dependências não atendidas
Matiss Jurgelis 02/07