Какой алгоритм использует команда unix du для вычисления дискового пространства? - PullRequest
1 голос
/ 30 ноября 2010

Я пытался использовать du для вычисления использования диска сегодня для одного каталога.Размер каталога составляет 6 ГБ, и для его вычисления потребовалось следующее время:

prompt> time du -sh .
6.0G   .

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

Какой алгоритм использует команда unix du для вычисления дискового пространства?Почему это так медленно?Есть ли альтернативы для более эффективного расчета дискового пространства?Платформа вызова Sun.Каталог, для которого был рассчитан размер, смонтирован в NFS.

Ответы [ 3 ]

2 голосов
/ 30 ноября 2010

du должен перечислить все каталоги и статистику по каждому найденному файлу, чтобы в итоге прочитать все данные на диске

, получая размеры файлов, суммирует их, а после завершения печатает сумму

например, в этом каталоге с 2 миллионами файлов в файловой системе 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
0 голосов
/ 30 ноября 2010

Скорость зависит от количества файлов / каталогов.Если у вас есть каталог с 6 файлами 1 Гб, для расчета потребуется гораздо меньше времени.Он вычисляет размер файлов в данном каталоге и рекурсивно для каждого дочернего каталога.

0 голосов
/ 30 ноября 2010

Я думаю, что он просто рекурсивно просматривает каталог, добавляя вместе размеры найденных файлов. Очень просто, правда, но, конечно, на это нужно время. Это может быть быстрее, если файловая система сделает эти операции быстрее.

...