2010-11-30 5 views
1

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

prompt> time du -sh . 
6.0G . 

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

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

+1

Не нашли времени для анализа точного алгоритма, хотя вы можете увидеть источник OpenSolaris по адресу http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/ дю/du.c – darioo 2010-11-30 11:13:20

ответ

0

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

2

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

при получении размеров файлов он суммирует их и когда закончил он печатает сумму

, например, на этой одной директории с как 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

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