!==
!== File-Cacheing.txt for Samba release 2.0.7 26 Apr 2000
!==
翻訳者:	高橋基信 <monyo@samba.gr.jp>
更新日:	1999/03/06

データの「キャッシング」が問題を起こすという報告が幾つかあがって来てい
ます。一般的に、バグレポートは以下のようなものです。

- UNIX マシン上でファイルを作る。
- そのファイルを Samba 経由で PC から見る。
- ファイルを UNIX マシン上で修正する。
- そのファイルをもう一度 Samba 経由で PC から見ると、修正した筈の点が
  見えない。

最初に理解しておくべき点は、これは仕様だという点です!! SMB プロトコル
は、「便宜的ロック(opportunistic locking)」と呼ばれる機能を持っています。
これは、クライアントが「安全に」ファイルのデータをクライアント側でキャッ
シングすることを可能にします。問題点は、このキャッシングは、全てのプログ
ラムが Samba 経由でアクセスする時にしか安全でないと言う点です。SMB 以外
のクライアントからアクセスした瞬間に、データの一貫性が損なわれてしまうの
です。

これには二つの解決案があります。最初の案は Samba にカーネルレベルのイ
ンタフェースを実装するものです。それは、NFS やローカルプロセス経由での 
UNIX クライアントからのアクセスを許可しますが、Samba に oplock が 
「中断される」ことを通知することで、データの一貫性を強制するというものです。
現在のところ、このインタフェースをサポートしているのは、SGI の IRIX
6.5.3f 以上のバージョンのみです。しかし、このインタフェースは、現在 
Linux と FreeBSD の両方で、実装に向けた論議が続けられています。同様に、
幾つかの UNIX ベンダもサポートに積極的です。

二つ目の案は、UNIX と Windows の両方からアクセスする必要のある共有で、
smb.conf の oplocks を無効にすることです。smb.conf(5) の "oplocks" と 
"veto oplock files" オプションを参照してください。不幸なことに、これは
性能の低下を引き起こしますが、カーネルに手をいれない以上、Windows と 
UNIX の両方から更新を伴うファイルアクセスを行う際に、これを避けることは
できません。

注意点を二つ:

Samba-1.9.18 以上は、oplocks をサポートしています。
Samba-1.9.17 ではサポートされていません。

また、Windows NT 4.0 の以下のレジストリエントリは、クライアント側で 
oplocks を無効にします。警告!! これは推奨される方法ではありません。
このクライアントからサーバへのアクセスは、*すべて* oplocks が無効に
なります。

=====================================================================

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters]
"BufFilesDenyWrite"=dword:00000000
"BufNamedPipes"=dword:00000000
"UseOpportunisticLocking"=dword:00000000
"DormantFileLimit"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters\Linkage]
"UtilizeNtCaching"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Filesystem]
"Win95TruncateExtensions"=dword:00000000

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanManServer\Parameters]
"EnableOpLockForceClose"=dword:00000001
"EnableOpLocks"=dword:00000000

=====================================================================

以下のレジストリエントリは、Windows 9x で、同様の設定を行うものです。

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\VxD\VREDIR]
"DiscardCacheOnOpen"=string:00000001
