Как загрузить каталог в кэш файловой системы?

Как загрузить каталог в кэш файловой системы?

У меня есть каталог размером в несколько ГБ, к которому редко обращаются, но когда это происходит, я хотел бы иметь возможность быстро читать файлы в нем, а не ждать. Поскольку файлы редко обращаются, они не будут находиться в кэше файловой системы, но я хотел бы предложить, чтобы Linux предварительно загружал их в кэш файловой системы, прежде чем я попытаюсь получить к ним доступ.

Некоторые могут возразить, что мне придется ждать, пока они загрузятся в первый раз, и поэтому я не экономлю время. Достаточно сказать, что в моем конкретном случае я могу автоматизировать это, так что это не вопрос экономии системного времени, а вопрос экономии времени пользователя (поскольку ему не придется ждать, если файлы кэшированы).

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

Поэтому, кажется, очевидным методом будет сделать следующее:

tar -cf - /mydirectory > /dev/null

Однако когда я это делаю, команда возвращается немедленно, даже для каталога в несколько ГБ. Похоже, что bash видит, что вывод направляется в /dev/null, и оптимизирует всю команду, так что tar на самом деле даже не читает из каталога.

Какая простая команда заставит ОС прочитать все файлы в каталоге?

решение1

Это не bash делает эту оптимизацию, это GNU tar. Он распознает, когда его вывод /dev/nullи не читает содержимое файлов.

Либо сделайте так, чтобы вывод не был /dev/null:

tar -cf - /mydirectory > /dev/zero

Или используйте другой инструмент, например

find . | cpio -o >/dev/null
find . -type f -exec cat {} + >/dev/null

Связанный контент