df -h montre l’espace utilisé par filesystem, df -i montre les inodes — quand l’un des deux atteint 100 %, Linux retourne No space left on device même s’il reste de la place sur l’autre plan. Le diagnostic commence toujours par ces deux commandes.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Distinguer saturation d’espace et saturation d’inodes
- Identifier les répertoires et fichiers les plus volumineux avec
du - Détecter les fichiers supprimés encore ouverts avec
lsof - Diagnostiquer un épuisement des inodes (
df -i) - Libérer de l’espace de façon sûre en production
- Comprendre le rôle des blocs réservés sur ext4
Dans quel contexte ?
Section intitulée « Dans quel contexte ? »Le contrôle de l’espace disque revient en permanence en administration :
- Un service refuse de démarrer ou une application plante avec
No space left on device— le réflexe est de vérifierdf -h - Après une rotation de logs ratée, /var/log a grossi insidieusement et sature la partition
- Un conteneur ou un build CI écrit des fichiers temporaires qui ne sont jamais nettoyés
dfmontre de la place disponible mais la création de fichiers échoue — c’est un problème d’inodes- Vous devez justifier un redimensionnement de partition ou de volume logique auprès de l’équipe infra
Vérifier l’espace disponible — df
Section intitulée « Vérifier l’espace disponible — df »Espace par filesystem
Section intitulée « Espace par filesystem »df -hFilesystem Size Used Avail Use% Mounted on/dev/mapper/ubuntu--vg-ubuntu--lv 914G 616G 260G 71% /tmpfs 24G 1.2M 24G 1% /run/dev/sda2 2.0G 130M 1.7G 8% /boot| Colonne | Signification |
|---|---|
Size | Taille totale du filesystem |
Used | Espace utilisé |
Avail | Espace réellement disponible (exclut les blocs réservés) |
Use% | Pourcentage d’utilisation |
Mounted on | Point de montage |
Filtrer sur un point de montage
Section intitulée « Filtrer sur un point de montage »df -h /vardf -h /tmpEspace en pourcentage pour un script
Section intitulée « Espace en pourcentage pour un script »df -h / | awk 'NR==2 {print $5}'71%Utilisable dans un script d’alerte :
usage=$(df -h / | awk 'NR==2 {gsub(/%/,""); print $5}')if [[ "$usage" -gt 90 ]]; then echo "ALERTE : / est à ${usage}%"fiVérifier les inodes — df -i
Section intitulée « Vérifier les inodes — df -i »Pourquoi les inodes comptent
Section intitulée « Pourquoi les inodes comptent »Chaque fichier (ou répertoire) occupe un inode — une structure de métadonnées qui stocke les permissions, les timestamps et les pointeurs vers les blocs de données. Le nombre total d’inodes est fixé à la création du filesystem (sur ext4). Quand tous les inodes sont consommés, impossible de créer un nouveau fichier même si l’espace disque n’est pas plein.
df -i /Filesystem Inodes IUsed IFree IUse% Mounted on/dev/mapper/ubuntu--vg-ubuntu--lv 60850176 32625792 28224384 54% /| Colonne | Signification |
|---|---|
Inodes | Nombre total d’inodes du filesystem |
IUsed | Inodes utilisées |
IFree | Inodes disponibles |
IUse% | Pourcentage d’utilisation des inodes |
Quand soupçonner un problème d’inodes
Section intitulée « Quand soupçonner un problème d’inodes »df -hmontre de la place disponible maistouch /tmp/testretourneNo space left on device- Un répertoire contient des millions de petits fichiers (cache, sessions PHP, mails en queue)
IUse%dépasse 90 % surdf -i
Trouver les répertoires avec le plus de fichiers
Section intitulée « Trouver les répertoires avec le plus de fichiers »find / -xdev -type d -exec sh -c 'echo "$(find "$1" -maxdepth 1 -type f | wc -l) $1"' _ {} \; 2>/dev/null | sort -rn | head -10Identifier ce qui consomme l’espace — du
Section intitulée « Identifier ce qui consomme l’espace — du »Les 10 répertoires les plus volumineux
Section intitulée « Les 10 répertoires les plus volumineux »sudo du -ahx / 2>/dev/null | sort -rh | head -10188G /166G /home87G /home/bob/Projets35G /home/bob/.cache29G /home/bob/Projets/lab| Option | Rôle |
|---|---|
-a | Affiche aussi les fichiers (pas seulement les répertoires) |
-h | Tailles lisibles (G, M, K) |
-x | Reste sur le même filesystem (ne traverse pas les montages) |
Cibler un répertoire spécifique
Section intitulée « Cibler un répertoire spécifique »sudo du -sh /var/log/* 2>/dev/null | sort -rh | head -5633M /var/log/journal13M /var/log/pods13M /var/log/crowdsec_api.log2.5M /var/log/harbor1.5M /var/log/libvirtRésumé par répertoire de premier niveau
Section intitulée « Résumé par répertoire de premier niveau »sudo du -sh /* 2>/dev/null | sort -rhDonne une vue immédiate de la répartition globale.
Trouver les gros fichiers — find
Section intitulée « Trouver les gros fichiers — find »Fichiers de plus de 100 Mo
Section intitulée « Fichiers de plus de 100 Mo »sudo find / -xdev -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -k5 -rh | head -10Fichiers modifiés récemment et volumineux
Section intitulée « Fichiers modifiés récemment et volumineux »sudo find /var -type f -size +10M -mtime -7 -exec ls -lh {} \; 2>/dev/nullCible les fichiers de plus de 10 Mo modifiés dans les 7 derniers jours sous /var — utile pour trouver un log qui grossit vite.
Anciens fichiers temporaires
Section intitulée « Anciens fichiers temporaires »find /tmp -type f -atime +30 -exec ls -lh {} \; 2>/dev/nullFichiers dans /tmp non accédés depuis plus de 30 jours — candidats au nettoyage.
Détecter les fichiers supprimés encore ouverts
Section intitulée « Détecter les fichiers supprimés encore ouverts »Un fichier supprimé avec rm mais encore ouvert par un processus continue d’occuper l’espace disque. C’est une cause fréquente d’espace « fantôme » : du ne voit rien mais df montre le filesystem plein.
sudo lsof +L1COMMAND PID USER FD TYPE DEVICE SIZE/OFF NLINK NODE NAMEnginx 1234 www 4w REG 253,0 2.1G 0 131074 /var/log/nginx/access.log (deleted)L’espace ne sera libéré que quand le processus qui tient le fichier ouvert sera redémarré :
sudo systemctl restart nginxAprès le redémarrage, df -h reflète immédiatement l’espace récupéré.
Comprendre les blocs réservés (ext4)
Section intitulée « Comprendre les blocs réservés (ext4) »Sur ext4, 5 % de l’espace est réservé par défaut à l’utilisateur root. Cela explique la différence entre Size, Used et Avail dans df :
sudo tune2fs -l /dev/mapper/ubuntu--vg-ubuntu--lv | grep -i reservedReserved block count: 10002749Reserved blocks uid: 0 (user root)Reserved blocks gid: 0 (group root)Cet espace réservé permet à root de continuer à écrire (logs système, processus critiques) même quand un utilisateur normal voit No space left.
Réduire les blocs réservés
Section intitulée « Réduire les blocs réservés »Sur un volume de données pur (pas /), vous pouvez réduire le pourcentage réservé :
sudo tune2fs -m 1 /dev/mapper/data-lvChange la réserve de 5 % à 1 %. Ne faites pas ça sur / — les processus système ont besoin de cette marge.
Vérifier l’espace des journaux systemd
Section intitulée « Vérifier l’espace des journaux systemd »Les journaux systemd peuvent occuper plusieurs centaines de Mo :
journalctl --disk-usageArchived and active journals take up 632.5M in the file system.Pour limiter à 200 Mo :
sudo journalctl --vacuum-size=200MPour ne garder que les 7 derniers jours :
sudo journalctl --vacuum-time=7dRendez la limite persistante dans /etc/systemd/journald.conf :
[Journal]SystemMaxUse=200MPuis rechargez :
sudo systemctl restart systemd-journaldProcédure de nettoyage en production
Section intitulée « Procédure de nettoyage en production »-
Diagnostiquer — espace ou inodes ?
Fenêtre de terminal df -h /df -i / -
Localiser — quels répertoires consomment le plus ?
Fenêtre de terminal sudo du -sh /var/* /tmp/* /home/* 2>/dev/null | sort -rh | head -10 -
Vérifier les fichiers supprimés ouverts
Fenêtre de terminal sudo lsof +L1 -
Nettoyer les candidats sûrs
Fenêtre de terminal # Anciens journauxsudo journalctl --vacuum-time=7d# Cache APTsudo apt clean # Debian/Ubuntusudo dnf clean all # RHEL/Fedora# Fichiers temporaires ancienssudo find /tmp -type f -atime +30 -delete# Anciens noyaux (Debian/Ubuntu)sudo apt autoremove --purge -
Vérifier le résultat
Fenêtre de terminal df -h /
Dépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Solution |
|---|---|---|
No space left on device mais df -h montre de la place | Inodes épuisés | df -i pour confirmer, supprimer les petits fichiers inutiles |
df plein mais du / montre beaucoup moins | Fichiers supprimés encore ouverts | lsof +L1 puis redémarrer le service concerné |
/var remplit très vite | Logs non rotatés ou journal systemd sans limite | Configurer logrotate et SystemMaxUse dans journald.conf |
Avail plus petit que Size - Used | Blocs réservés root (5 % par défaut sur ext4) | Normal — réduire avec tune2fs -m si c’est un volume de données |
| Script d’alerte ne détecte pas la saturation | Mauvais point de montage vérifié | Vérifier /var, /tmp, /home séparément |
| Partition pleine après build Docker | Images et layers non nettoyés | docker system prune ou podman system prune |
À retenir
Section intitulée « À retenir »- Deux causes de
No space left on device: espace plein (df -h) ou inodes épuisés (df -i) — vérifiez toujours les deux du -shidentifie les répertoires volumineux ;find -sizecible les gros fichiers individuels- Les fichiers supprimés encore ouverts (
lsof +L1) sont la cause la plus fréquente d’espace fantôme - Les blocs réservés root (5 % sur ext4) expliquent la différence entre espace total et espace disponible
- Les journaux systemd peuvent être limités avec
SystemMaxUsedans/etc/systemd/journald.conf - Sur XFS, les inodes sont dynamiques — le risque d’épuisement est quasi inexistant