2

Я снова очищаю свой рабочий стол, потому что у меня заканчивается свободное место на жестком диске, и каждый раз, когда я вызываю du -sh ~ , требуется очень много времени, чтобы вычислить текущий размер каталога.

С моей точки зрения, я не вижу причины, по которой файловая система ext4 не будет кэшировать информацию о размере каталога и обновлять ее всякий раз, когда файл создается / удаляется. Информация будет затем предоставлена системе и, в конечном итоге, пользователю. Конечно, нужно будет распространять данные о размере каталога вверх по дереву каталогов, но я не могу представить ситуацию, в которой на обычном рабочем столе Linux это могло бы вызвать какие-либо проблемы.

Где я понял это неправильно?

2 ответа2

4

Простой кеш не сработает. Кеш предназначен для проверки, если у вас уже есть ответ, и только для повторной обработки, если у вас его нет. Но в этом случае одна пропущенная запись сделает другие бесполезными. Так что придется держать все размеры директории обновленного все время.

Также не стоит недооценивать возможное влияние вашего предложения. Назад, когда журналируемые файловые системы были новыми, было много возражений, потому что обновление журнала было слишком дорогим. Кроме того, большинство файловых систем допускают такие опции, как noatime , nodiratime и relatime которые уменьшают эти виды обновления медататы. Обратите внимание, что все они (журналы и обновления времени) связаны во времени, все они получают определенное количество обращений к блокам (и обычно «скрыты» при расширенном планировании ввода-вывода), но обновление размера каждого каталога по пути означает неизвестное количество доступов.

Наконец, в файловых системах POSIX нет реального «содержащего каталог». Запись файла в каталоге указывает на индекс (структуру диска, в которой хранится информация о файле), но нет ссылки от индекса на каталог. Это позволяет использовать функцию «жесткой ссылки», когда несколько записей (обычно в разных каталогах) указывают на один и тот же индекс. Даже если вы сохранили список каталогов, которые указывают на индекс, вы умножаете (уже большое) количество обновлений. Хуже того, теперь вы должны следить за тем, обновили ли вы каждый каталог, поскольку в какой-то момент в цепочке вы получите общего предка, который не должен считаться в два раза больше обновленного. Или это должно? возможно, вам придется сохранить два размера в каждом каталоге, один, который подсчитывает все «реальные» файлы, и другой, который учитывается каждый раз, когда он появляется ....

Это не кажется таким полезным в конце концов.

0

Есть и другая причина. du не принимает во внимание, находится ли часть подсистемы на другом томе, который смонтирован в каталоге, который вы измеряете.

Таким образом, даже если бы использование оценивалось по объему, du не стал бы его использовать. С другой стороны, df использует такую информацию ....

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .