La command df ne montre pas les valeurs correctes

C'est un server RHEL, j'exécute un server MySQL dessus, la database et les files journaux (cependant, la journalisation est désactivée) se trouvent dans le /srv où beaucoup d'espace est disponible.

Récemment, j'ai eu une table écrasée, j'ai donc essayé de la réparer mais le jour suivant j'ai trouvé que MySQL ne pouvait pas répondre à de nombreuses requêtes avec une erreur indiquant qu'il n'y avait pas d'espace disque:

 ERROR 1030 (HY000): Got error 28 from storage engine 

J'ai donc exécuté la command suivante pour voir ce qui prend de l'espace

 [root@tms /]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/server-slash 9.9G 9.5G 0 100% / tmpfs 7.8G 0 7.8G 0% /dev/shm /dev/sda1 485M 58M 402M 13% /boot /dev/mapper/server-var 739G 252G 450G 36% /srv 

Étonnamment, c'est le directory / . Mais plus surprenant est que les directorys sous / n'indiquent pas l'espace utilisé plus de 2 Go , tandis que df montre un espace total de 9,9 Go pour / .

 [root@tms /]# du -sh /* 7.5M /bin 48M /boot 200K /dev 24M /etc 4.0K /home 223M /lib 21M /lib64 16K /lost+found 4.0K /media 4.0K /mnt 183M /opt ...deleted some file-not-found errors for files under /proc 0 /proc 144K /root 14M /sbin 4.0K /selinux 252G /srv 0 /sys 44K /tmp 917M /usr 259M /var 

Alors pourquoi df montre-t-il de fausses valeurs? Et comment puis-je savoir ce qui prend réellement de l'espace?

Une technique de programmation commune consiste à créer un file temporaire et à le dissocier immédiatement. Cela laisse le file (et son espace) disponible pour la durée du programme mais entraîne automatiquement sa suppression lorsque le programme qui l'utilise se termine. Un avantage est qu'aucun code epilog (nettoyage) n'est nécessaire pour écrire.

Pour déterminer si un process contenant un file non lié est ouvert, procédez comme suit:

 lsof -a +L1 /dev/server_slash 

(ou)

 lsof +D /dev/server_slash +L1 

Recherchez tous les files avec une valeur NLINK de zéro (0). Ce sont des files avec un nombre de liens zéro qui disparaîtront à la fin du dernier process. La colonne SIZE / OFFSET offrira la taille du caractère du file en question.

1) df ne signale pas l'espace réservé pour root (5% par défaut) sur les filesystems de style unix. Donc df rapportera toujours less que vous devriez avoir.

2) Ici, cependant, je suppose que vous avez exécuté votre database sans votre partition srv montée. Sans la srv-partition montée, les choses auront été écrites au sharepoint assembly ie. sous le directory srv dans la partition /. (partition racine), utilisant ainsi beaucoup d'espace sur la partition /.

Cependant, lorsque vous montez la partition srv sur le directory srv, tous les files sous le directory srv de la partition / sont "cachés" par la partition sur laquelle vous avez "monté dessus" – mais l'espace est toujours utilisé, même si vous ne pouvez pas le voir ou y accéder pour le supprimer.

Essayez de démonter la partition srv (allez dans singleuser-moder / runlevel 1 / mode de maintenance pour que tout soit arrêté), vérifiez qu'elle est démontée (avec mount ) et vérifiez s'il y a des files cachés sous les directorys que vous utilisez habituellement comme points de assembly (usr, srv, home, var, tmp, …) dans la partition /. Je parie que vous findez quelque chose de grand dans certains d'entre eux. Quand vous avez fait et redémarrez, assurez-vous que la partition srv est montée comme elle le devrait.

Ceci – que vous pouvez avoir des trucs dans des directorys qui sont généralement cachés par des partitions montées – peut parfois être utile.