Aller au contenu
Administration Linux medium

Contrôler l'espace disque et les inodes sous Linux

12 min de lecture

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.

  • 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

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érifier df -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
  • df montre 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
Fenêtre de terminal
df -h
Filesystem 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
ColonneSignification
SizeTaille totale du filesystem
UsedEspace utilisé
AvailEspace réellement disponible (exclut les blocs réservés)
Use%Pourcentage d’utilisation
Mounted onPoint de montage
Fenêtre de terminal
df -h /var
df -h /tmp
Fenêtre de terminal
df -h / | awk 'NR==2 {print $5}'
71%

Utilisable dans un script d’alerte :

Fenêtre de terminal
usage=$(df -h / | awk 'NR==2 {gsub(/%/,""); print $5}')
if [[ "$usage" -gt 90 ]]; then
echo "ALERTE : / est à ${usage}%"
fi

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.

Fenêtre de terminal
df -i /
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv 60850176 32625792 28224384 54% /
ColonneSignification
InodesNombre total d’inodes du filesystem
IUsedInodes utilisées
IFreeInodes disponibles
IUse%Pourcentage d’utilisation des inodes
  • df -h montre de la place disponible mais touch /tmp/test retourne No space left on device
  • Un répertoire contient des millions de petits fichiers (cache, sessions PHP, mails en queue)
  • IUse% dépasse 90 % sur df -i
Fenêtre de terminal
find / -xdev -type d -exec sh -c 'echo "$(find "$1" -maxdepth 1 -type f | wc -l) $1"' _ {} \; 2>/dev/null | sort -rn | head -10
Fenêtre de terminal
sudo du -ahx / 2>/dev/null | sort -rh | head -10
188G /
166G /home
87G /home/bob/Projets
35G /home/bob/.cache
29G /home/bob/Projets/lab
OptionRôle
-aAffiche aussi les fichiers (pas seulement les répertoires)
-hTailles lisibles (G, M, K)
-xReste sur le même filesystem (ne traverse pas les montages)
Fenêtre de terminal
sudo du -sh /var/log/* 2>/dev/null | sort -rh | head -5
633M /var/log/journal
13M /var/log/pods
13M /var/log/crowdsec_api.log
2.5M /var/log/harbor
1.5M /var/log/libvirt
Fenêtre de terminal
sudo du -sh /* 2>/dev/null | sort -rh

Donne une vue immédiate de la répartition globale.

Fenêtre de terminal
sudo find / -xdev -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -k5 -rh | head -10
Fenêtre de terminal
sudo find /var -type f -size +10M -mtime -7 -exec ls -lh {} \; 2>/dev/null

Cible les fichiers de plus de 10 Mo modifiés dans les 7 derniers jours sous /var — utile pour trouver un log qui grossit vite.

Fenêtre de terminal
find /tmp -type f -atime +30 -exec ls -lh {} \; 2>/dev/null

Fichiers dans /tmp non accédés depuis plus de 30 jours — candidats au nettoyage.

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.

Fenêtre de terminal
sudo lsof +L1
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NLINK NODE NAME
nginx 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é :

Fenêtre de terminal
sudo systemctl restart nginx

Après le redémarrage, df -h reflète immédiatement l’espace récupéré.

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 :

Fenêtre de terminal
sudo tune2fs -l /dev/mapper/ubuntu--vg-ubuntu--lv | grep -i reserved
Reserved block count: 10002749
Reserved 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.

Sur un volume de données pur (pas /), vous pouvez réduire le pourcentage réservé :

Fenêtre de terminal
sudo tune2fs -m 1 /dev/mapper/data-lv

Change la réserve de 5 % à 1 %. Ne faites pas ça sur / — les processus système ont besoin de cette marge.

Les journaux systemd peuvent occuper plusieurs centaines de Mo :

Fenêtre de terminal
journalctl --disk-usage
Archived and active journals take up 632.5M in the file system.

Pour limiter à 200 Mo :

Fenêtre de terminal
sudo journalctl --vacuum-size=200M

Pour ne garder que les 7 derniers jours :

Fenêtre de terminal
sudo journalctl --vacuum-time=7d

Rendez la limite persistante dans /etc/systemd/journald.conf :

[Journal]
SystemMaxUse=200M

Puis rechargez :

Fenêtre de terminal
sudo systemctl restart systemd-journald
  1. Diagnostiquer — espace ou inodes ?

    Fenêtre de terminal
    df -h /
    df -i /
  2. Localiser — quels répertoires consomment le plus ?

    Fenêtre de terminal
    sudo du -sh /var/* /tmp/* /home/* 2>/dev/null | sort -rh | head -10
  3. Vérifier les fichiers supprimés ouverts

    Fenêtre de terminal
    sudo lsof +L1
  4. Nettoyer les candidats sûrs

    Fenêtre de terminal
    # Anciens journaux
    sudo journalctl --vacuum-time=7d
    # Cache APT
    sudo apt clean # Debian/Ubuntu
    sudo dnf clean all # RHEL/Fedora
    # Fichiers temporaires anciens
    sudo find /tmp -type f -atime +30 -delete
    # Anciens noyaux (Debian/Ubuntu)
    sudo apt autoremove --purge
  5. Vérifier le résultat

    Fenêtre de terminal
    df -h /
SymptômeCause probableSolution
No space left on device mais df -h montre de la placeInodes épuisésdf -i pour confirmer, supprimer les petits fichiers inutiles
df plein mais du / montre beaucoup moinsFichiers supprimés encore ouvertslsof +L1 puis redémarrer le service concerné
/var remplit très viteLogs non rotatés ou journal systemd sans limiteConfigurer logrotate et SystemMaxUse dans journald.conf
Avail plus petit que Size - UsedBlocs 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 saturationMauvais point de montage vérifiéVérifier /var, /tmp, /home séparément
Partition pleine après build DockerImages et layers non nettoyésdocker system prune ou podman system prune
  • Deux causes de No space left on device : espace plein (df -h) ou inodes épuisés (df -i) — vérifiez toujours les deux
  • du -sh identifie les répertoires volumineux ; find -size cible 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 SystemMaxUse dans /etc/systemd/journald.conf
  • Sur XFS, les inodes sont dynamiques — le risque d’épuisement est quasi inexistant

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn