J'ai rencontré un problème sur l'un de mes serveurs sous 16.04: il ne reste plus d'espace disque.
Je n'ai aucune idée de ce qui occupe l'espace. Existe-t-il une commande pour répertorier les tailles de répertoire actuelles, afin que je puisse parcourir et finir dans le répertoire occupant tout l'espace?
Comme toujours sous Linux, il y a plus d'une façon de faire le travail. Toutefois, si vous devez le faire à partir de la CLI, voici ma méthode préférée:
Je commence par exécuter ceci en tant que root ou avec Sudo:
du -cha --max-depth=1 / | grep -E "M|G"
Le grep consiste à limiter les lignes renvoyées à celles qui renvoient avec des valeurs comprises dans la plage des mégaoctets ou des gigaoctets. Si vos disques sont suffisamment volumineux, vous pouvez également ajouter |T
pour inclure les montants en téraoctets. Vous pouvez obtenir des erreurs sur /proc
, /sys
et/ou /dev
car ce ne sont pas de vrais fichiers sur le disque. Cependant, il devrait toujours fournir une sortie valide pour le reste des répertoires en racine. Une fois que vous avez trouvé les plus gros, vous pouvez ensuite exécuter la commande à l’intérieur de ce répertoire afin de mieux cerner le coupable. Ainsi, par exemple, si /var
était le plus gros, vous pourriez le faire comme suit:
du -cha --max-depth=1 /var | grep -E "M|G"
Cela devrait vous conduire aux enfants à problèmes!
Considérations supplémentaires
Bien que la commande ci-dessus fasse certainement l'affaire, j'ai eu quelques critiques constructives dans les commentaires ci-dessous qui ont souligné certaines choses que vous pourriez également inclure.
grep
que j'ai fourni peut entraîner le renvoi occasionnel de la valeur "K" si le nom du répertoire ou du fichier a une majuscule G ou M. Si vous ne voulez absolument pas que l'un des répertoires K soit affiché, vous voudriez votre jeu regex pour être plus créatif et complexe. par exemple. grep -E "^[0-9\.]*[MG]"
Si vous savez quel lecteur est le problème et qu'il contient d'autres lecteurs montés que vous ne voulez pas perdre de temps, y compris dans votre recherche, vous pouvez ajouter l'indicateur -x
à votre commande du
. Description de la page de manuel de ce drapeau:
-x, --one-file-system
skip directories on different file systems
Vous pouvez trier la sortie de la commande du
de sorte que la valeur la plus élevée soit en bas. Il suffit d’ajouter ceci à la fin de la commande: | sort -h
J'utilise cette commande
Sudo du -aBM -d 1 . | sort -nr | head -20
De temps en temps, je dois l'exécuter à partir du répertoire /
, car j'ai placé quelque chose dans un emplacement impair.
Il existe déjà de nombreuses bonnes réponses sur les moyens de trouver des répertoires prenant le plus d’espace. Si vous avez des raisons de croire que le problème principal est peu de fichiers volumineux, plutôt que plusieurs petits, vous pouvez utiliser quelque chose comme find / -size +10M
.
Je ne connais pas Ubuntu et je ne peux pas vérifier ma réponse, mais publiez ici ma réponse basée sur mon expérience d’administrateur unix il ya longtemps.
Découvrez quel système de fichiers manque d'espace
df -h
listera tous les systèmes de fichiers, leur taille et leur espace libre. Vous ne perdez du temps que si vous étudiez des systèmes de fichiers disposant de suffisamment d'espace. Supposons que le système de fichiers complet est/myfilesystem. vérifiez la sortie df s'il existe des systèmes de fichiers montés sur des sous-répertoires de/myfilesystems. Si tel est le cas, les tâches suivantes doivent être adaptées à cette situation.
Découvrez combien d'espace est utilisé par les fichiers de ce système de fichiers
du -sh /myfilesystem
L'option -x peut être utilisée pour garantir que seuls les fichiers membres de ce système de fichiers sont pris en compte. Certaines variantes d'Unix (Solaris, par exemple) ne connaissent pas l'option -x pour du. Ensuite, vous devez utiliser des solutions de contournement pour trouver le du de votre système de fichiers.
Maintenant, vérifiez si le des fichiers visibles est approximativement la taille de l’espace utilisé affiché par df. Si tel est le cas, vous pouvez commencer à rechercher les fichiers/répertoires volumineux du système de fichiers/myfilesystem à nettoyer.
trouver les plus grands sous-répertoires d'un répertoire /.../dir
du -sk /.../dir/*|sort -n
l'option -k oblige du à produire le sie en kilo-octets sans unité. Cela peut être la valeur par défaut sur certains systèmes. Ensuite, vous pouvez omettre cette option. Les fichiers/sous-répertoires les plus volumineux seront affichés au bas de la sortie.
Si vous avez trouvé un fichier/répertoire volumineux dont vous n’avez plus besoin, vous pouvez le supprimer de manière appropriée. Ne vous embêtez pas sur les petits répertoires en haut de la sortie. Cela ne résoudra pas votre problème si vous les supprimez. Si vous n’avez toujours pas assez d’espace, vous pouvez répéter l’étape 4 dans les sous-répertoires généraux affichés en bas de la liste.
Mais que se passe-t-il si la sortie du n'est pas approximativement l'espace disponible affiché par df?
Si la sortie du est plus grande, vous avez oublié un sous-répertoire dans lequel un autre système de fichiers est monté. Si la sortie du est beaucoup plus petite, les fichiers som ne figurent dans aucun répertoire inspecté. Il peut y avoir différentes raisons à son phénomène.
certains processus utilisent un fichier déjà supprimé. Par conséquent, ces fichiers ont été supprimés du répertoire et du ne peuvent pas les voir. Mais pour le système de fichiers, leurs blocs sont encore utilisés jusqu'à ce que les processus soient fermés. Vous pouvez essayer de trouver les processus pertinents (par exemple avec lsof) et les forcer à fermer ces fichiers (par exemple en arrêtant l'application ou en supprimant les processus). Ou vous redémarrez simplement votre machine.
il y a des fichiers dans des répertoires qui ne sont plus visibles car sur l'un de leurs répertoires parents, un autre système de fichiers est monté. Donc, si vous avez un fichier/myfilesysem/subdir/bigfile et montez maintenant un autre système de fichiers sur/myfilesystem/subdir, vous ne pouvez plus voir ce fichier et
du -shx /myfilesystem
signalera une valeur qui ne contient pas la taille de/myfilesystem/subdir/bigfile. Le seul moyen de savoir s’il existe de tels fichiers est de démonter/mon système de fichiers/subir et de vérifier avec
ls -la /myfilesystem/subdir
s'il contient des fichiers.
Il peut y avoir des types spéciaux de systèmes de fichiers qui utilisent/réservent de l'espace sur un disque qui n'est pas visible pour la commande ls. Vous avez besoin d'outils spéciaux pour l'afficher.
En plus de cette manière systématique en utilisant la commande du, vous pouvez en utiliser d’autres. Vous pouvez donc utiliser la commande find pour rechercher des fichiers dont la taille est supérieure à une valeur fournie. Vous pouvez également rechercher des fichiers dont la taille est supérieure à celle que vous avez fournie ou qui ont été récemment créés ou qui portent un nom spécial (par exemple * .log, core, * .trc). Mais vous devriez toujours faire un df comme décrit dans 1 pour pouvoir travailler sur le bon système de fichiers
Si vous souhaitez également ne pas utiliser de commande, voici une application: Filelight
Il vous permet de visualiser rapidement ce qui utilise l’espace disque de n’importe quel dossier.
Essayez Sudo apt-get autoremove
pour supprimer les fichiers inutilisés si vous ne l'avez pas déjà fait.
J'utilise souvent celui-ci
du -sh /*/
Ensuite, si je trouve de gros dossiers, je vais y accéder et faire des recherches plus approfondies.
cd big_dir
du -sh */
Si nécessaire, vous pouvez également le faire trier automatiquement avec
du -s /*/ | sort -n
Je trouve particulièrement utile la sortie d'outils comme Filelight, mais, comme dans votre cas, sur les serveurs, aucune interface graphique n'est installée, mais la commande du
est toujours disponible.
Ce que je fais normalement c'est:
du
dans un fichier (du / > du_output.txt
);DuFS
pour "monter" la sortie du
dans un répertoire temporaire; DuFS
utilise Fuse pour créer un système de fichiers virtuel (= aucun fichier n'est créé, tout est faux) conformément à la sortie du
;Disclaimer: J'ai écrit dufs
- justement parce que je dois souvent savoir ce qui ne fonctionne pas sur le disque sur des machines sans tête.
Pas vraiment une réponse - mais un addenda.
Vous êtes vraiment à court d’espace et vous ne pouvez pas installer ncdu à partir de la réponse de @erman.
Quelques suggestions
Sudo apt clean all
pour supprimer les packages que vous avez déjà téléchargés. SÛRSudo rm -f /var/log/*gz
purger les fichiers journaux de plus d'une semaine ou deux - ne supprimera pas les journaux les plus récents/actuels. LE PLUS SÛRSudo lsof | grep deleted
répertorie tous les fichiers ouverts, mais filtrez ceux qui ont été supprimés du disque. FAIRLY SAFESudo rm /tmp/*
supprimer des fichiers temporaires - si quelque chose les utilise, vous pouvez perturber le processus. PAS VRAIMENT QUE SÉCURITAIREQue `lsof on puisse retourner des lignes comme ceci:
server456 ~ $ lsof | grep deleted
init 1 root 9r REG 253,0 10406312 3104 /var/lib/sss/mc/initgro ups (deleted)
salt-mini 4532 root 0r REG 253,0 17 393614 /tmp/sh-thd-1492991421 (deleted)
Ne peut pas faire grand chose pour la ligne d'initialisation, mais la deuxième ligne suggère que salt-minion a un fichier ouvert qui a été supprimé et les blocs de disque seront renvoyés une fois que tous les descripteurs de fichier sont fermés par un redémarrage du service.
Parmi les autres suspects courants, citons syslog/rsyslog/syslog-ng, squid, Apache ou tout processus "lourd" exécuté par votre serveur.