guides/serveur/diagnostic-espace-disque.md
2026-02-03 09:48:16 +01:00

9 KiB

Guide de diagnostic d'espace disque Linux

Guide complet pour identifier et résoudre les problèmes d'espace disque sur un serveur Linux.

1. Vue d'ensemble : quel disque est plein ?

df -h

Cherche :

  • La ligne /dev/sda1 (ou /dev/nvme0n1p1, /dev/vda1) montée sur /
  • Si Use% > 80% → Problème

Exemple :

/dev/sda1    59G   57G   171M  100%  /   ← PROBLÈME ICI

Comprendre la sortie :

Colonne Signification
Filesystem Nom du disque/partition
Size Capacité totale
Used Espace utilisé
Avail Espace disponible
Use% Pourcentage d'utilisation
Mounted on Point de montage (où le disque est accessible)

2. Niveau 1 : Identifier les gros dossiers à la racine

sudo du -sh /* 2>/dev/null | sort -h

Explication :

  • du : Disk Usage (utilisation disque)
  • -s : Summary (résumé total)
  • -h : Human-readable (Go, Mo au lieu d'octets)
  • /* : Tous les dossiers à la racine
  • 2>/dev/null : Masque les erreurs de permission
  • sort -h : Trie par taille humaine (comprend que 10G > 2G)

Résultat typique :

4.0K    /mnt
128M    /boot
2.1G    /usr
15G     /var
40G     /home   ← SUSPECT

3. Niveau 2 : Descendre dans le dossier suspect

Si /home est gros :

sudo du -sh /home/* | sort -h

Si /var est gros :

sudo du -sh /var/* | sort -h

Continue à descendre dans l'arborescence :

# Exemple : /var/lib est gros
sudo du -sh /var/lib/* | sort -h

# Puis /var/lib/docker est gros
sudo du -sh /var/lib/docker/* | sort -h

Astuce : Garde seulement les 10 plus gros avec tail -10 :

sudo du -sh /var/* | sort -h | tail -10

4. Trouver les plus gros fichiers (top 20)

sudo find /home -type f -size +100M -exec ls -lh {} \; 2>/dev/null | sort -k5 -h | tail -20

Explication :

  • find /home : Cherche dans /home (change le path selon besoin)
  • -type f : Seulement les fichiers (pas les dossiers)
  • -size +100M : Fichiers de plus de 100 MB
  • -exec ls -lh {} \; : Affiche les détails de chaque fichier trouvé
  • sort -k5 -h : Trie par la 5ème colonne (taille) en mode humain
  • tail -20 : Garde les 20 derniers (= les plus gros)

Variantes :

Taille Option
Plus de 100 MB -size +100M
Plus de 500 MB -size +500M
Plus de 1 GB -size +1G
Plus de 10 GB -size +10G

5. Cas particuliers

A. Fichiers supprimés mais encore ouverts (fantômes)

Les fichiers supprimés mais encore ouverts par un processus continuent d'occuper l'espace disque jusqu'à ce que le processus se termine.

Identifier les fichiers fantômes :

sudo lsof +L1 | grep deleted

Calculer l'espace total occupé :

sudo lsof +L1 | grep deleted | awk '{sum+=$7} END {print "Space: " sum/1024/1024/1024 " GB"}'

Solution : Redémarre le service qui garde les fichiers ouverts :

# Identifier le processus
sudo lsof +L1 | grep deleted

# Redémarrer le service (exemple avec Docker)
docker restart container_name

# Ou redémarrer un service système
sudo systemctl restart service_name

B. Logs système volumineux

Les logs système peuvent grossir indéfiniment et remplir le disque.

Vérifier la taille des logs :

sudo journalctl --disk-usage

Nettoyer les logs (garder seulement 500M) :

sudo journalctl --vacuum-size=500M

Nettoyer les logs de plus de 7 jours :

sudo journalctl --vacuum-time=7d

C. Docker qui prend trop de place

Docker accumule des images, conteneurs, volumes et cache de build.

Voir l'utilisation Docker :

docker system df

Exemple de sortie :

TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          10        3         2.935GB   2.719GB (92%)
Containers      3         2         110.1MB   0B (0%)
Local Volumes   1         0         0B        0B
Build Cache     35        0         108.7MB   108.7MB

Nettoyer Docker :

⚠️ ATTENTION : Cette commande supprime :

  • Toutes les images non utilisées
  • Tous les conteneurs arrêtés
  • Tous les volumes non utilisés
  • Tout le cache de build
docker system prune -a --volumes

Nettoyage conservateur (seulement les ressources danglings) :

docker system prune

D. Cache APT (paquets téléchargés)

Les paquets .deb téléchargés par APT sont conservés dans le cache.

Taille du cache :

sudo du -sh /var/cache/apt

Nettoyer :

sudo apt clean

6. Méthodologie complète (étape par étape)

Voici la séquence complète pour diagnostiquer un problème d'espace disque :

# 1. Vue globale - quel disque est plein ?
df -h

# 2. Identifier les gros dossiers à la racine
sudo du -sh /* 2>/dev/null | sort -h | tail -10

# 3. Descendre dans le dossier suspect (exemple : /home)
sudo du -sh /home/* | sort -h | tail -10

# 4. Descendre encore plus profond (exemple : /home/debian)
sudo du -sh /home/debian/* | sort -h | tail -10

# 5. Trouver les gros fichiers individuels
sudo find /home/debian -type f -size +100M -exec ls -lh {} \; 2>/dev/null

# 6. Vérifier les fichiers fantômes (supprimés mais ouverts)
sudo lsof +L1 | grep deleted

# 7. Vérifier les logs système
sudo journalctl --disk-usage

# 8. Vérifier Docker
docker system df

7. Outil interactif : ncdu (recommandé)

ncdu est un outil interactif qui permet d'explorer visuellement l'espace disque, comme un explorateur de fichiers en mode texte.

Installation :

sudo apt install ncdu

Utilisation :

# Scanner un dossier
sudo ncdu /home

# Scanner depuis la racine (lent sur gros disques)
sudo ncdu /

Navigation :

  • : Se déplacer dans la liste
  • Entrée : Entrer dans un dossier
  • : Remonter au dossier parent
  • d : Supprimer le fichier/dossier (⚠️ ATTENTION !)
  • g : Afficher en graphique
  • ? : Aide
  • q : Quitter

8. Mémo rapide (cheat sheet)

À garder sous la main pour un diagnostic rapide :

# Vue globale
df -h

# Top 10 gros dossiers dans un path
sudo du -sh /path/* | sort -h | tail -10

# Top 20 gros fichiers dans un path
sudo find /path -type f -size +100M -exec ls -lh {} \; 2>/dev/null | tail -20

# Fichiers fantômes (supprimés mais ouverts)
sudo lsof +L1 | grep deleted

# Logs système
sudo journalctl --disk-usage
sudo journalctl --vacuum-size=500M

# Docker
docker system df
docker system prune -a --volumes

# Cache APT
sudo apt clean

# Outil interactif
sudo ncdu /

9. Exemples de problèmes courants

Problème 1 : Cache d'archives Git (Forgejo/GitLab)

Symptôme :

/home/user/forgejo/data/gitea/repo-archive → 48G

Solution :

# Supprimer le cache d'archives
sudo rm -rf /home/user/forgejo/data/gitea/repo-archive/*

# Configurer une expiration automatique dans app.ini
[repository.local]
ARCHIVE_EXPIRY = 604800  # 7 jours

# Ajouter un cron de nettoyage quotidien
sudo crontab -e
# Ajouter : 0 3 * * * find /path/to/repo-archive -type f -mtime +1 -delete

Problème 2 : Logs Docker volumineux

Symptôme :

/var/lib/docker/containers/.../container-json.log → 10G

Solution :

# Limiter la taille des logs Docker
sudo nano /etc/docker/daemon.json

Ajouter :

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
# Redémarrer Docker
sudo systemctl restart docker

Problème 3 : Base de données SQLite gonflée

Symptôme :

/var/lib/app/database.db → 5G

Solution :

# Vacuum (compacter) la base de données
sqlite3 /var/lib/app/database.db "VACUUM;"

10. Prévention

Meilleures pratiques pour éviter les disques pleins :

  1. Rotation des logs

    • Configurer logrotate pour limiter la taille des logs
    • Utiliser journalctl --vacuum-size=500M
  2. Nettoyage automatique

    • Ajouter des crons pour nettoyer les caches/tmp
    • Docker auto-prune régulier
  3. Monitoring

    • Alertes quand le disque dépasse 80%
    • Vérifier régulièrement df -h
  4. Limites de taille

    • Configurer max-size pour les logs Docker
    • Limiter les caches applicatifs
  5. Stockage externe

    • Monter les gros volumes sur des disques séparés
    • Utiliser du stockage objet (S3) pour les archives

Ressources complémentaires

Commandes utiles :

# Voir les inodes (nombre de fichiers)
df -i

# Trouver les dossiers avec beaucoup de petits fichiers
sudo find / -type d -exec sh -c 'echo "$(find "$1" -maxdepth 1 | wc -l) $1"' _ {} \; 2>/dev/null | sort -n | tail -20

# Voir l'espace utilisé par utilisateur
sudo du -sh /home/* | sort -h

# Monitoring en temps réel
watch -n 5 'df -h'

Pages man utiles :

  • man df - Afficher l'espace disque
  • man du - Calculer l'utilisation disque
  • man find - Rechercher des fichiers
  • man lsof - Lister les fichiers ouverts

Guide créé le 2026-02-03