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
-
Identifier le volume
Exécutez df -hT puis df -i. Un volume peut manquer d’inodes même s’il reste des gigaoctets libres.
-
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.
-
Nettoyer avec prudence
Compressez ou supprimez les anciens logs et exports connus. N’utilisez pas docker system prune -a sur un serveur de production.
-
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.