CIFS/SMBプロトコルでは、耐久性、復元力、永続性の3種類のファイルハンドルがあることがわかりました。それらの違いは何ですか?
以下の主な参考文献は次のとおりです。
https://wiki.samba.org/index.php/SMB3_kernel_status
これはもともとSamba3用でしたが、さらに詳細があります:
https://wiki.samba.org/index.php/Samba3/SMB2
耐久性のあるファイルハンドルは、SMBサーバーへの接続を可能にし、短時間のネットワーク障害に耐えます-耐久性のあるハンドルは、開いているプロセスが終了したときに必ずしもクリーンアップされるとは限りません。クライアントが再接続しようとしたときに、oplock (/ lease)はまだそこにあり、ファイルに再接続します。
ただし、別のクライアントがファイルを開こうとすると、oplock /リースが壊れて、最初のクライアントは再接続できません。
Oplock/leaseが壊れていても、回復力のあるファイルハンドルは保持されますが、正直なところ、これがどのように機能するかについての技術的な詳細をすべて追跡することはできません。以下の参照の1つは、DurableとResilientの違いはハンドルの作成方法であると述べています- create context呼び出しによってDurableとIOCTLによってResilientです (私が理解できない主なことは、ロックの順序付けと再生はこれに適合しますが、それが耐久性と復元力の重要な違いであるようには見えません。)
永続的なハンドルについては、これ以上良いものを思いつくことはできません このSambaのドキュメントより:
永続的なファイルハンドルは、強力な保証を備えた耐久性のあるファイルハンドルに似ています。それらは、永続フラグがtrueに設定された永続的なv2作成リクエストBLOBでリクエストされます。サーバーは、CA(継続的に利用可能)とマークされた共有に永続的なハンドルのみを付与します。
私の知る限り、これらはまだSambaに実装されていませんが、目標はクラスタリングと継続的な可用性をサポートすることです したがって、現在取り組んでいます。
永続ハンドルの詳細...永続ハンドルは、同じクラスターの複数のサーバーで使用できます。 1つのサーバーが何らかの理由でダウンした場合、クライアントマシンは別のサーバーへの接続でこのハンドルを半透過的に使用し続けることができます。そのため、永続的ハンドルの実装は(永続的で復元力のあるハンドルとは対照的に)純粋なSMBスコープ外です。たとえば、NQ Storageは永続的ハンドルの完全なセマンティクスがSMBエンジンはそれぞれの構文を担当しますが、カスタムVFS.
Samba永続ハンドルはファイルハンドルの状態を維持し、クラスター内のサーバーの1つがダウンしても、新しいマスターは現在のファイルハンドルを取得して、I/OエラーなしでI/Oを続行できます。