2010-11-30 27 views
1

J'ai essayé d'utiliser du pour calculer l'utilisation du disque aujourd'hui sur un seul répertoire. La taille du répertoire est 6GB et il a fallu la période suivante pour calculer:Quel est l'algorithme utilisé par unix du commandement pour calculer l'espace disque?

prompt> time du -sh . 
6.0G . 

real 1m32.405s 
user 0m2.053s 
sys  0m16.552s 

Quel est l'algorithme de commande unix du utilise pour calculer l'espace disque? Pourquoi est-ce si lent? Existe-t-il des alternatives pour calculer plus efficacement l'espace disque? La plate-forme d'invocation est Sun. Le répertoire pour lequel la taille a été calculée est monté sur NFS.

+1

Vous n'avez pas le temps d'analyser l'algorithme exact, bien que vous puissiez voir le fichier source d'OpenSolaris sur http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/ du/du.c – darioo

Répondre

0

Je pense que cela marche récursivement le répertoire, tout en additionnant les tailles des fichiers trouvés. Assez simple, vraiment, mais bien sûr cela prend du temps. Cela peut être plus rapide si le système de fichiers accélère ces opérations.

2

du doit énumérer tous les répertoires et stat chaque fichier trouvé de manière qui finit avec lire sur tout le disque

tout en obtenant la taille des fichiers, il les résume et lorsque vous avez terminé, il imprime la somme

par exemple sur celui-ci répertoire avec comme 2 millions de fichiers sur un système de fichiers sshfs:

prompt$ time du -sh . 
367G . 

real 12m53.093s 
user 0m3.848s 
sys  0m14.265s 

mais en raison de la mise en cache pour la deuxième manche, il ne prend:

prompt$ time du -sh . 
367G . 

real 4m56.875s 
user 0m4.136s 
sys  0m15.257s 
0

Sa vitesse dépend du nombre de fichiers/répertoires. Si vous avez un répertoire avec 6 fichiers 1Gb, il faudra beaucoup moins de temps pour calculer. Il calcule la taille des fichiers dans le répertoire donné et récursivement pour chaque répertoire enfant.