!== !== File-Cacheing.txt for Samba release 2.0.7 26 Apr 2000 !== 翻訳者: 高橋基信 更新日: 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