Nous avons un grand système de fichiers sur lequel un du
résumé complet (utilisation du disque) prend plus de deux minutes. Je voudrais trouver un moyen d'accélérer un résumé d'utilisation du disque pour des répertoires arbitraires sur ce système de fichiers.
Pour les petites branches, j'ai remarqué que les du
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 les grandes branches, l'accélération devient négligeable.
Existe-t-il un moyen simple d'accélérer du
ou de mettre en cache de manière plus agressive les résultats pour les branches qui n'ont pas été modifiées depuis la recherche précédente?
Ou existe-t-il une autre commande qui peut fournir des résumés d'utilisation du disque plus rapidement?
la source
du
serait mauvais, mais un script wrapper plus rapide avec une interface identique nous serait très utile. De plus, je m'attendrais à ce que les résultats de mise en cache dépendant de l'heure de la dernière modification (et en supposant qu'aucune opération sur le disque, par exemple la défragmentation) ne donnerait des résultats de taille exacte: ai-je quelque chose?find
. Mais alors il y alocate
.StatFs
une estimation ultra rapide de la taille des répertoires. Il était presque 1000 fois plus rapide pour les grands répertoires complexes que pourdu
.Réponses:
Ce que vous voyez lorsque vous réexécutez une commande du est l'effet de la mise en mémoire tampon du disque. Une fois que vous avez lu un bloc, son tampon de disque est conservé dans le cache de tampon jusqu'à ce que ce bloc soit nécessaire. Pour du, vous devez lire le répertoire et l'inode de chaque fichier du répertoire. Les résultats du ne sont pas mis en cache dans ce cas, mais peuvent être dérivés avec beaucoup moins d'E / S disque.
Bien qu'il soit possible de forcer le système à mettre en cache ces informations, les performances globales en souffriraient car l'espace tampon requis ne serait pas disponible pour les fichiers auxquels vous accédez activement.
Le répertoire lui-même n'a aucune idée de la taille d'un fichier, il faut donc accéder à l'inode de chaque fichier. Pour maintenir la valeur mise en cache à jour chaque fois qu'un fichier change de taille, la valeur mise en cache doit être mise à jour. Comme un fichier peut être répertorié dans 0 ou plusieurs répertoires, cela nécessiterait que chaque inode de fichier sache dans quels répertoires il est répertorié. Cela compliquerait considérablement la structure de l'inode et réduirait les performances d'E / S. De plus, comme du vous permet d'obtenir des résultats en supposant différentes tailles de bloc, les données requises dans le cache devraient augmenter ou diminuer la valeur mise en cache pour chaque taille de bloc possible, ce qui ralentit encore les performances.
la source
Si vous pouvez faire en sorte que les différentes hiérarchies de fichiers appartiennent à différents groupes, vous pouvez configurer des quotas de disque . Ne donnez pas de limite supérieure (ou ne lui donnez pas la taille du disque) sauf si vous en voulez une. Vous serez toujours en mesure de dire instantanément la quantité de son quota (effectivement infini) que le groupe utilise.
Cela nécessite que votre système de fichiers prenne en charge les quotas par groupe. Ext de Linux [234] et zfs de Solaris / * BSD / Linux le font. Ce serait bien pour votre cas d'utilisation si les quotas de groupe prenaient en compte les ACL, mais je ne pense pas qu'ils le fassent.
la source
L'utilisation courante de
du
peut être considérablement accélérée en utilisantncdu
.ncdu - NCurses Disk Usage
effectue le
du
, met en cache les résultats et les affiche dans une belle interface de ligne de commande, quelque peu comparable àdu -hc -d 1 | sort -h
. L'indexation initiale prend autant de tempsdu
, mais la recherche du véritable «coupable» qui remplit un espace précieux est accélérée, car tous les sous-répertoires disposent des informations du cache initialement disponibles.Si nécessaire, les sous-répertoires peuvent être actualisés en appuyant sur [r] et les fichiers / dossiers peuvent être supprimés en appuyant sur [d], qui mettent à jour les statistiques de tous les répertoires parents. La suppression demande une confirmation.
Si nécessaire, une accélération supplémentaire peut être obtenue en mettant
ncdu -1xo- / | gzip >export.gz
en cache dans un cronjob et en y accédant plus tardzcat export.gz | ncdu -f-
, mais donne évidemment des informations plus obsolètes.la source
Je préfère utiliser le agesu
Agedu est un logiciel qui tente de trouver des fichiers anciens et utilisés de manière irrégulière en supposant que ces fichiers ne seront probablement pas recherchés. (Par exemple, les téléchargements qui n'ont été consultés qu'une seule fois.)
la source
Comme mentionné par SHW, en
agedu
effet créé un index. J'ai pensé partager une autre façon de créer un index, après avoir lulocatedb
. Vous pouvez créer votre propre version d'unelocatedb
dedu
sortie:awk
réorganise la sortie du pour avoir les noms de fichiers en premier, afin que celafrcode
fonctionne correctement. Utilisez ensuitelocate
avec cette base de données pour signaler rapidement l'utilisation du disque:Vous pouvez l'étendre en fonction de vos besoins. Je pense que c'est une bonne utilisation de locatedb.
la source
(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, résultant en une interface utilisateur rapide. Aucun temps d'attente une fois l'index terminé.
La mise à jour de l'index est très rapide pour moi (moins de 10 secondes pour environ 950k fichiers dans 121k répertoires, 2,8 To). Possède également une interface graphique et une interface utilisateur ncurses.
Utilisation par exemple:
Depuis le site Web:
la source
J'ai un cronjob configuré pour exécuter updatedb toutes les 10 minutes. Garde tous les tampons du système de fichiers agréables et frais. Autant utiliser cette RAM bon marché pour quelque chose de bien. Utilisez slabtop voir «avant» et «après».
la source
updatedb
ne dit rien sur l'utilisation du disque. Si vous le faites juste pour parcourir le disque, vous allez nuire aux performances globales.du
est lent car vous devez accéder aux métadonnées d'un nombre potentiellement important de fichiers, dispersés sur le disque. Si vous exécutez agressivement updatedb, les métadonnées de tous les fichiers sont forcées d'être stockées dans la RAM. La prochaine fois que vous exécutez une autre opération lourde de métadonnées, au lieu d'effectuer des milliers de recherches sur les disques, vous utilisez le cache. Normalement, vous avez une petite chance d'avoir cette partie particulière des métadonnées de l'arbre en cache. Avec mon 'amorçage du cache de métadonnées', il est très probable que les données que vous souhaitez soient fraîchement mises en cache. Aucune recherche physique == RAPIDE.Si vous avez seulement besoin de connaître la taille du répertoire, vous pouvez l'accélérer beaucoup en évitant simplement d'écrire les informations à l'écran. Puisque le total général est la dernière ligne de la
du
commande, vous pouvez simplement le diriger verstail
.Une structure de répertoire de 2 Go prend plus d'une seconde pour la liste complète, mais moins d'un cinquième de celle-ci avec ce formulaire.
la source
du -hs
c'est plus pratique à cet effet.--max-depth 1