Lorsque des applications et des services s'exécutent en continu sur une instance Linux, les journaux, le cache et les données métier s'accumulent au fil du temps et consomment progressivement l'espace disque disponible. Lorsque le disque est plein, il devient impossible d'écrire de nouvelles données, ce qui entraîne directement une interruption de service ou un comportement anormal.
Symptômes
Lors de la création de fichiers ou de l'exécution d'applications sur une instance Linux, le message d'erreur No space left on device s'affiche, indiquant que les ressources de stockage sont épuisées.
Diagnostic et solutions
Avant toute modification, créez un snapshot manuel pour sauvegarder vos données et éviter toute perte accidentelle susceptible d'affecter votre activité.
Scénario 1 : L'espace disque est épuisé
-
Vérifiez l'utilisation du disque.
Exécutez
sudo df -hpour afficher l'utilisation du disque pour chaque point de montage. Si la valeurUse%est de 100 %, l'espace correspondant est plein. -
Localisez et nettoyez les fichiers ou répertoires volumineux qui consomment de l'espace disque.
À partir du répertoire racine, exécutez
sudo du -sh /*pour investiguer niveau par niveau, en réduisant rapidement la portée afin de trouver le répertoire qui consomme le plus d'espace.-
Sur la base de la sortie, localisez le répertoire dont l'utilisation est la plus importante, puis répétez
sudo du -sh <directory name>/*sur ce répertoire pour descendre niveau par niveau et identifier les fichiers volumineux.Par exemple, exécutez
sudo du -sh /mnt/*pour afficher l'espace consommé par les fichiers et sous-répertoires dans le répertoire/mnt.Le tableau ci-dessous répertorie les éléments courants pouvant être nettoyés. Supprimez les fichiers inutiles en fonction de vos besoins métier réels.
Type
Emplacement courant
Description et recommandation
Fichiers journaux
/var/log
Journaux d'application et système. Vous pouvez nettoyer les journaux historiques archivés. Pour les journaux systemd, utilisez
sudo journalctl --vacuum-size=200Mpour limiter la taille au lieu d'utiliser directementrmpour supprimer les journaux en cours d'écriture.Fichiers temporaires
/tmp, /var/tmp
Données temporaires. Nettoyez-les après avoir confirmé qu'aucun processus ne les utilise.
Cache d'application / journaux métier
Répertoires métier personnalisés
Nécessite un jugement basé sur votre activité. Avant le nettoyage, assurez-vous de confirmer que les données ne sont pas critiques afin d'éviter toute suppression accidentelle.
Si l'espace reste insuffisant après le nettoyage, augmentez la capacité de votre disque.
Scénario 2 : Les ressources inode sont épuisées
Chaque fichier consomme un inode. Si votre disque contient de nombreux petits fichiers, les inodes peuvent être épuisés même si de l'espace disque reste disponible, empêchant ainsi la création de nouveaux fichiers.
-
Vérifiez l'utilisation des inodes.
Exécutez
sudo df -i. Si la valeurIUse%atteint 100 %, les ressources inode sont épuisées. -
Supprimez les fichiers ou dossiers inutiles.
Utilisez
sudo du -sh --inodes <folder name>/*pour afficher le nombre d'inodes utilisés par les fichiers et sous-dossiers dans un répertoire spécifié. Si nécessaire, naviguez dans le répertoire et utilisez cette commande de manière récursive pour localiser une utilisation élevée des inodes.Par exemple, utilisez
sudo du -sh --inodes /mnt/*pour vérifier le nombre d'inodes utilisés par les fichiers et sous-répertoires dans le répertoire/mnt. Si le nombre d'inodes reste insuffisant après le nettoyage, augmentez la capacité de votre disque.
Scénario 3 : Les fichiers supprimés occupent toujours de l'espace
Même après la suppression d'un fichier, le système ne libère pas son espace disque si un processus l'utilise toujours (c'est-à-dire s'il détient un descripteur de fichier ouvert). L'espace n'est libéré que lorsque le processus se termine ou ferme explicitement le fichier.
-
Installez l'outil
lsof.Les fichiers supprimés mais occupant toujours de l'espace ne peuvent pas être vus avec
dfoudu. Utilisez l'outillsofpour les lister.Alibaba Cloud Linux, CentOS
sudo yum install -y lsofDebian, Ubuntu
sudo apt install -y lsof -
Affichez l'espace de stockage occupé par les fichiers supprimés.
sudo lsof | grep delete | sort -k7 -rn | moreLa septième colonne de la sortie affiche la taille du fichier en octets. Additionnez ces valeurs pour calculer l'espace total non libéré.
tail 619544 root 3r REG 253,1 50000000 136507 /home/test_file (deleted) aliyun-se 347980 root 7uW REG 253,1 0 262160 /tmp/AliyunAssistClientSingleLock.lock (deleted) aliyun-se 347980 347997 aliyun-se root 7uW REG 253,1 0 262160 /tmp/AliyunAssistClientSingleLock.lock (deleted) aliyun-se 347980 347996 aliyun-se root 7uW REG 253,1 0 262160 /tmp/AliyunAssistClientSingleLock.lock (deleted) aliyun-se 347980 347995 aliyun-se root 7uW REG 253,1 0 262160 /tmp/AliyunAssistClientSingleLock.lock (deleted) aliyun-se 347980 347994 aliyun-se root 7uW REG 253,1 0 262160 /tmp/AliyunAssistClientSingleLock.lock (deleted) aliyun-se 347980 347983 aliyun-se root 7uW REG 253,1 0 262160 /tmp/AliyunAssistClientSingleLock.lock (deleted) aliyun-se 347980 347982 aliyun-se root 7uW REG 253,1 0 262160 /tmp/AliyunAssistClientSingleLock.lock (deleted) aliyun-se 347980 347981 aliyun-se root 7uW REG 253,1 0 262160 /tmp/AliyunAssistClientSingleLock.lock (deleted) -
Enregistrez le nom du processus et le PID.
Exécutez
sudo lsof | grep deleteet notez les champsCOMMANDetPIDpour identifier le nom du processus et l'ID du processus. -
Redémarrez ou arrêtez le service concerné.
Exécutez
sudo ps -ef | grep <PID>pour confirmer l'objectif du processus. Après avoir évalué l'impact, redémarrez ou arrêtez le service.ImportantLe redémarrage ou l'arrêt d'un service peut affecter votre activité. Évaluez soigneusement la situation et effectuez cette action pendant une fenêtre de maintenance appropriée.
Scénario 4 : Le point de montage est superposé
Lorsqu'un répertoire non vide est utilisé comme point de montage pour un autre périphérique, son contenu existant devient masqué. Cependant, les processus qui ont déjà le répertoire ouvert peuvent toujours écrire dans l'espace sous-jacent. Cette consommation d'espace « cachée » ne peut pas être observée avec la commande df et peut épuiser de manière inattendue l'espace disque.
-
Affichez les informations sur les dossiers en double.
Exécutez
sudo lsblket vérifiez la colonne MOUNTPOINT pour détecter les noms de répertoire répétés.sudo lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 253:0 0 40G 0 disk ├─vda1 253:1 0 2M 0 part ├─vda2 253:2 0 200M 0 part /boot/efi └─vda3 253:3 0 39.8G 0 part / vdb 253:16 0 40G 0 disk └─vdb1 253:17 0 40G 0 part /mnt vdc 253:32 0 40G 0 disk └─vdc1 253:33 0 40G 0 part /mntDans cet exemple, les partitions
vdb1etvdc1sont toutes deux montées sur/mnt, ce qui indique un risque de superposition du point de montage. -
Démontez le système de fichiers.
ImportantLe démontage d'un système de fichiers peut interrompre les services qui dépendent du chemin d'accès. Évaluez le risque et choisissez un moment approprié pour effectuer cette opération.
Vous pouvez obtenir le
<duplicate mount directory>à partir de l'étape précédente.sudo umount <duplicate mount directory>Dans cet exemple,
/mntest le répertoire de montage en double. L'exécution desudo umount /mntdémonte le périphérique monté le plus récemment,vdc1. -
Identifiez le nom du périphérique du point de montage superposé.
Exécutez
sudo df -hpour localiser le nom du périphérique associé au point de montage actuellement actif.sudo df -hFilesystem Size Used Avail Use% Mounted on devtmpfs 3.7G 0 3.7G 0% /dev tmpfs 3.7G 0 3.7G 0% /dev/shm tmpfs 3.7G 524K 3.7G 1% /run tmpfs 3.7G 0 3.7G 0% /sys/fs/cgroup /dev/vda3 40G 4.5G 33G 12% / /dev/vda2 200M 5.8M 194M 3% /boot/efi /dev/vdb1 40G 40G 0 100% /mnt tmpfs 747M 0 747M 0% /run/user/0Dans cet exemple, la partition actuellement montée sur
/mntestvdb1. Par conséquent, le nom du périphérique du point de montage superposé estvdb1. -
Résolvez le problème d'espace disque plein.
-
Nettoyez les fichiers ou dossiers inutiles dans l'espace superposé.
Dans cet exemple, nettoyez le répertoire
/mntmonté parvdb1. -
Si l'espace reste insuffisant après le nettoyage, augmentez la capacité de votre disque et montez-le sur un autre répertoire vide.
Dans cet exemple, le périphérique cible à augmenter est
vdb1.
-
Ne montez pas plusieurs périphériques sur le même répertoire.
Le montage de plusieurs périphériques sur le même répertoire masque l'espace du premier périphérique monté et peut entraîner l'écriture de données sur le mauvais périphérique. Montez toujours différents périphériques sur des répertoires vides distincts.
Scénario 5 : Les fichiers liés à Docker consomment beaucoup d'espace
Docker génère de nombreuses images intermédiaires, conteneurs arrêtés et caches de construction lors de son fonctionnement. Au fil du temps, ceux-ci s'accumulent et consomment de l'espace disque.
-
Vérifiez l'utilisation de l'espace disque par Docker.
Exécutez
sudo df -h. Si la valeurUse%pour unFilesystemde typeoverlayatteint 100 %, le stockage Docker est plein. -
Évaluez l'utilisation des ressources Docker.
Exécutez
sudo docker system dfet examinez les champsSizeetRECLAIMABLEpour comprendre la consommation d'espace.sudo docker system dfTYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 21 9 13.94GB 10.66GB(76%) Containers 9 5 30.09MB 0B(0%) Local volumes 6 6 259.9MB 0B(0%) Build Cache 0 0 0B 0BDans l'exemple, les images
Dockeroccupent 13,94 Go, dont 10,66 Go sont récupérables ; nous vous recommandons de prioriser le nettoyage des images inutilisées. -
Nettoyez les fichiers inutiles.
Si les fichiers Docker ne peuvent pas être nettoyés, suivez les étapes du Scénario 1 : L'espace disque est épuisé .
Supprimez tous les conteneurs arrêtés : exécutez
sudo docker container prune.Supprimez toutes les images orphelines (images sans tag) : exécutez
sudo docker image prune.Supprimez le cache de construction inutilisé : exécutez
sudo docker builder prune.
Scénario 6 : Limite des watches inotify atteinte
Lors de l'exécution de commandes telles que sudo tail -f, vous pouvez voir l'erreur tail: cannot watch '...': No space left on device. Cela ne signifie pas que l'espace disque est plein. Le système a plutôt atteint le nombre maximal de watches inotify utilisées pour surveiller les modifications de fichiers et de répertoires. Vous devez augmenter cette limite.
-
Vérifiez la limite actuelle des watches inotify.
Exécutez
sudo cat /proc/sys/fs/inotify/max_user_watchespour afficher la limite actuelle pour lesinotify watches. -
Augmentez la limite des watches inotify.
L'augmentation de cette limite accroît l'utilisation de la mémoire. Évaluez soigneusement la situation avant de modifier quoi que ce soit. La valeur
<new limit>ne doit généralement pas dépasser 524288.sudo sh -c "echo fs.inotify.max_user_watches=<new limit> >> /etc/sysctl.conf" -
Chargez la nouvelle configuration.
Exécutez
sudo sysctl --systempour appliquer la configuration mise à jour. -
Vérifiez le résultat.
Exécutez à nouveau
sudo cat /proc/sys/fs/inotify/max_user_watchespour confirmer que la limite desinotify watchesa été mise à jour comme prévu.
Références
Pour stocker des quantités massives de fichiers statiques tels que des images, des vidéos ou des archives, utilisez Object Storage Service (OSS).
Pour le partage de fichiers haute performance et à forte concurrence, stockez les fichiers à l'aide de File Storage NAS.
Pour la collecte et l'analyse de journaux à grande échelle, stockez les journaux dans Simple Log Service (SLS) afin de simplifier les requêtes et de réduire l'utilisation du stockage local.