過去にさまざまなシステムで作業したときの私の記憶は、多くのウィンドウのデフォルトの動作SMBクライアントがNetapp共有に書き込む場合、開いているファイルには自動的に読み取りロックがかかるということです。他のプログラム(バックアップを実行している場合のように)、この開いているファイルを読み取ろうとするとエラーが発生します。
現在、誰かがこの動作に依存するワークフローを持っていますが、それは真実ではないようです。 LinuxCIFSマウントでWordドキュメントまたはdd
ファイルを開くことができ、開いている間、別のCIFSクライアントからすべてを読み取ることができます。
私がこの振る舞いを想像していなかったと仮定すると、それを再現する方法はありますか? SMB2を有効にした場合と有効にしない場合、およびoplockを有効にした場合とない場合のネットアップを試しました。 OnTapのさまざまなバージョンでファイラーを試しました。 Linuxには、動作に影響を与えるマウントオプションがありません。これらの構成のいずれも、デフォルトで読み取り拒否ロックを提供しません。
目標:クライアントがSMB共有に書き込むことを許可しますが、ファイルが閉じられるまで他のクライアントからの読み取りアクセスを拒否します。
から sambaドキュメント :
厳密に言えば、SMBサーバーは、ファイルに対するすべての読み取りおよび書き込み呼び出しの前にロックをチェックする必要があります。残念ながら、fcntl()の動作方法では、これは遅くなり、rpc.lockdに過度の負荷がかかる可能性があります。 。ロックが重要な場合、クライアントは読み取りと書き込みの前にロック呼び出しを行うことになっているため、これはほとんどの場合不要です。デフォルトでは、Sambaはクライアントから明示的に要求された場合にのみロック呼び出しを行いますが、
strict locking = yes
を設定すると、ロック呼び出しが行われます。すべての読み取りおよび書き込み呼び出しでロックチェック呼び出しを行います。ロックの2番目のクラスは、拒否モードです。これらは、アプリケーションがファイルを開くときに、開くと同時に許可する必要があるアクセスの種類を決定するためにアプリケーションによって設定されます。クライアントは、DENY_NONE、DENY_READ、DENY_WRITE、またはDENY_ALLを要求する場合があります。 DENY_FCBおよびDENY_DOSと呼ばれる特別な互換モードもあります。
つまり、strict locking = yes
を使用してみて、違いが生じるかどうかを確認できます。とにかく、本当の解決策は、プロデューサー/ライタープロセスに正しいモードでファイルを開かせることです:DENY_ALL
この動作は、smboplockまたはリースによって制御されます。クライアント側はこれが定義されている場所です。言い換えると。アプリケーションによって異なります。これはすべて、ontapがsmb仕様に完全に準拠していることを前提としています(これは90%の真実です)