Comment voir l'utilisation du disque avec moins de surcharge en bash?


8
du -csh /

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

MISE À JOUR

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

Réponses:


9

En ce qui concerne une version plus optimisée du, je n'en connais pas. 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, demandez à l'application de garder une trace.
  3. Si tous ces fichiers ont à peu près la même taille et une quantité égale d'entre eux répartis entre les répertoires, vous pouvez simplement compter le nombre de sous-répertoires et le multiplier par fichier par répertoire, puis par fichier. Vous pouvez le faire rapidement en utilisant simplement le nombre de liens physiques pour le répertoire si vous n'avez qu'une seule structure profonde de répertoire ( stat -c '%h') - 2.
  4. Faites en sorte que tous ces fichiers appartiennent à un utilisateur spécifique et utilisez le mécanisme de quota.
  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 le bouclage) pourrait également le faire.

De tout cela, les options de quota et de partition dédiée sont probablement les plus simples et les plus efficaces.


6

Le problème est que «du» doit énumérer tous les objets de la sous-arborescence. Il s'agit d'une opération intensive en métadonnées, qui prend un certain temps pour la plupart des systèmes de fichiers Linux. Certains systèmes de fichiers, NTFS et NSS de Novell viennent à l'esprit, ont la capacité de garder une trace des tailles de répertoire comme celle-ci dans les métadonnées, ce qui rend cette opération beaucoup plus rapide. En règle générale, si votre système de fichiers prend en charge les quotas de répertoires, il doit conserver ces données en interne pour l'application, chaque changement de taille est répliqué dans l'arborescence de répertoires jusqu'au point de quota (NTFS) ou dans chaque répertoire (NSS ) quand cela se produit, il est donc très rapide d'obtenir une taille d'arborescence de répertoires.

Malheureusement, il n'y a aucun moyen d'accélérer le du, juste des solutions de contournement.

  • Exécutez «du» en mode batch et vivez avec des résultats non live
  • Créez un nouveau système de fichiers et utilisez plutôt 'df'
  • Créez un fichier volumineux qui contiendra votre répertoire, montez-le en boucle, formatez-le et utilisez plutôt 'df' sur ce nouveau point de montage. Si vous avez besoin de plus d'espace, démontez le montage de bouclage, étendez le fichier et remontez.

+1 Ceci est une réponse très utile.
Richard Holloway

4
du -h --max-depth=1

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


Je pense qu'ils veulent savoir pourquoi il faut autant de temps pour générer et répondre. Je pense que Windows agit de la même manière. Si vous cliquez avec le bouton droit sur un répertoire, vous devez attendre pendant qu'il calcule la taille de chaque sous-répertoire. C'est juste la façon dont le système de fichiers fonctionne.
The Unix Janitor

Ouais, sauf s'ils exécutent un service d'indexation ou quelque chose.
David Rickman

3

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. Un moyen peut-être plus efficace de le faire serait d'avoir un "moniteur de taille de répertoire", qui garde une trace de la taille actuelle du répertoire. Il n'y a rien de tel (que je sache), mais vous pouvez en implémenter un avec inotify. Peut-être pas avec bash (et inotify-tools), mais vous pourriez probablement utiliser python et pyinotify, par exemple.


2

Vous pourriez trouver gt5utile. Il stocke les duinformations les plus récentes et fait une différence par rapport à la prochaine exécution. Il affiche sa sortie à l'aide d'un navigateur en mode texte tel que links.


2

En outre, pensez à l'option -x sur du - "un système de fichiers" si vous le faites

du -xh / --max-depth=1 

Vous ne verrez que le résumé de l'utilisation du disque sur votre partition racine, et il n'essaiera pas d'ajouter / proc, / sys, / dev, etc.


2

si vous ne souhaitez utiliser le disque que pour le système de fichiers racine,

df -h /


1

Non. Pourriez-vous périodiquement faire un du piped dans un fichier texte, dans un travail cron configuré pour s'exécuter pendant la nuit, afin que vous n'ayez pas de données tout à fait disponibles immédiatement disponibles?

Notez que la mesure de l'espace disque utilisé par un dossier contenant un grand nombre de fichiers sous Windows prend également un certain temps.




0

Peut-être

df -h

un texte supplémentaire car une réponse courte et concise ne suffit pas pour que serverfault pense que je suis humain.


Mais j'ai besoin de connaître la taille totale sous un répertoire spécifique
apache

alors l'utilisation devra utiliser du
The Unix Janitor

Mais dans Windows, je peux voir l'espace total utilisé sans frais généraux, pourquoi pas sous Linux?
apache

es-tu sérieux? ntfs n'est pas ext3
The Unix Janitor

1
@apache, oh il y a des frais généraux, essayez de voir la taille d'un dossier de 20 Go avec beaucoup de fichiers de 10 à 20 Mo. Il y a des frais généraux def.
Zypher

0

Pour trouver l'espace sous ce répertoire uniquement, répertoriez-le à la place de /. Pour trouver l'espace sous les répertoires fooet bar, répertoriez les deux:

du -csh foo bar

0

Vous devez utiliser dnotify pour calculer l'utilisation du disque si le système de fichiers n'est pas changé souvent.

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.