WindowsクライアントにLinux smb共有上のファイルを10秒以下の間隔で読み取らせた場合、Windowsクライアントはそのファイルの誤った(キャッシュされた?)情報を表示します。
これを複数のシステムで再現しました。
再現する手順の例:
1)Linux samba共有をセットアップします-この例では、Debianを使用してsambaをインストールします。例:
Sudo mkdir /test
Sudo chmod 777 /test
smb.confの追加:
[test]
read only = no
locking = no
path = /test/
guest ok = yes
2)このディレクトリをWindowsクライアントのドライブとしてマップします(このテストではL:を使用します)。
3)Sambaサーバー上にテキストを含むファイルを作成します
nano /test/test.txt
ORIGINAL
4)Windowsマシンで単純なバッチファイルを作成し、5秒ごとにファイルを表示します。
copy con test.bat
@echo off
cls
:1
type L:\test.txt
timeout 5
goto 1
5)バッチファイルを実行します。5秒ごとにORIGINALと表示されます。
6)Linuxサーバーでファイルの内容を変更する
nano /test/test.txt
CHANGED
7)Windowsで実行中のバッチファイルを表示すると、5秒ごとに「ORIGINAL」と表示され、実際のファイルのように「変更」されません。
8)バッチファイルを終了して15秒ほど待機し、ORタイムアウトを10秒以上に変更すると、適切に更新されます。
うまくいけば、これを十分にテストする方法を説明し、概要を説明しました。
誰かがこの動作を再現したり、これを修正する方法を提案したりできますか?
。
。
。
ノート:
Linuxクライアント> Linux SMBホストは適切なファイルコンテンツを表示します。
Windowsクライアント> Windows SMBホストは適切なファイルコンテンツを表示します。
具体的には、Windowsクライアント> LinuxですSMB 10秒未満の更新間隔で適切なファイルコンテンツを表示しないホスト
私がテストしたすべてのWindowsフレーバー(Win7、Win10、Server2016)は同じ動作を示します。
私のサンバ共有「NT1、SMB2、SMB3」でさまざまなプロトコルをテストしましたが、動作は変わりません。
注:これはWindowsの問題である可能性が高いと思いますが、1週間以内にtechnetまたはスーパーユーザーのいずれにも応答がありません。これはテストするのがかなり簡単なはずです。誰かがこの動作を確認したり、そうでなければ述べたりできますか?
私はこれを解決して
oplocks = False
共有設定のsmb.confにあります。
https://www.samba.org/samba/docs/old/Samba3-HOWTO/locking.html#id2615926
関連する設定のデフォルト値は次のとおりです。
oplocks = yes
kernel oplocks = no
(Samba smb.conf のドキュメントを参照)
別の answer のように、oplockを無効にすることができます。
または、最新のカーネル(2.4以降)でLinux O/Sを実行している場合は、oplocks = yes
を残して代わりにaddカーネルoplockを有効にするsmb.conf
への行。ドキュメントの kernel oplocks(S) セクションに従って:
カーネルoplocksのサポートにより、smbd(8)がoplockしたファイルにローカルUNIXプロセスまたはNFS操作がアクセスするときはいつでも、Samba oplockを解除できます。これにより、SMB/CIFS、NFS、ローカルファイルアクセス間の完全なデータ整合性が可能になります
oplocks
とkernel oplocks
の両方が有効になっていると、ファイルが更新されたときに、(キャッシュから)良好なパフォーマンスとキャッシュの無効化が得られます。
カーネルoplockを有効にするには、次の行をSamba構成ファイルに追加します。
kernel oplocks = yes