Comment puis-je vérifier quelle partie de mon système Linux utilise le plus d'espace disque?


0

J'ai un serveur Ubuntu qui manque d'espace disque (36 Go sur 37 Go). J'ai utilisé plusieurs méthodes pour vérifier l'utilisation du disque, mais le résultat semble assez vague pour moi.

J'ai utilisé les commandes suivantes pour la vérification, et le résultat est le suivant:

$ du -sh /*

6.2M    /bin
4.0K    /boot
20K     /dev
47M     /etc
2.1G    /home
72K     /include
27M     /lib
0       /lib64
4.0K    /media
4.0K    /mnt
546M    /opt
0       /proc
287M    /root
5.2M    /sbin
4.0K    /selinux
4.0K    /srv
0       /sys
59M     /tmp
2.7G    /usr
1.7G    /var

Aucun d'entre eux ne semble être proche de 36 Go, alors je vérifie comme ceci:

$ df -h

Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1              38G   35G  835M  98% /
udev                   10M   20K   10M   1% /dev
none                  500M   16K  500M   1% /dev/shm
none                  500M   68K  500M   1% /var/run
none                  500M     0  500M   0% /var/lock

Cependant, je n'ai pas pu déterminer quel répertoire utilisait la plus grande partie de l'espace disque. Quelqu'un peut-il me donner un indice sur la façon de vérifier? Merci.


Juste pour vous assurer qu'il n'y a pas de message d'erreur dans la dusortie: Vous exécutez cette commande en tant que root, n'est-ce pas?!
mpy

@mpy: oui, j'utilise root.
Shang Wang

Réponses:


2

Je ne pense pas qu'un "outil de visualisation d'espace disque" puisse vous aider dans ce cas: l'espace occupé et visible par ces outils est identique à celui visible du, seuls ces outils le font plus en détail. Mais l'outil ne signalerait toujours que les 8-10 Go que vous savez déjà utilisés, et non le lieu où se trouvent ces vingt gigaoctets supplémentaires qui sont "manquants en action".

Une explication possible d'un espace "en train de disparaître" de telles proportions est qu'il se trouve dans un (ou plusieurs) fichier (s) supprimé (s ) .

Si vous ouvrez un fichier sous Unix et que, même s'il est toujours ouvert, vous le supprimez (il le dissocie), il existera toujours, mais il ne sera visible que par le processus qui conserve son descripteur de fichier. le descripteur.

C'est un excellent moyen de gérer les fichiers temporaires.

Malheureusement, si le fichier temporaire fuit et que des données y sont ajoutées en permanence, sans jamais fermer ni recréer le fichier, beaucoup d’espace disque risque de "disparaître".

En tant que root, essayez:

ls -la /proc/*/fd/* | grep deleted

Les noms de fichier et les ID de processus vous indiqueront quels processus conservent de l’espace "non lié".

Si vous pouvez le faire, bien sûr, un redémarrage aura le même effet plus rapidement. Et certains processus sont tellement imbriqués dans le système qu'il est préférable de les redémarrer plutôt que de les arrêter et de gérer tous les autres processus et services dépendants .

Par exemple, sur ma machine, j'ai environ 25 fichiers de ce type, et celui-ci

lrwx------ 1 root  root  64 May  9 07:45 /proc/732/fd/8 -> /tmp/vmware-root/vmware-usbarb-732.log (deleted)

Je sais que, parfois, la taille varie de plusieurs mégaoctets. Fonctionnement

vmware-usbarbitrator --kill

vmware-usbarbitrator

peut libérer de zéro à 100 millions d’espace en fonction de sa durée de fonctionnement et de la quantité de ressources que j’ai utilisée vmplayer.

Automatiser le chèque

Un moyen de vérifier quels fichiers sont très volumineux serait de vérifier leur taille: la plupart des fichiers non liés ne contiennent que quelques octets.

Cette méthode utilise wc, ce qui est très inefficace; probablement, ouvrir le fichier, chercher SEEK_ENDet retourner la valeur de ftell()serait beaucoup, beaucoup plus rapide (surtout sur les gros fichiers). Mais il faudrait compiler un petit utilitaire pour le faire.

for i in $( ls -la /proc/*/fd/* 2>/dev/null \
            | grep deleted \
            | sed -e 's/.*\(\/proc\S*\) -.*/\1/g' ); do
    wc -c $i | tr "\n" "="; readlink $i
done | grep -v "^0 " | sort -rn

Cela utilise un moyen (espérons-le) portable de lister les fichiers virtuels de tous les fichiers supprimés et de les lire wc. Ensuite, pour chaque fichier, lit le lien symbolique. Les fichiers de longueur nulle sont ignorés pour éviter l'encombrement.

Sur mon système fraîchement démarré, cela me donne

217032 /proc/812/fd/9=/var/run/nscd/dbMn7Auu (deleted)
217032 /proc/812/fd/8=/var/run/nscd/dbMn7Auu (deleted)
3278 /proc/2357/fd/3=/tmp/vmware-root/vmware-apploader-2327.log (deleted)
2257 /proc/2422/fd/7=/tmp/vmware-root/vmware-authdlauncher-2418.log (deleted)

Je sais donc qu’il nscds’appuie sur 400 Ko d’espace invisible (cela ne change pas si je redémarre nscd; il s’agit donc probablement d’une zone de travail qui ne s’agrandit pas… beaucoup. Rien ne m’empêche de suivre le processus, bien que).

Il serait également facile de sauvegarder le code ci-dessus dans un petit utilitaire et de l'exécuter cron, en supprimant toutes les valeurs inférieures à (par exemple) 500 Mo, mais l'envoi d'un courrier électronique à l'administrateur devrait éventuellement faire apparaître quelque chose.


Une alternative à la méthode ls / proc serait lsof | grep supprimé .
tink

0

Vous pouvez essayer un outil représentant graphiquement tous les différents fichiers et dossiers de votre système et les dimensionner en fonction de leur utilisation du disque. Un de ces outils est 'xdiskusage'. Voir ce lien pour plus.



En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.