web-dev-qa-db-ja.com

ファイルシステムキャッシュを使用せずに、Linuxでファイルからデータを直接読み取るにはどうすればよいですか?

SERVER1にマウント(読み取り専用)され、SERVER2にマウント(読み取り/書き込み)される共有ストレージがあります。

SERVER2はデータをファイルに書き込んでいます。 SERVER1はそのファイルからデータを読み取っています。

ファイルのポーリングは100ミリ秒未満で、高速ですが、必要だと言えます。

SERVER1はファイルシステムキャッシュにアクセスしており、ファイルに新しいデータを表示していません。 drop_cachesを実行すると、そのファイルの最新データが返されますが、このプロセスではSERVER1のすべてのファイルキャッシュが削除されます。これは私がやりたいことではなく、処理に時間がかかりすぎます。

Catコマンドとddif =/path/to/file -iflag = directを使用してみましたが、どちらも機能しません。エラーを返します。このフラグはファイルではサポートされていないようです。ディスクからファイルを直接読み取る方法、またはファイル/ディレクトリ/マウントポイントのファイルシステムキャッシュを無効にする方法についてのアイデアはありますか?

システム全体でファイルキャッシュを無効にすることも検討しますが、それは私の最初の好みではありません。これは1つのファイルのみを対象としています。ほとんどのフォーラム投稿がそのような行動に反対しているので、グーグルはこれをする方法も返しません。

ありがとう!

1
user1955162

これを行わないでください。繰り返します:これをしないでください!

あなたはこれから群発頭痛を得るでしょう。その間にメタデータが変更されると、クラッシュや無効なデータが返される可能性があります。これらのファイルシステムは、このように機能するようには設計されていません。そのように使用しないでください。これは、ZFSでは特に悪い考えです。本当に必要な場合は、ジャーナルや高度な機能(ext2やvfatなど)を使用せずに、非常に基本的なものを使用してください。

クラスタ化されたファイルシステム(gfs、ocfs、cxfs)、またはネットワーク化されたファイルシステム(glusterfs、cifs、nfs)のいずれかを使用します。

ちなみに。 DirectIOは 実装されていません Linux上のZFSでは。ベースファイルシステム(ext {2,3,4}、xfsなど)で動作します

2
Fox