[Linux-bruxelles] du vs df espace libre sur une partition

Serge SMEESTERS sergesmeesters at gmail.com
Sam 11 Fév 20:47:51 CET 2012


Salut,


J'ai récemment été confronté à un véritable casse tête.
Maintenant qu'il est résolus, je souhaite partager cette expérience.

J'étais connecté en ssh à un serveur sur lequel des sauvegardes
automatiques prennent régulièrement 13 Go.
Je vérifiais donc l'espace disque...

  df -h /home

19 Go de libre sur les 739 !
Je vérifiais alors l'espace utilisé de différents répertoires
("dossiers" pour le plus jeunes)

  du -sh /home/par-ci
...
  du -sh /home/par-la

Je comprenais pas...

  du -sh /home

532 Go utilisé ! Mais c'est pas possible !

Sur IRC, #ubuntu-fr et #linuxbe, je posais le problème et demandais si
quelqu'un à une idée...
Prévisible ? on me répondit que « du et df ne fonctionnent pas sur le
même principe » et qu'il est "normal" d'obtenir de tels
"incohérences"...

Mais enfin, il était quand même question de 188 Go "manquant" sur les
739 ! soit plus de 25 % !

Fichiers cachés ? J'étais en root, il n'y avais pas de répertoire
.Tash, et lost+found était vide...

Sur IRC, on refusait d'envisager d'autres explication que « du, df,
pas même principe, ... normal... »
On m'invitais à lire la documentation de du et df pour comprendre ça...
Je passais bientôt pour un crétin borné qui refusait d'admettre... :(

Si quelqu'un vient me parler d'une incohérence entre df et du, moi
aussi je penserais au fait que le principe est différent, etc.
Mais déjà moins pour plus de 5 % et surtout pas pour plus de 10 %...

C'est en allant me coucher, vers 3h30 du matin, que je fini par penser
à quelque chose...

Sous GNU/Linux(Unix ? etxN ?), on peut supprimer un fichier alors
qu'il est encore utilisé, ouvert, par un logiciel !
À ce moment là, l'espace n'est pas libéré tant que le fichier n'est
pas "relâché"(fermé) par le logiciel (df...) ; mais son entré dans
l'arborescence à déjà disparue (du...).

En l'occurrence, il s'agissait des images squashfs de mes sauvegardes
qui sont montées automatiquement pour que les utilisateur puisse
facilement "remonter dans le temps". Selon une certaine politique, les
images les plus anciennes sont supprimée automatiquement, mais
probablement pas démontées correctement au préalable :(
La solution fut de démonter les images, avec l'option -d car loop device...

Mais la question restait de savoir comment se rendre compte de ce
genre de chose !

Retour sur IRC, c'est un certain GMsoft qui m'a proposé la commande suivante :

  ls -l /proc/*/fd | grep -i deleted

Je dois encore essayer avec le cas d'un montage de squashfs ...
Mais sinon, ça semble bien marcher :)

Voila.
Je pense que cette commande peut également être utile dans d'autres situation :)


À+,
Serge S.




Plus d'informations sur la liste de diffusion Linux-bruxelles