@derobert объяснил, как работает du
.
Он не упомянул, что если у вас нет абсолютно огромного количества небольших файлов / каталогов (так что метаданные занимают огромный объем памяти), то повторный запуск du
сразу же обычно дает результат еще быстрее.
Один большой файл не замедляет работу du
, но его копирование с большей вероятностью приведет к выталкиванию кэшей каталогов из памяти. ( Отзывчивость рабочего стола можно улучшить , установив vm.swappiness = 10
, и установив приоритет метаданных над данными с помощью vm.vfs_cache_pressure = 60
sysctl settings (поместите их в /etc/sysctl.d/99-local
.)
Когда несколько процессов обращаются к файловой системе одновременно, каждый системный вызов получает информацию, которая является моментальным снимком состояния при запуске. Например, , процесс может проверить, существует ли файл, а затем попытаться открыть его, только чтобы узнать, что его больше нет. Поскольку другой процесс переименовал / удалил его в течение этого интервала между проверками. (Когда это вызывает проблему / источник ошибки, это называется состоянием гонки.)
Если порядок обхода каталога du
совпадает с порядком, выбранным cp
, то ] du
не попадет в каталог, который все еще модифицируется, почти до конца своего времени выполнения, и, следовательно, не пропустит много к моменту его завершения. OTOH, если du
su ms каталог, в который cp
сначала помещает новые файлы, а затем требуется еще одна минута для суммирования остатка, результат будет устаревшим.