1

我尝试使用du今天在单个目录上计算磁盘使用情况。目录大小为 6GB,计算时间如下:

prompt> time du -sh .
6.0G   .

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

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

4

3 回答 3

2

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

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

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

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
于 2010-11-30T11:14:44.240 回答
0

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

于 2010-11-30T11:12:48.290 回答
0

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

于 2010-11-30T11:14:46.360 回答