La cause la plus fréquente de cet effet est les fichiers ouverts qui ont été supprimés.
Le noyau libérera uniquement les blocs de disque d'un fichier supprimé s'il n'est pas utilisé au moment de sa suppression. Sinon, cela est différé jusqu'à la fermeture du fichier ou le redémarrage du système.
Une astuce commune du monde Unix pour vous assurer qu'aucun des fichiers temporaires sont laissés est autour des axes suivants:
Un processus crée et ouvre un fichier temporaire
Tout en maintenant le descripteur de fichier ouvert , le processus délie (par exemple le fichier), suppression
le processus lit et écrit dans le fichier en utilisant normalement le descripteur de fichier
Le processus ferme le descripteur de fichier quand il est fait, et le noyau libère l'espace
Si le processus (ou le système) se termine de façon inattendue, le fichier temporaire est déjà supprimé et aucun nettoyage est nécessaire. En prime, la suppression du fichier réduit les risques de collision de noms lors de la création de fichiers temporaires et ajoute une couche supplémentaire d'obscurité sur les processus en cours - pour tout le monde sauf l'utilisateur root.
Ce comportement garantit que les processus ne doivent pas traiter les dossiers qui sont soudainement tirés sous leurs pieds, et que les processus ne sont pas de se consulter afin de supprimer un fichier. C'est un comportement inattendu pour ceux qui viennent de systèmes Windows, car vous n'êtes normalement pas autorisé à supprimer un fichier en cours d'utilisation.
La commande lsof
, lorsqu'il est exécuté en tant que root, montrera tous les fichiers ouverts et il indique précisément les fichiers supprimés qui sont supprimés:
# lsof 2>/dev/null | grep deleted
bootlogd 2024 root 1w REG 9,3 58 917506 /tmp/init.0W2ARi (deleted)
bootlogd 2024 root 2w REG 9,3 58 917506 /tmp/init.0W2ARi (deleted)
arrêter et redémarrer le processus de culpabilité, ou tout simplement redémarrer le serveur doit résoudre ce problème.
Les fichiers supprimés peuvent également être maintenus ouverts par le noyau si, par exemple, il s'agit d'une image de système de fichiers montée. Dans ce cas, démonter le système de fichiers ou redémarrer le serveur devrait faire l'affaire.
Dans votre cas, à en juger par la taille de l'espace "manquant", je rechercherais toute référence au fichier que vous avez utilisé pour configurer le VPS, par exemple. l'image DVD Centos que vous avez supprimée après l'installation.
Merci de mentionner que le noyau pourrait contenir le fichier (et donc lsof ne l'affiche pas). J'avais un gros fichier (un groupe de volumes lvm clairsemé) associé à un périphérique en boucle et qui mangeait mon espace libre, mais lsof ne montrait rien, bien sûr. – Augusto