Récemment, sur mon serveur Linux, l'une des partitions de disque était pleine et a dû supprimer des centaines de Mo de fichiers volumineux pour libérer de l'espace. Après avoir libéré l'espace, la partition était toujours pleine et il n'y avait pas d'espace libre pour enregistrer mes fichiers. Plus tard, à ma grande surprise, j'ai remarqué la disparité ci-dessous :
La commande d'utilisation du disque (du) a montré que l'espace utilisé n'était que de 11 G !
-bash-3.2# du -chs /myhome/ 11G /myhome/ 11G total -bash-3.2#
La commande ci-dessus n'inclut pas les fichiers et répertoires de points cachés. Utilisez la commande ci-dessous pour trouver également l'utilisation du disque par les fichiers et répertoires de points cachés.
-bash-3.2#du -sch .[!.]* /myhome/*
Si vous souhaitez encore plus lister les fichiers exacts et leurs chemins absolus, utilisez la commande ci-dessous :
-bash-3.2# du -h -x /myhome/*
Mais la commande df a montré que la partition de disque /myhome/ était pleine !!!
-bash-3.2$ df -h Filesystem Size Used Avail Use% Mounted on /dev/cciss/c0d0p8 20G 14G 4.7G 75% / /dev/cciss/c0d0p9 9.7G 1.3G 8.0G 14% /tmp /dev/cciss/c0d0p3 30G 4.3G 24G 16% /usr /dev/cciss/c0d0p10 44G 41G 0G 100% /myhome /dev/cciss/c0d0p6 30G 27G 670M 98% /var /dev/cciss/c0d0p5 30G 20G 8.0G 72% /opt /dev/cciss/c0d0p2 78G 21G 54G 28% /export /dev/cciss/c0d0p1 4.9G 173M 4.5G 4% /boot tmpfs 7.9G 0 7 .9G 0% /dev/shm tmpfs 491M 61M 431M 13% /var/lib/ganglia/rrds
Maintenant, le défi est de savoir où est l'espace restant ? Est-il caché quelque part ?
Utiliser la commande LSOF pour trouver les fichiers maintenus ouverts
Vous avez peut-être supprimé certains des fichiers, mais le processus serait toujours resté ouvert. Jusqu'à ce que vous fermiez ces fichiers, l'espace ne sera pas libéré. La commande "lsof" ci-dessous vous indiquera quels fichiers supprimés sont toujours ouverts !
-bash-3.2# /usr/sbin/lsof | grep deleted |grep /myhome java 10249 ramya 1u REG 104,10 45866276291 4645619 /myhome/var/container.log (deleted) java 10249 ramya 2u REG 104,10 45866276291 4645619 /myhome/var/container.log (deleted)
Maintenant, vous auriez une idée, n'est-ce pas? Oui, le fichier /myhome/var/container.log qui a été supprimé est toujours ouvert par l'identifiant de processus :10249. Allez maintenant dans le répertoire d'identifiant de processus correspondant dans /proc comme indiqué ci-dessous :
-bash-3.2# cd /proc/10249/fd/
Répertoriez les fichiers pour voir le gestionnaire de fichiers lié au fichier supprimé.
-bash-3.2# ls -lrt | grep /myhome/ lrwx------ 1 ramya ramya 64 Feb 13 14:04 2 -> /myhome/var/container.log (deleted) lrwx------ 1 ramya ramya 64 Feb 13 14:04 1 -> /myhome/var/container.log (deleted)
Effacez maintenant le gestionnaire de fichiers correspondant pour libérer de l'espace à l'aide de la commande ci-dessous :
-bash-3.2# cat /dev/null > /proc/10249/fd/1 -bash-3.2# cat /dev/null > /proc/10249/fd/2
Notez que l'inode serait toujours ouvert, mais il a maintenant une longueur de 0.
-bash-3.2# /usr/sbin/lsof | grep deleted |grep /myhome java 10249 ramya 1u REG 104,10 0 4645619 /myhome/var/container.log (deleted) java 10249 ramya 2u REG 104,10 0 4645619 /myhome/var/container.log (deleted)
Vérifiez maintenant la partition de disque pour avoir un sourire sur votre visage.
-bash-3.2# df -h |grep /myhome /dev/cciss/c0d0p10 44G 12G 30G 28% /myhome