web-dev-qa-db-fra.com

Erreur de disque saturé: apt-get ne parvient pas à installer ni à supprimer

J'ai rencontré l'erreur suivante lors de la mise à niveau de mon serveur Ubuntu 12.04. Désormais, apt-get n'est pas en mesure d'installer ou de supprimer un package.

 Déballer linux-headers-3.13.0-62 (à partir de .../linux-headers-3.13.0-62_3.13.0-62.102 ~ precise1_all.deb) ... 
 Dpkg: error processing /var/cache/apt/archives/linux-headers-3.13.0-62_3.13.0-62.102~precise1_all.deb (--unpack): 
 incapable de créer `/ usr/src/linux-headers -3.13.0-62/Arch/arm/include/asm/ptrace.h.dpkg-new '
 (Pendant le traitement de `./usr/src/linux-headers-3.13.0-62/Arch/ arm/include/asm/ptrace.h '): Pas d'espace disponible sur le périphérique
 Pas de compte rendu écrit car le message d'erreur indique une erreur de disque plein
 dpkg-deb: erreur: le collage du sous-processus a été tué par un 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% /  

De toute façon mes inodes sont pleins,

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

J'ai plus de dix anciens noyaux, mais je ne parviens pas à les supprimer car mon apt-get est lui-même boiteux. Donc, je suis incapable de suivre ce post qui rapporte un problème similaire.

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

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

23
souravc

Je sais que ce post est un peu vieux, 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 brisé, voici l'extrait pertinent:

Retrait en toute sécurité de vieux noyaux

Pour les utilisateurs de systèmes LVM, de systèmes chiffrés ou de systèmes à 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 brisée.

Ce problème peut être résolu rapidement et facilement à partir de Shell. Identifiez simplement un ou deux anciens noyaux à supprimer manuellement, ce qui donnera au gestionnaire de paquets 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 ceci avec:

Sudo apt-get autoremove --purge
34
Junkle

J'ai maintenant trouvé un moyen de sortir de la situation et enlevé quelques noyaux plus anciens de /usr/src pour éliminer la situation. Heureusement, tout s'est bien passé et apt a recommencé à fonctionner.

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

8
souravc