Erreur de faux disque plein: apt-get ne peut pas installer ou supprimer

24

J'ai rencontré l'erreur suivante lors de la mise à niveau de mon serveur Ubuntu 12.04. Maintenant, il apt-getest impossible d'installer ou de supprimer un package.

Déballage des en-têtes linux-3.13.0-62 (à partir de ... / en-têtes linux-3.13.0-62_3.13.0-62.102 ~ precise1_all.deb) ...
dpkg: traitement des erreurs /var/cache/apt/archives/linux-headers-3.13.0-62_3.13.0-62.102~precise1_all.deb (--unpack):
 impossible de créer `/usr/src/linux-headers-3.13.0-62/arch/arm/include/asm/ptrace.h.dpkg-new ' 
(lors du traitement de `./usr/src/linux-headers-3.13.0-62/arch/arm/include/asm/ptrace.h '): Aucun espace disponible sur le périphérique 
Aucun rapport de répartition écrit car le message d'erreur indique un disque erreur complète
 dpkg-deb: erreur: le collage du sous-processus a été tué par le signal (canal cassé)
Des erreurs ont été rencontrées lors du traitement:
 /var/cache/apt/archives/linux-headers-3.13.0-62_3.13.0-62.102~precise1_all.deb
E: Le sous-processus / usr / bin / dpkg a renvoyé un code d'erreur (1)

Bien que je ne sois pas vraiment à court d'espace disque,

# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       6.8G  4.7G  1.8G  69% /  

Quoi qu'il en soit, mes inodes sont pleins,

# df -i
Filesystem     Inodes   IUsed  IFree IUse% Mounted on
/dev/sda1      458752  455214   3538  100% /

J'ai plus de dix vieux noyaux, mais je ne peux pas les retirer car le mien apt-getest boiteux. Je ne suis donc pas en mesure de suivre ce post qui signale un problème similaire.

La seule option semble supprimer manuellement quelques noyaux plus anciens. Cela causera-t-il un problème?

Y a-t-il une meilleure issue? Puis-je utiliser l' espace réservé pour root pour le moment et supprimer les noyaux plus anciens?

souravc
la source
1
En effet, j'ai supprimé manuellement quelques noyaux plus anciens /usr/srcpour me débarrasser de la situation. Heureusement, tout s'est bien passé et a aptrecommencé à fonctionner. Mais je vais vous demander de reprendre avant de faire une telle chose sur une machine de production. Je l'ai fait sur une machine virtuelle qui avait une sauvegarde complète.
souravc du
Ça marche! J'ai fait la même chose ici (ubutu 14.04.1) pour mettre à jour le noyau 4.4.0-51-generic. Je ne suis tout simplement pas sûr que cela causera un problème à l'avenir. Merci.
Moreno

Réponses:

36

Je sais que ce post est un peu ancien, mais j'ai trouvé une réponse ici pour quiconque pourrait tomber sur ce post: https://help.ubuntu.com/community/RemoveOldKernels

Au cas où ce lien serait rompu, voici l'extrait pertinent:

Retirer les vieux noyaux en toute sécurité

Pour les utilisateurs de systèmes LVM, de systèmes chiffrés ou de systèmes de stockage limité, le problème le plus fréquent est que la partition / boot est simplement pleine. Le gestionnaire de packages ne peut pas installer une mise à niveau en attente en raison d'un manque d'espace. En outre, apt-get ne peut pas supprimer un paquet en raison d'une dépendance cassée.

Ce problème peut être résolu rapidement et facilement depuis le shell. Identifiez simplement un ou deux anciens noyaux à supprimer manuellement, ce qui fournira au gestionnaire de packages suffisamment d'espace pour installer la mise à niveau en file d'attente.


$ sudo rm -rv ${TMPDIR:-/var/tmp}/mkinitramfs-*  
                                  ## In Ubuntu 16.04 and earlier there may be leftover temporary
                                  ## files to delete.
                                  ## See: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=814345

$ uname -r                        ## This command identifies the currently-running kernel
4.2.0-21-generic                  ## This is the current kernel.
                                  ## DO NOT REMOVE it!

$ dpkg -l | tail -n +6 | grep -E 'linux-image-[0-9]+' | grep -Fv $(uname -r)
                                  ## This command lists all the kernels excluding the booted
                                  ## kernel in the package database, and their status.
rc  linux-image-4.2.0-14-generic  ## The oldest kernel in the database
                                  ## Status 'rc' means it's already been removed
ii  linux-image-4.2.0-15-generic  ## The oldest installed kernel. Eligible for removal.
                                  ## Status 'ii' means Installed.
ii  linux-image-4.2.0-16-generic  ## Another old installed kernel. Eligible for removal
ii  linux-image-4.2.0-18-generic  ## Another old installed kernel. Eligible for removal
ii  linux-image-4.2.0-19-generic  ## The previous good kernel. Keep
iU  linux-image-4.2.0-22-generic  ## DO NOT REMOVE. Status 'iU' means it's not installed,
                                  ## but queued for install in apt.
                                  ## This is the package we want apt to install.

                                  ## Purge the oldest kernel package using dpkg instead of apt.
                                  ## First you need to remove the image initrd.img file manually
                                  ## due to Bug #1678187.
$ sudo update-initramfs -d -k 4.2.0-15-generic
$ sudo dpkg --purge linux-image-4.2.0-15-generic linux-image-extra-4.2.0-15-generic
                                  ## If the previous command fails, some installed package
                                  ## depends on the kernel. The output of dpkg tells the name
                                  ## of the package. Purge it first.

                                  ## Also purge the respective header package.
$ sudo dpkg --purge linux-headers-4.2.0-15-generic
                                  ## Try also purging the common header package.
$ sudo dpkg --purge linux-headers-4.2.0-15
                                  ## Do not worry, if the previous command fails.

$ sudo apt-get -f install         ## Try to fix the broken dependency.

J'ai suivi cela avec:

sudo apt-get autoremove --purge
Junkle
la source
9

J'ai maintenant trouvé un moyen de sortir de la situation et j'ai retiré quelques noyaux plus anciens /usr/srcpour me débarrasser de la situation. Heureusement, tout s'est bien passé et apt a recommencé à fonctionner.

Il est fortement recommandé de reprendre avant de retirer les noyaux plus anciens sur une machine de production.

souravc
la source
Toute meilleure solution est toujours la bienvenue. Je poste ce commentaire comme réponse car cela peut aider quelqu'un.
souravc
1
Après avoir retiré quelques anciens noyaux et exécuté apt-get autoremove et installé certaines dépendances, apt-get -f installj'ai résolu mes problèmes
Thamaraiselvam
JE VOUS REMERCIE. J'ai supprimé tous les fichiers linux- * sous /bootmais je ne les ai pas utilisés dkpgdonc il y avait toujours les *-headerfichiers dans/usr/src
Dylan Pierce