Disque plein alors que « du » ne trouve rien (fichiers supprimés encore ouverts)
```text write error: No space left on device ```
Détecter
df -h indique 100 % d'occupation sur /var, les services échouent à écrire (No space left on device), mais du -sh /var/* totalise beaucoup moins que la taille utilisée.
Symptômes
df -h indique 100 % d'occupation sur /var, les services échouent à écrire (No space left on device), mais du -sh /var/* totalise beaucoup moins que la taille utilisée.
Environnement
Serveur Linux (Debian/RHEL) hébergeant une application qui écrit un journal volumineux ; un administrateur a supprimé le fichier de log avec rm pour libérer de la place.
Cause racine
Un fichier supprimé reste occupé sur le disque tant qu'un processus garde un descripteur ouvert dessus. rm retire seulement l'entrée du répertoire : du ne le voit plus, df si.
Diagnostic
- Comparer
df -h /varetdu -xsh /var. - Lister les fichiers supprimés encore ouverts :
lsof +L1oulsof -nP | grep '(deleted)'. - Identifier le processus propriétaire et la taille.
Solution
- Faire rouvrir le fichier par le processus :
systemctl reload appou redémarrage du service. - En urgence, sans redémarrage, tronquer via le descripteur :
: > /proc/<pid>/fd/<fd>. - Mettre en place une rotation correcte (logrotate avec
postrotateoucopytruncate).
Commandes
df -h /var; du -xsh /var
sudo lsof +L1
sudo truncate -s 0 /proc/1234/fd/7
Prévention
Rotation des journaux configurée pour chaque application, alerte predict_linear sur l'espace disque, procédure interdisant la suppression des journaux actifs avec rm.