Qual è l'algoritmo di comando UNIX du usi per calcolare lo spazio su disco?
Domanda
Ho provato con du
per l'utilizzo del disco calcolare oggi su una singola directory. La dimensione della directory è 6GB e ci sono voluti la seguente quantità di tempo per calcolare:
prompt> time du -sh .
6.0G .
real 1m32.405s
user 0m2.053s
sys 0m16.552s
Qual è l'algoritmo di comando UNIX du usi per calcolare lo spazio su disco? Perché è così lento? Esistono alternative per calcolare lo spazio su disco in modo più efficiente? La piattaforma di invocazione è Sun
. La directory per la quale è stato calcolato dimensione è NFS montato.
Soluzione
penso che cammina solo in modo ricorsivo la directory, mentre sommando le dimensioni dei file trovati. Abbastanza semplice, in realtà, ma ovviamente ci vuole tempo. Potrebbe essere più veloce se il file system rende queste operazioni più veloce.
Altri suggerimenti
du deve elencare tutte le directory e stat ogni file trovato in modo che finisce con letti in tutto il disco
durante il recupero delle dimensioni dei file li riassume e al termine si stampa la somma
per esempio in questa directory uno con come 2 milioni di file su un file system sshfs:
prompt$ time du -sh .
367G .
real 12m53.093s
user 0m3.848s
sys 0m14.265s
, ma a causa di caching per la seconda manche ci vogliono solo:
prompt$ time du -sh .
367G .
real 4m56.875s
user 0m4.136s
sys 0m15.257s
La sua velocità dipende dal file / contano le directory. Se si dispone di una directory con 6 file 1GB, ci vorrà molto meno tempo da calcolare. Si calcola le dimensioni dei file nella directory data, e ricorsivamente per ogni directory bambino.