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 は、すべてのディレクトリを一覧表示し、見つかったすべてのファイルを stat する必要があるため、最終的にディスク全体を読み取る必要があります

ファイルのサイズを取得しながらそれらを合計し、終了すると合計を出力します

たとえば、sshfs ファイルシステム上に 200 万個のファイルがあるこの 1 つのディレクトリでは、次のようになります。

prompt$ time du -sh .
367G    .

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

しかし、2回目の実行のキャッシュにより、次のものが必要になります:

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 に答える