ACLClouds
ACLClouds

Erreur « No space left on device » : le disque du VPS est plein

Trouver le volume saturé, les gros dossiers et les inodes, puis supprimer sans risque. Compressez ou supprimez les anciens logs et exports connus.

Un disque plein peut empêcher SSH, APT, Docker et les bases de données d’écrire. Le pourcentage d’espace et le nombre d’inodes doivent être vérifiés séparément.

Procédure étape par étape

  1. Identifier le volume

    Exécutez df -hT puis df -i. Un volume peut manquer d’inodes même s’il reste des gigaoctets libres.

  2. Localiser les gros dossiers

    Utilisez la commande du sur le même système de fichiers et vérifiez /var/lib/docker, /var/log et les sauvegardes.

  3. Nettoyer avec prudence

    Compressez ou supprimez les anciens logs et exports connus. N’utilisez pas docker system prune -a sur un serveur de production.

  4. Prévenir la récidive

    Configurez la rotation des logs, une durée de conservation des sauvegardes et une alerte dès 85 % d’utilisation.

Diagnostic disque

df -hT
df -i
du -xhd1 /var 2>/dev/null | sort -h
journalctl --disk-usage
docker system df

Trouver les gros fichiers

du -xh / --max-depth=1 2>/dev/null | sort -h
find / -xdev -type f -size +500M -exec ls -lh {} + 2>/dev/null
lsof +L1

Avant de commencer

La page « Disques » des « Outils supplémentaires » affiche la capacité allouée au VPS, pas l’espace occupé dans Linux. Le remplissage réel se lit dans la VM avec df -h. Si SSH ne répond plus faute d’espace, ouvrez la « Console noVNC » ou utilisez le « Shell » du panel pour les commandes courtes.

  • Notez le point de montage plein (/, /var, /home) avant de supprimer quoi que ce soit.
  • Copiez sur une autre machine tout fichier dont vous n’êtes pas certain qu’il soit inutile.

Où l’espace part le plus souvent

Contrôlez ces emplacements dans l’ordre, en mesurant chacun avec du -sh avant de nettoyer :

  • Le journal systemd : journalctl --vacuum-size=200M le réduit à 200 Mo.
  • /var/lib/docker : images inutilisées et logs JSON des conteneurs, à limiter avec max-size dans /etc/docker/daemon.json.
  • /var/cache/apt : apt clean supprime les paquets déjà téléchargés.
  • Les sauvegardes et exports (.sql, .tar.gz) oubliés dans /root ou /home.

Vérifier que tout fonctionne

Relancez df -h : le volume doit repasser sous 85 %. Redémarrez ensuite les services qui avaient échoué, par exemple systemctl restart nginx, puis lancez systemctl --failed : la liste doit être vide.

Questions fréquentes

df -h affiche 100 % mais du trouve beaucoup moins, pourquoi ?

Un fichier supprimé reste sur le disque tant qu’un processus le garde ouvert, souvent un log effacé à la main. lsof +L1 liste ces fichiers et le processus concerné : redémarrez ce service pour libérer l’espace. Pour vider un log actif sans le supprimer, utilisez truncate -s 0 suivi du chemin du fichier.

Pourquoi No space left on device alors que df -h montre de l’espace libre ?

Le système de fichiers n’a plus d’inodes : df -i affiche alors 100 % dans la colonne IUse%. La cause est un très grand nombre de petits fichiers (sessions PHP, cache, files d’e-mails). du --inodes -xd1 /var | sort -n montre le dossier qui en contient le plus.

MariaDB ou MySQL ne redémarre plus après un disque plein, que faire ?

Libérez d’abord de l’espace ailleurs, puis lancez systemctl restart mariadb et lisez journalctl -u mariadb -n 50. Ne supprimez jamais les fichiers ibdata1, ib_logfile* ou les journaux binaires à la main : purgez ces derniers avec PURGE BINARY LOGS depuis le client SQL.

docker system prune supprime-t-il mes données ?

Sans option, il supprime les conteneurs arrêtés, les réseaux inutilisés, les images sans tag et le cache de construction, mais pas les volumes. --volumes efface aussi les volumes non rattachés, donc des bases de données possibles. Vérifiez docker ps -a avant : un conteneur arrêté que vous comptiez relancer sera perdu.