web-dev-qa-db-fra.com

Comment mettre en cache ou éteindre sinon les résumés de Du`?

Nous avons un grand système de fichiers sur lequel un résumé complet du (utilisation de disque) prend plus de deux minutes. J'aimerais trouver un moyen d'accélérer un résumé d'utilisation de disque pour les répertoires arbitraires sur ce système de fichiers.

Pour les petites branches, j'ai remarqué que les résultats du Les résultats semblent être mis en cache d'une manière ou d'une autre, car les demandes répétées sont beaucoup plus rapides, mais sur de grandes branches, la rapidité est négligeable.

Existe-t-il un moyen simple d'accélérer du ou de résultats de mise en cache plus agressives pour les succursales qui n'ont pas été modifiées depuis la recherche précédente?

Ou existe-t-il une commande alternative qui peut fournir des résumés d'utilisation de disque plus rapidement?

34
Ian Mackinnon

Ce que vous voyez lorsque vous retentissez à la commande de la commande est l'effet du tampon de disque. Une fois que vous avez lu un bloc, sa mémoire tampon de disque est conservée dans le cache tampon jusqu'à ce que ce bloc soit nécessaire. Pour DU, vous devez lire le répertoire et l'inode pour chaque fichier dans le répertoire. Les résultats du DU ne sont pas mis en cache dans ce cas, mais peuvent être dérivés avec beaucoup moins de disque IO.

Bien qu'il soit possible de forcer le système à cacher ces informations, les performances globales subiraient que l'espace tampon requis ne serait pas disponible pour des fichiers accessibles activement.

Le répertoire lui-même n'a aucune idée de la taille d'un fichier, de sorte que l'inode de chaque fichier doit être consulté. Pour garder la valeur mise en cache à jour chaque fois qu'un fichier a changé la taille, la valeur mise en cache doit être mise à jour. En tant que fichier pouvant être répertorié dans 0 ou plusieurs répertoires, cela nécessiterait que chaque fichier de fichier sache à quels répertoires il est répertorié. Cela compliquerait considérablement la structure de l'inode et réduirait la performance IO. De plus, en vous permet d'obtenir des résultats en supposant que différentes tailles de blocs, les données requises dans le cache nécessiteraient d'incrémenter ou de décrémenter la valeur mise en cache pour chaque taille possible de ralentissement des performances.

21
BillThor

Je préfère utiliser le Aged

AGEDU est un logiciel qui tente de trouver des fichiers anciens et irrégulièrement utilisés sur la présomption que ces fichiers risquent de ne pas être recherchés. (par exemple, les téléchargements qui n'ont été consultés qu'une seule fois.)

Il fait fondamentalement le même genre de numérisation de disque que du, mais il enregistre également les derniers temps d'accès de tout ce qu'elle scanne. Ensuite, il établit un indice qui le permet de générer efficacement des rapports donnant un résumé des résultats pour chaque sous-répertoire, puis il produit ces rapports sur demande.

9
SHW

L'utilisation commune de du peut être immensément accélérée en utilisant ncdu.

ncdu - NCurses Disk Usage

effectue le du, cache les résultats et les montre dans une graphique de ligne de commande agréable, quelque peu comparable à du -hc -d 1 | sort -h. L'indexation initiale prend également de même en tant que du, mais à la recherche du "coupable" réel qui remplit un espace précieux est accéléré, car tous les sous-répertoires ont les informations initialement mises en cache disponibles.

Si nécessaire, les sous-répertoires peuvent être rafraîchis en appuyant sur [R] et les fichiers/dossiers peuvent être supprimés en appuyant sur [D], toutes deux des statistiques de mise à jour pour tous les annuaires parents. Suppression demande de confirmation.

Si NececCary, une nouvelle vitesse peut être réalisée en préjugé ncdu -1xo- / | gzip >export.gz dans un cronjob et l'accédant plus tard avec zcat export.gz | ncdu -f-, mais donne évidemment des informations plus obsolètes.

8
DennisH

Si vous pouvez organiser pour que les différentes hiérarchies de fichiers appartiennent à différents groupes, vous pouvez configurer quotas de disque . Ne donnez pas une limite supérieure (ou en faites la taille du disque) sauf si vous en voulez un. Vous serez toujours en mesure de dire instantanément à quel point le groupe utilise (efficacement infini).

Cela nécessite que votre système de fichiers prend en charge des quotas par groupe. Les ZFS de Linux ext [234] et Solaris/* BSD/Linux. Ce serait bien pour votre cas d'utilisation si les quotas de groupe ont pris en compte les ACL, mais je ne pense pas qu'ils le font.

Comme mentionné par SHW, agedu a en effet créé un index. Je pensais partager une autre façon de créer un index, après avoir lu sur locatedb . Vous pouvez créer votre propre version d'un locatedb de du sortie:

du | awk '{print $2,$1}' | /usr/lib/locate/frcode > du.locatedb

awk réarrise d'abord la sortie du produit de fichiers, de sorte que frcode fonctionne correctement. Ensuite, utilisez locate avec cette base de données pour signaler rapidement l'utilisation du disque:

locate --database=du.locatedb pingus

Vous pouvez développer cela pour répondre à vos besoins. Je pense que c'est une bonne utilisation de localisation.

5
Yuval
duc

(Voir https://duc.zevv.nl ) pourrait être ce que vous recherchez.

Duc stocke l'utilisation du disque dans une base de données optimisée, ce qui permet une interface utilisateur rapide. Pas de temps d'attente une fois que l'index est terminé.

La mise à jour de l'index est très rapide pour moi (moins de 10 secondes pour environ 950 000 fichiers dans des répertoires 121K, 2,8 To). A une interface graphique et une interface utilisateur NCurses aussi.

USAGE E.G.:

duc index /usr
duc ui /usr

Sur le site:

DUC est construit pour réduire d'énormes systèmes de fichiers: il indexera et affichera des centaines de millions de fichiers sur des pétaoctes de stockage sans problèmes.

3
Peter

J'ai un Cronjob mis en place pour exécuter mis à jour les 10 minutes. Garde tous les tampons du système de fichiers agréables et frais. Peut aussi bien utiliser que pas cher RAM pour quelque chose de bien. Utilisez Slabtop See 'Avant' et 'Après'.

2
Marcin

Si vous n'avez besoin que de connaître la taille du répertoire, vous pouvez accélérer beaucoup de choses en évitant simplement écrire les informations à l'écran. Étant donné que le Grand Total est la dernière ligne de la commande du, vous pouvez simplement le faire tuyer à tail.

du -hc | tail -n 1

Une structure de répertoire de 2 Go prend une seconde pour la liste complète, mais moins d'un 5ème de celui avec cette forme.

2
Frank