別の NFS クライアントによって書き込まれた場合など、NFS クライアントが NFS エクスポートから同期的にデータを読み取らない場合があります。たとえば、NFS クライアント A が「echo hello> /NFS_mountpoint/testfile」でファイルを書き込んだ後、NFS クライアント B が「そのようなファイルはありません」でファイルを読み取れないか、読み取れるがファイルの内容が古い可能性があります。
NFS クライアントは、さまざまな NFS データをキャッシュします。 NFSv3 仕様の RFC 1813 には次のように記載されています:
Clients can perform caching in varied manner.
また、次のようにも述べています:
The NFS version 3 protocol does not define a policy for caching on the client or server. In particular, there is no support for strict cache consistency between a client and server, nor between different clients. Therefore this is designed behavior of Linux NFS client.
したがって、これは Linux NFS クライアントの設計された動作です。 NFS クライアント マウント オプションを設定して NFS クライアント キャッシングを無効化/スキップするか、O_DIRECT でデータの読み取り/書き込みを行います /O_SYNC .
NFS クライアントのすべてのキャッシュを無効にするには、「sync」を追加します ” マウント オプションの例。
# mount -t nfs -o vers=3,sync NFS_Server:/NFS_Export/ /NFS_Mountpoint注意 :このオプションを使用すると、パフォーマンスが低下する可能性があります。このオプションを本番システムに適用する前に、テスト システムで慎重にテストしてください。
NFS クライアントによるディレクトリ エントリのキャッシュを無効にするには、「noac,lookupcache=none」を追加します。 次の例のように、マウント オプションの場合:
# mount -t nfs -o vers=3,noac,lookupcache=none NFS_Server:/NFS_Export/ /NFS_Mountpoint注意 :noac と actimeo=0 には違いがあります。 actimeo=0 は属性の変更をキャッシュできますが、noac はできません。したがって、noac は actimeo=0 よりも安全ですが、パフォーマンスに影響を与える可能性があります。これをさらに制限するために、両方のオプションを設定することもできます。