ディレクトリをファイルシステムキャッシュにロードするにはどうすればいいですか?

ディレクトリをファイルシステムキャッシュにロードするにはどうすればいいですか?

めったにアクセスされない数 GB のディレクトリがありますが、アクセスされたときに、待たされることなく、その中のファイルをすぐに読み取れるようにしたいと考えています。ファイルはほとんどアクセスされないため、ファイル システム キャッシュには格納されませんが、アクセスする前に Linux でファイル システム キャッシュにファイルを事前にロードすることをお勧めします。

最初に読み込むまで待つ必要があるので、時間の節約にはならないと主張する人もいるかもしれませんが、私の特定の使用例ではこれを自動化できるため、システム時間の節約ではなく、ユーザーの時間の節約になります (ファイルがキャッシュされている場合は待つ必要がないため)。

また、ファイルシステムキャッシュは、tmpfs のようなものを使用しなければ保証されないことも理解しています。これは OS への提案であり、私はこれで問題ありません。

したがって、明らかな方法は次のようになります:

tar -cf - /mydirectory > /dev/null

しかし、これを実行すると、数 GB のディレクトリであっても、コマンドはすぐに返されます。bash は出力が /dev/null に向けられていることを認識し、コマンド全体を最適化しているため、tar は実際にはディレクトリから読み取りを行っていないようです。

OS にディレクトリ内のすべてのファイルを読み取らせる簡単なコマンドは何ですか?

答え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

関連情報