unix du命令用于计算磁盘空间的算法是什么?

时间:2010-11-30 11:10:25

标签: unix du

我已尝试使用du来计算单个目录上的磁盘使用情况。目录的大小为6GB,需要花费以下时间来计算:

prompt> time du -sh .
6.0G   .

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

unix du命令用于计算磁盘空间的算法是什么?为什么这么慢?有没有其他方法可以更有效地计算磁盘空间?调用平台为Sun。计算大小的目录是NFS挂载。

3 个答案:

答案 0 :(得分:2)

du必须列出所有目录并统计每个找到的文件,以便最终读取整个磁盘

获取文件的大小时,它会将它们相加并在完成时打印总和

例如,在sshfs文件系统上有两百万个文件的这个目录上:

prompt$ time du -sh .
367G    .

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

但是由于第二次运行的缓存,它只需要:

prompt$ time du -sh .
367G    .

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

答案 1 :(得分:0)

我认为它只是递归地遍历目录,同时将找到的文件大小加在一起。很简单,真的,但当然需要时间。如果文件系统使这些操作更快,则可能会更快。

答案 2 :(得分:0)

它的速度取决于文件/目录数。如果您有一个包含6个1Gb文件的目录,则计算时间将会少得多。它计算给定目录中的文件大小,并递归地计算每个子目录。