[samba-jp:20596] Re: Vista オフラインファイルでのおかしな動作 Samba がらみ
YAMASAKI Hiroyuki
yamasaki.hiroyuki @ sp.qnes.nec.co.jp
2009年 3月 5日 (木) 22:09:31 JST
山崎と申します。
すみません、見落としていました。
>このあたりのlockの仕組みをよく知らないのですが、
>kernel oplockを無効にした場合の弊害はなんでしょうか。
>samba経由でlock中のファイルをUNIX側の他のソフトからいじったりしたとき、
>問題が発生するでしょうか。
先にCIFSがファイルを開いていて、後からNFS側から同じファイルをオープンし、両方から
読み書きしてもファイルが壊れないようにするには、以下のような処理が必要なはずです。
-----------------------------------------------------------------------------------------
(1)NFSからオープンする契機で、もしCIFSクライアントがoplockを持っていたら、
CIFSクライアントのキャッシュのフラッシュ(キャッシュされていたレコードロックもサーバに
コピー)。今後はクライアントキャッシュは無効化。(=oplock break)
*かつ*
(2)NFS側とCIFS側のアプリケーション間で協調して何らかの適切なロックを行う。
-----------------------------------------------------------------------------------------
kernel oplockで実現できるのは、上記(1)だけです。
(2)は、別途必要です。
よって、
>kernel oplockを無効にした場合の弊害はなんでしょうか。
の答えは、(2)の処理が存在するかどうか変わってきます。
(2)が存在する場合:元々ファイルが壊れない環境だったのに、ファイルが壊れるようになる。
(2)が存在しない場合:元々ファイルが壊れる環境だったが、より一層壊れやすくなる。
という感じです。
* * *
余談ですが、「oplock」は命名が非常に悪いです。「名が体を表す」の真逆です。
oplockは、全くロックではありません。
同様に、「level2 oplock」の「level2」や「oplock break」の「break」も意味がわかりづらい
です。色々な命名の悪さが、oplockを理解しづらくしている原因だと思います。
oplockが若干ロックのような挙動をする部分は、上記(1)の処理を行う期間、NFS側のオープン処理
をしばらく待たせることができる点だけです。注意が必要なのは、オープンを *待たせる* ことが
できるだけで、*拒否* はできません。一定時間でタイムアウトしてオープンが強行されてしまい
ます。よって、やはりロックではありません。
NFSv4にもoplockと似た機能があるのですが、そちらの命名の方がずっとわかりやすいです。
以下のような対応です。(NFSv4はあまりよく知らないので間違ってたらすみません)
================= =================
CIFS NFSv4
================= =================
oplock delegation
oplock break callback
exclusive oplock write delegation
level2 oplock read delegation
================= =================
NFSv4もパッと見で理解できるとはいえませんが、少なくともCIFSのように「lock」という理解
を妨げる単語が入っていないだけでもマシです。
もしかすると、oplockの理解をするには、NFSv4のdelegationの説明を見るほうがいいかも
しれません。NFSv4の良い日本語の文書の有無を知らないのですが、以下の文書の
「委譲によるクライアント側キャッシング」を読むと、どういう挙動をするのかわかるかも
しれません。
NFSバージョン4の新機能
http://www.netapp.jp/techontap/newsletter/0805/nfs4.html
samba-jp メーリングリストの案内