Impossible de nettoyer un / boot complet à cause de dépendances non résolues

43

J'ai reçu un message d'erreur expliquant que mon / boot est plein. essayer de nettoyer d'anciens fichiers image semble toujours échouer à cause d'erreurs de disque saturé ou de dépendances. Quelqu'un pourrait-il expliquer où je me trompe?

$ 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

j'ai utilisé

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

obtenir

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

Puis choisir la première image à supprimer

$ 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
la source
Veuillez modifier votre question et la sortie de sudo apt-get autoremoveet ls /boot.
muru
Essayez la réponse de Phrog. Utilisez la uname -rcommande pour connaître votre version actuelle du noyau et essayez de supprimer un noyau autre que celui-là.
Muru

Réponses:

64

Dans ce cas, j'utiliserais l' dpkgoutil pour forcer la suppression de certains paquets du noyau. Ce n'est pas suggéré pour une utilisation commune et est un peu dangereux , mais dans ce cas avec des dépendances non satisfaites pourrait aider.

Tout d’abord, localisez le noyau dans lequel le système est démarré. Celui qui est actuellement chargé. Ouvrez un terminal (CTRL + ALT + T) et lancez la commande suivante

uname -r

Il vous montrera le noyau chargé, vous ne devriez PAS essayer de le supprimer.

Puis lancez la commande

ls /boot 

il retournera toutes les images installées. Choisissez-en un ou deux et essayez de les enlever. Essayez de forcer les supprimer / les purger. Par exemple

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

Vous pouvez faire la même chose pour d'autres images, afin de libérer de l'espace.

Ensuite, vous pouvez essayer d’installer les paquets manquants, ou

sudo apt-get install -f 

pour essayer de résoudre les dépendances.

Enfin, lancez la commande "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]+//')")

La commande ci-dessus supprimera TOUS les noyaux sauf celui qui est actuellement chargé.

Comme vous avez une partition / boot séparée, gardez à l’esprit que vous devrez suivre son espace et nettoyer souvent (la fréquence dépend de l’espace de / boot)

NickTux
la source
1
Bonjour, lorsque j'essaie de les supprimer, j'obtiens une erreur sudo dpkg --force-all -P-abi-3.13.0-32-generic-dpkg: attention: demande ignorée de supprimer abi-3.13.0-32-generic qui n'est pas installé
Philip Howard
9
Cela a fonctionné pour moi, avec une modification: après avoir supprimé les images du noyau avec dpkg, je devais courir sudo apt-get -f autoremovepour pouvoir apt-getarrêter de me plaindre des dépendances non satisfaites. Sinon, sudo apt-get -f installapparemment , j'ai continué d'essayer de réinstaller toutes les images du noyau que j'avais supprimées dpkg, ce qui, évidemment, vient de se remplir à /bootnouveau.
mdunsmuir
4
Après la purge forcée et le apt-get -f autoremovecommentaire in @mdunsmuir ci-dessus, il souhaite toujours installer tous les anciens noyaux au cours des opérations de nettoyage décrites ci-dessus. Y a-t-il un moyen de simplement lui dire d'ignorer les dépendances non liées et de supprimer un ancien noyau complet et unique?
NKijak
3
Je voudrais ajouter que je devais également désinstaller les extras avec sudo dpkg --force-all -P linux-image-extra-3.13.0-32-generic. Sinon, ces extras dépendent toujours de l'image réelle et l' -findicateur provoque la réinstallation de l'image, puis l'espace disponible sur le disque.
Ghostkeeper
1
@LonnieBest je suis d'accord. En revanche, Arch Linux ne conserve qu'un seul repli. Fedora ne semble pas non plus avoir ce problème.
Franklin Yu
5

C'est ce qui a fonctionné pour moi sur Ubuntu 16.04.

sudo apt autoremove --purge
sudo apt autoremove
sudo apt-get -f install
sudo apt-get upgrade
msa
la source
Cette méthode a fonctionné pour moi.
Bok
2

Lister tous les noyaux:

dpkg --list 'linux-image*'

Afficher le noyau actuel:

uname -r

Répertoriez tous les noyaux SAUF celui en cours:

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

Assurez-vous que votre noyau actuel ne figure pas sur cette liste.

Supprime tous les noyaux SAUF celui en cours:

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

Effacer les autres trucs:

sudo apt-get autoremove
Hemant Thorat
la source
Si cela vous donne toujours une erreur d’espace disque d’amorçage lors de l’installation / désinstallation de fichiers, supprimez directement l’une des anciennes images du répertoire / boot, ls -lh /boot/*-3.13.0-119*; rm /boot/*-3.13.0-119*; REMARQUE: Veuillez revoir l’image actuelle du noyau avant de supprimer une image.
Hemant Thorat
Se