Quand un disque Linux est plein, procédez dans cet ordre. Lancez df -h pour voir quel système de fichiers est à 100 %. Lancez ensuite du -sh * | sort -h pour descendre un répertoire à la fois jusqu'à trouver le coupable, puis utilisez ncdu pour l'explorer de manière interactive. Enfin, récupérez de l'espace avec journalctl --vacuum-size et docker system prune.
df -h : quel système de fichiers est plein et si les inodes sont épuisés
df -h affiche la taille, l'espace utilisé, l'espace disponible et le pourcentage d'utilisation de chaque système de fichiers monté, en unités lisibles (K, M, G). Cette commande vient en premier parce qu'elle répond à la question qui compte avant tout : quelle partition est pleine ? Nettoyer /home ne sert à rien si c'est /var qui est à 100 %.
df -h
df -h /var
df -iSi df -h indique de l'espace libre mais que les écritures échouent toujours avec « No space left on device », vérifiez df -i. Vous avez peut-être épuisé les inodes à cause de millions de petits fichiers : caches, sessions ou files d'attente de messagerie. Dans ce cas, la taille n'a aucune importance. Le problème vient du nombre de fichiers : cherchez donc le répertoire qui contient le plus d'entrées, pas le plus lourd.
du -sh * | sort -h : trouver le répertoire qui remplit le disque
du -sh * | sort -h calcule le total de chaque entrée du répertoire courant et trie les résultats du plus petit au plus grand. Le plus gros responsable apparaît sur la dernière ligne, juste au-dessus de l'invite : c'est tout ce que vous avez besoin de lire sur un petit écran.
cd /var
sudo du -sh * | sort -h
# from root, without crossing into other filesystems
sudo du -xh --max-depth=1 / 2>/dev/null | sort -h
# include hidden files and directories
du -sh .[!.]* * | sort -hGardez trois détails en tête. Le glob * ignore les fichiers cachés, d'où la dernière ligne. -x reste sur le système de fichiers de départ et ignore /proc ainsi que les montages réseau. 2>/dev/null masque le bruit des erreurs de permission. Répétez la commande un niveau plus bas à chaque fois jusqu'à atteindre le fichier. Toutes les autres options sont documentées dans la page de manuel de du.
Sur les gros disques, du peut tourner pendant plusieurs minutes. Lancez-le dans tmux : si la connexion tombe, l'analyse continue et le résultat vous attend lorsque vous vous rattachez.
ncdu : explorer un disque plein de manière interactive
ncdu -x / analyse le système de fichiers une seule fois, puis affiche une arborescence navigable triée par taille : vous n'avez plus à relancer du à chaque niveau. Installez-le avec le gestionnaire de paquets de votre distribution (apt install ncdu, dnf install ncdu).
sudo ncdu -x /
sudo ncdu -x /var/libDans ncdu, utilisez ces touches :
- les flèches, pour vous déplacer ;
- Entrée, pour ouvrir un répertoire ;
- la flèche gauche, pour remonter ;
d, pour supprimer (une confirmation est demandée) ;q, pour quitter.
Sur un téléphone, tout dépend de l'accès aux flèches et à Échap. Le clavier propre à termi1 les inclut, ainsi que Ctrl, Tab et PgUp/PgDn pour faire défiler les longues listes.
Des fichiers supprimés qui remplissent encore le disque : lsof +L1
Si le total de du est nettement inférieur à l'espace utilisé indiqué par df, un processus garde ouvert un fichier supprimé. Le cas classique est un log effacé avec rm alors que le service écrivait encore dedans. L'espace n'est libéré qu'une fois ce descripteur de fichier fermé.
sudo lsof +L1
# restart the service holding it, or empty the descriptor:
sudo truncate -s 0 /proc/PID/fd/NLa règle est simple : pour vider un log en cours d'utilisation, lancez truncate -s 0 file, pas rm.
journalctl --vacuum : réduire les logs systemd qui remplissent /var
journalctl --disk-usage indique l'espace occupé par le journal systemd. Les options --vacuum-size et --vacuum-time suppriment les fichiers de journal archivés les plus anciens jusqu'à respecter la limite que vous fixez.
journalctl --disk-usage
sudo journalctl --vacuum-size=500M
sudo journalctl --vacuum-time=2weeksUn vacuum est ponctuel. Pour éviter que le problème ne revienne, définissez SystemMaxUse= dans /etc/systemd/journald.conf et redémarrez systemd-journald.
docker system prune : récupérer l'espace utilisé par Docker
docker system df détaille l'espace utilisé par les images, les conteneurs, les volumes et le cache de build. Lancez-le avant de supprimer quoi que ce soit, pour savoir où se trouve réellement l'essentiel.
docker system df
docker system prune
docker system prune -a --volumesSans option, docker system prune supprime les conteneurs arrêtés, les réseaux inutilisés, les images orphelines et le cache de build. -a supprime en plus toute image qui n'est utilisée par aucun conteneur. --volumes efface les volumes inutilisés, et leurs données avec. Sur les hôtes de production, lisez la sortie de docker system df -v avant d'ajouter cette option.
df, du ou ncdu pour diagnostiquer un disque plein
| Outil | Ce qu'il mesure | Quand l'utiliser | Limite |
|---|---|---|---|
df -h | Occupation par système de fichiers monté | Première étape : trouver quelle partition est pleine | N'indique pas quel répertoire occupe l'espace |
du -sh * | sort -h | Taille de chaque entrée du répertoire courant | Serveurs sans paquets supplémentaires ; sortie facile à lire | À répéter à chaque niveau ; ignore les fichiers cachés |
ncdu -x / | Arborescence complète triée par taille | Exploration interactive et suppression avec confirmation | Doit être installé ; nécessite les flèches |
lsof +L1 | Fichiers supprimés encore ouverts | Quand df et du ne concordent pas | Les trouve seulement ; ne libère pas d'espace |
Nettoyer un disque plein depuis votre téléphone avec termi1
Les alertes de disque plein se déclenchent souvent à des heures indues : mieux vaut pouvoir les régler en toute sécurité depuis un téléphone. Avant de tronquer un log dont vous pourriez avoir besoin plus tard, téléchargez-le par SFTP : termi1 l'intègre, sans quitter la session. Mosh maintient la connexion quand vous passez du Wi-Fi aux données mobiles, et tmux laisse tourner un long du même si vous fermez l'application.
L'IA de termi1 transforme une phrase comme « quels répertoires de /var occupent le plus d'espace » en commande et la tape à l'invite sans appuyer sur Entrée. Sur les connexions marquées comme production, Production Guard bloque tout ce qui supprime, comme docker system prune ou journalctl --vacuum-size, avant que cela n'atteigne l'invite. Le terminal est gratuit sur terminal SSH sur Google Play. D'autres guides sont disponibles sur le blog technique de termi1.
Questions fréquentes
Pourquoi df et du indiquent-ils des tailles différentes ?
df et du divergent parce que df lit l'occupation du système de fichiers, alors que du additionne les fichiers qu'il parvient à trouver. Si un processus garde ouvert un fichier supprimé, df le compte encore et du non. Lancez sudo lsof +L1 pour le trouver, puis redémarrez le service qui le retient.
docker system prune est-il sans danger sur un serveur ?
docker system prune sans option ne supprime que les conteneurs arrêtés, les réseaux inutilisés, les images orphelines et le cache de build. Le risque vient avec -a, qui efface les images sans conteneur, et surtout avec --volumes, qui détruit les données des volumes inutilisés. Vérifiez d'abord docker system df.
Comment inclure les fichiers cachés avec du -sh ?
Pour que du -sh inclue les fichiers cachés, ajoutez le motif .[!.]* au glob : du -sh .[!.]* * | sort -h. L'astérisque du shell ne développe pas les noms commençant par un point, si bien que des répertoires comme .cache ou .local peuvent manquer dans les totaux et passer inaperçus.
Comment empêcher journald de remplir à nouveau le disque ?
Pour plafonner journald durablement, définissez SystemMaxUse= dans /etc/systemd/journald.conf à la taille maximale souhaitée, puis redémarrez systemd-journald. journalctl --vacuum-size ne nettoie qu'une seule fois ; la limite du fichier de configuration empêche le journal de grossir à nouveau sans contrôle.