Qual è l'algoritmo di comando UNIX du usi per calcolare lo spazio su disco?

StackOverflow https://stackoverflow.com/questions/4313065

  •  29-09-2019
  •  | 
  •  

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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top