Какой алгоритм команда unix du использует для расчета дискового пространства?

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

prompt> time du -sh .
6.0G   .

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

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


person Leonid    schedule 30.11.2010    source источник
comment
У меня нет времени анализировать точный алгоритм, хотя вы можете увидеть исходный код OpenSolaris по адресу src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/du/   -  person darioo    schedule 30.11.2010


Ответы (3)


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

person unwind    schedule 30.11.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
person Dan D.    schedule 30.11.2010

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

person khachik    schedule 30.11.2010