web-dev-qa-db-fra.com

Impossible de purger les anciens noyaux (problèmes de dépendance), mais / boot manque d'espace

J'utilise Ubuntu 14.04.4 LTS et j'essaie d'installer un nouveau paquet avec apt-get. Malheureusement, chaque fois que j'essaie, je reçois des messages tels que:

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

En faisant des recherches sur Google, j’ai trouvé que ce qui peut être causé par un manque d’espace sur la partition de démarrage (et bien sûr, df indique /boot à 100%). Cependant, chaque fois que j'essaie d'exécuter les commandes apt-get dans la réponse acceptée, les erreurs commises ci-dessus sont identiques.

À la recherche d'une autre solution qui n'utilise pas apt-get, je suis tombée sur cet article , qui recommande d'utiliser des éléments tels que Sudo dpkg --purge linux-image-4.2.0-15-generic sur de vieux noyaux non utilisés.

dpkg -l | tail -n +6 | grep -E 'linux-image-[0-9]+' | grep -Fv $(uname -r) (extrait de l'article précédent) montre que j'ai plusieurs anciens noyaux dans l'état pi (purgé souhaité, l'état est installé conformément à this )

uname -r me dit que le noyau que j'utilise est 3.16.0-62-generic, alors j'ai pensé que je devrais être sûr de supprimer ces vieux noyaux. Cependant, essayer de le faire avec des choses comme Sudo dpkg --purge linux-image-3.16.0-49-generic a pour résultat:

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! Je suis à la fin de mon esprit et hors de ma profondeur (je ne sais pas vraiment beaucoup sur dpkg ou apt-get), alors j'ai besoin d'aide.

Questions:

  1. Pourquoi ne puis-je pas désinstaller les anciens noyaux avec dpkg?

  2. Si cette question ne peut pas être résolue directement, je suppose que je souhaite savoir: Que dois-je faire pour entrer dans un état dans lequel je peux installer de nouveaux packages à nouveau?


Autres choses que j'ai essayées :

  • Sudo apt-get autoremove: provoque l'erreur d'origine concernant les dépendances non satisfaites
  • Sudo apt-get -f autoremove: résultats en:
 Déballer linux-image-3.16.0-70-generic (3.16.0-70.90 ~ 14.04.1) ... 
 Dpkg: erreur lors du traitement de l'archive/var/cache/apt/archives/linux-image-3.16.0-70-generic_3.16.0-70.90 ~ 14.04.1_AMD64.deb (--unpack): 
 ne peut pas copier les données extraites pour './boot/vmlinuz-3.16.0-70- generic 'to' /boot/vmlinuz-3.16.0-70-generic.dpkg-new ': échec de l'écriture (aucun espace n'est disponible sur le périphérique) 
 Aucun rapport d'attribution écrit car le message d'erreur indique une erreur de disque plein 
 dpkg-deb: error: le collage du sous-processus a été tué par un signal (canal cassé) 
 Examen de /etc/kernel/postrm.d. 
 run-parts: exécution de/etc/kernel /postrm.d/initramfs-tools 3.16.0-70-generic /boot/vmlinuz-3.16.0-70-generic
.run-parts: exécuter /etc/kernel/postrm.d/zz-update- grub 3.16.0-70-generic /boot/vmlinuz-3.16.0-70-generic[.____.orrect Des erreurs ont été détectées lors du traitement: 
 /var/cache/apt/archives/linux-image-3.16 .0-70-generic_3.16.0- 70.90 ~ 14.04.1_AMD64.deb 
 E: Le sous-processus/usr/bin/dpkg a renvoyé un code d'erreur (1) 

Remarque : J'ai migré cette question de "Unix & Linux Stack Exchange"

5
augray

Utilisez uname -r pour afficher le noyau en cours d’exécution. NE SUPPRIMEZ rien avec ce numéro de version.

Vous pouvez trouver à quels paquets les noyaux dans /boot appartiennent:

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

Vous pouvez supprimer ces paquets avec Sudo apt-get purge nom_package ... .

Vous pouvez trouver plus de paquets liés aux noyaux à supprimer en recherchant d'autres paquets avec le même numéro de version:

Pour extraire les numéros de version:

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

Pour trouver d'autres packages avec les mêmes numéros de version:

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  

Pour automatiser la suppression de tous les noyaux autres que le noyau actuel et de tous les packages dont les versions correspondent aux noyaux supprimés (Danger, Wil Robinson):

Simplement ajouter

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

au fragment de code précédent. QUAND VOUS ÊTES SÛR QUE CELA FAIT CE QUE VOUS DÉSIREZ, supprimez --dry-run.

Si votre /boot est si plein que vous ne pouvez pas supprimer de paquet, vous pouvez libérer de l'espace sur /boot en supprimant le fichier /boot/initrd.img* le plus ancien,

3
waltinator