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