LinuxのNFSv3実装では、ファイルの削除は基本的に同期ですか?

LinuxのNFSv3実装では、ファイルの削除は基本的に同期ですか?

NFSクライアントにファイルを生成するように指示できることを確認しました。書くsync mountオプションまたはフラグを介して同期しますがO_SYNC open(デフォルトでは非同期であるため)、ファイルが同期されているかどうかは表示されません。削除同期です。RFC 1813この場合、指定されたクライアント動作がないようです。

からman 5 nfs

同期マウントオプション

NFSクライアントは同期マウントオプションを他のファイルシステムとは異なる方法で処理します(一般的な同期および非同期マウントオプションの説明はmount(8)を参照)。同期または非同期が指定されていない場合(または非同期オプションが指定されている場合)、NFSクライアントは次のいずれかのイベントが発生するまでサーバーへのアプリケーション書き込みの送信を遅延します。メモリ圧力により、システムメモリリソースが回収されます。アプリケーションは、sync(2)、msync(2)、またはfsync(3)を使用して明示的にファイルデータを更新します。

アプリケーションはclose(2)を使用してファイルを閉じます。

ファイルは fcntl(2) によってロックまたはロック解除されます。

つまり、一般的な状況では、アプリケーションによって作成されたデータがファイルをホストしているサーバーにすぐに表示されない可能性があります。マウントポイントに sync オプションを指定すると、そのマウントポイントのファイルにデータを書き込むシステムコールが原因で、システムコールがユーザースペースに制御を返す前にデータがサーバーにフラッシュされます。これにより、クライアント全体でより良いデータキャッシュの一貫性が得られますが、かなりのパフォーマンスコストが発生します。

アプリケーションは、O_SYNC オープン・フラグを使用して、同期マウント・オプションを使用せずに、個々のファイルへのアプリケーションの書き込みを即座にサーバーに移動させることができます。

closeファイルを削除/リンク解除するのも同じだと思います(はい基本的には同期として指定されていますが、これについてはわかりません。

ファイルへのハードリンクがまだある場合は、NFSサーバーからファイルが実際に削除されない可能性があることを知っていますが、これはこの質問の範囲外であると思います。

ベストアンサー1

おすすめ記事