8 votes

Comment voir l'utilisation du disque avec moins d'overhead en bash ?

du -csh /

Ce qui précède prendra énormément de temps à calculer, y a-t-il un moyen de voir le résultat le moins précis avec moins de frais généraux ?

UPDATE

Ce que je veux savoir, c'est la taille totale sous un répertoire spécifique.

9voto

Kyle Brandt Points 81077

En ce qui concerne une version plus optimisée du je n'en ai pas connaissance. Les choses qui me viennent à l'esprit sont :

  1. Stockez ces fichiers sur un disque RAM ou quelque chose comme ça.
  2. Si une seule application écrit dans ce dossier et son sous-dossier, il faut que l'application en garde la trace.
  3. Si tous ces fichiers ont à peu près la même taille et sont répartis uniformément dans les répertoires, vous pouvez simplement compter le nombre de sous-répertoires et le multiplier par le nombre de fichiers par répertoire, puis par la taille par fichier. Vous pouvez faire cela rapidement en utilisant simplement le nombre de liens durs pour le répertoire si vous n'avez qu'une structure profonde d'un seul répertoire ( stat -c '%h' ) - 2.
  4. Faites en sorte que tous ces fichiers appartiennent à un utilisateur spécifique et utilisez le mécanisme des quotas.
  5. Utilisez une partition dédiée et utilisez simplement df. Un système de fichiers virtuel (un fichier sur un système de fichiers qui est monté via une boucle) pourrait également faire cela.

Parmi toutes ces options, celles des quotas et des partitions dédiées sont probablement les plus simples et les plus efficaces.

6voto

sysadmin1138 Points 129885

Le problème est que "du" doit énumérer tous les objets de la sous-arborescence. C'est une opération qui nécessite beaucoup de métadonnées et qui prend du temps pour la plupart des systèmes de fichiers Linux. Certains systèmes de fichiers, comme NTFS et NSS de Novell, ont la capacité de garder la trace de la taille des répertoires comme suit dans les métadonnées ce qui rend cette opération beaucoup plus rapide. En général, si votre système de fichiers prend en charge les quotas de répertoire d'une manière ou d'une autre, il doit garder la trace de ces données en interne pour les faire respecter. Chaque changement de taille est répliqué dans l'arborescence du répertoire au point de quota (NTFS) ou dans chaque répertoire (NSS) lorsqu'il se produit, de sorte que l'obtention de la taille de l'arborescence du répertoire est très rapide.

Malheureusement, il n'y a pas de moyen de faire fonctionner du plus rapidement, seulement des solutions de contournement.

  • Exécuter 'du' en mode batch et vivre avec des résultats non live
  • Créer un nouveau système de fichiers et utiliser 'df' à la place.
  • Créez un grand fichier qui contiendra votre répertoire, montez-le en boucle, formatez-le, et utilisez 'df' à la place sur ce nouveau point de montage. Si vous avez besoin de plus d'espace, démontez le montage en boucle, étendez le fichier, et remontez.

4voto

David Rickman Points 3270
du -h --max-depth=1

Vous donne les tailles en format humain KB/MB/GB de votre répertoire de travail actuel.

3voto

Dan Andreatta Points 5352

Avec les outils standard, vous devez obtenir la taille de chaque fichier du répertoire chaque fois que vous voulez connaître la taille totale. Une façon peut-être plus efficace de le faire serait d'avoir un "moniteur de taille de répertoire", qui garde la trace de la taille actuelle du répertoire. Une telle chose n'existe pas (à ma connaissance), mais vous pourriez en implémenter une avec inotify . Peut-être pas avec bash (et inotify-tools ), mais vous pourriez probablement utiliser Python et pyinotify, par exemple.

2voto

jason saldo Points 5036

Vous pourriez trouver gt5 pour être utile. Il stocke les données les plus récentes du et fait une comparaison avec cette information lors de la prochaine exécution. Il affiche sa sortie en utilisant un navigateur en mode texte tel que links .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X