web-dev-qa-db-fra.com

Utilitaire dit qu'il n'y a plus d'espace disque libre, quand il y en a beaucoup

D'une certaine manière, mon système est dans le pétrin.

$ Sudo apt-get install -f
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Correcting dependencies... Done
The following packages were automatically installed and are no longer required:
  linux-headers-3.2.0-29 linux-headers-3.2.0-29-generic
Use 'apt-get autoremove' to remove them.
The following extra packages will be installed:
  linux-headers-3.2.0-80
The following NEW packages will be installed
  linux-headers-3.2.0-80
0 to upgrade, 1 to newly install, 0 to remove and 251 not to upgrade.
3 not fully installed or removed.
Need to get 0 B/11.7 MB of archives.
After this operation, 56.4 MB of additional disk space will be used.
Do you want to continue [Y/n]? 
(Reading database ... 1255202 files and directories currently installed.)
Unpacking linux-headers-3.2.0-80 (from .../linux-headers-3.2.0-80_3.2.0-80.116_all.deb) ...
dpkg: error processing /var/cache/apt/archives/linux-headers-3.2.0-80_3.2.0-80.116_all.deb (--unpack):
 unable to create `/usr/src/linux-headers-3.2.0-80/include/linux/sunrpc/gss_err.h.dpkg-new' (while processing `./usr/src/linux-headers-3.2.0-80/include/linux/sunrpc/gss_err.h'): No space left on device
No apport report written because the error message indicates a disk full error
                                                                              dpkg-deb: error: subprocess paste was killed by signal (Broken pipe)
Errors were encountered while processing:
 /var/cache/apt/archives/linux-headers-3.2.0-80_3.2.0-80.116_all.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

Mais:

us@desktop:/var/log$ df
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sda1       20158332 16166516   2967816  85% /
udev             4026512        4   4026508   1% /dev
tmpfs             807064      996    806068   1% /run
none                5120        0      5120   0% /run/lock
none             4035308      128   4035180   1% /run/shm
/dev/sda4      904990760 51533960 807485908   6% /home

Stumped!

us@desktop:~$ df -i
Filesystem       Inodes   IUsed    IFree IUse% Mounted on
/dev/sda1       1281120 1278499     2621  100% /
udev            1006628     507  1006121    1% /dev
tmpfs           1008827     445  1008382    1% /run
none            1008827       3  1008824    1% /run/lock
none            1008827       6  1008821    1% /run/shm
/dev/sda4      57466880  110192 57356688    1% /home

Oh, alors la table d'inodes est pleine. Jamais cela n'avait été fait auparavant, quelles en étaient les causes alors?

4
artfulrobot

Comme indiqué dans le résultat de df -i, le nombre d'inodes libres disponibles sur / est très faible, de sorte que l'opération dpkg n'aboutit pas.

La plupart du temps, cela est dû à de nombreux petits fichiers créés quelque part (involontairement) dans le système de fichiers.

Vous pouvez vérifier les fichiers de taille inférieure à 1 Ko et commencer à les supprimer s'ils ne sont pas nécessaires:

Sudo find / -type f -size -1k -ls

De même, vous pouvez vérifier la taille des fichiers en augmentant jusqu’à ce que vous arriviez à la racine du problème.

11
heemayl

Tous les atouts de @heemayl pour les indications qui ont abouti à cette réponse. J'ai accepté cette réponse, mais voici les détails de la façon dont je l'ai corrigée, au cas où cela serait utile aux autres.

Le problème était dû à une table d'inodes complète. Si je comprends bien, un système de fichiers, les inodes et l’espace, comporte deux parties. Les inodes sont liés au nombre de fichiers, où l'espace correspond à leur taille. Mon système était plein à craquer de millions de fichiers minuscules causés par Ubuntu qui ne supprimait pas les anciens noyaux. Comme le système fonctionne depuis longtemps, j'avais plus de 40 noyaux, incl. les fichiers d'en-tête, installés, ce qui est trop pour le système de fichiers d'une partition système de 20 Go.

Cela signifiait que dpkg ne pouvait pas terminer une installation - il avait besoin de plus d'espace pour terminer son travail - mais malheureusement, cela signifiait aussi que je ne pouvais pas non plus créer d'espace en utilisant apt pour désinstaller des choses!

La solution que j'ai trouvée consistait à déplacer tous les fichiers /usr/src/ vers mon autre partition, en ne laissant qu'un lien symbolique vers les fichiers sur le fichier fs complet:

Sudo mv /usr/src /home/usr-src
Sudo ln -s /home/usr-src /usr/src

Après avoir fait cela, j'ai pu laisser apt à compléter:

Sudo apt install -f

Et après cela, j'ai pu désinstaller tous les anciens noyaux dont je n'avais plus besoin, ce qui libérait de l'espace, puis je pouvais déplacer le dossier src.

4
artfulrobot