Windowsクライアントは、10秒以下の間隔でファイルを読み取る場合、Linux sambaファイルをローカルで更新しません


8

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秒ほど待つか、タイムアウトを10秒より長い値に変更すると、正しく更新されます。

うまくいけば、これを十分にテストする方法を説明し、概要を説明しました。

誰かがこの動作を再現したり、これを修正する方法を提案したりできますか?

ノート:

Linuxクライアント> Linux SMBホストは、適切なファイルコンテンツを表示します。

Windowsクライアント> Windows SMBホストは、適切なファイルコンテンツを表示します。

具体的には、Windowsクライアント> Linux SMBホストで、10秒以下の更新間隔で適切なファイルコンテンツが表示されません。

私がテストしたすべてのWindowsフレーバー(Win7、Win10、Server2016)は同じ動作を示します。

私のサンバ共有「NT1、SMB2、SMB3」でさまざまなプロトコルをテストしましたが、それらは動作を変更しません。

注:これはWindowsの問題である可能性が高いと思いますが、1週間以内にtechnetまたはスーパーユーザーのいずれからも応答がありません。これはかなり簡単にテストできるはずですが、誰かがこの動作を確認したり、それ以外の状態を述べたりできますか?


こんにちは!たぶん、Windowsクライアントがファイルをキャッシュしているのでしょう。Windowsファイルサーバーをセットアップして、同じように動作するかどうかを確認しましたか?私はあなたが窓を必要とするのを知っています、しかしただの冗談です。これまでで最高のソリューション:Windowsをアンインストールします。
ncomputers

ファイルサーバーの役割がインストールされているサーバー2016でこれをテストしました。同じ現象が発生します。
R. StackUser 2018

たぶん次のステップは、サーバー側とクライアント側でキャッシュを無効にすることをテストすることでしょう...
ncomputers

回答:


8

関連する設定のデフォルト値は次のとおりです。

  • oplocks = yes
  • kernel oplocks = no

(Samba smb.confドキュメントを参照)


別の回答に従って、oplockを無効にすることができます

または、最新のカーネル(2.4以降)でLinux O / Sを実行している場合はoplocks = yesそのままにしsmb.confて、カーネルoplockを有効にする行を追加できます。ドキュメントのカーネルoplocks(S)セクションに従って:

カーネルoplocksのサポートにより、ローカルのUNIXプロセスまたはNFS操作がsmbd(8)がoplockしたファイルにアクセスするときはいつでも、Samba oplockを解除できます。これにより、SMB / CIFS、NFS、ローカルファイルアクセス間の完全なデータ整合性が可能になります

ときoplockskernel oplocksの両方が有効になっているファイルが更新されると、あなたは良い(キャッシュから)パフォーマンスとキャッシュの無効化を取得する必要があります。

カーネルoplockを有効にするには、次の行をSamba構成ファイルに追加します。

kernel oplocks = yes

1
回答の最初の部分で、oplocks無効にする必要があることを強調します。2番目の部分では、引用文を使用すると、それらを有効にすることができますkernel oplocks。最終的な例にだけでなくkernel oplocks = yes、それも含めるべきだと示唆するのは正しいでしょうoplocks = yesか?
roaima

@roaima、デフォルトの設定は次のとおりです。oplocks = yeskernel oplocks = no。したがって、追加する必要はありませんoplocks = yeskernel oplocks値を指定するだけです。
セルジュ、

2
あなたの質問の最初の部分がそれを無効にすることを示唆しているので、あなたの最終的な提案でそれを接続する価値があると私はちょうど考えていました。
roaima

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.