ファイル読み取り間隔が<= 10秒の場合、WindowsクライアントはLinux Sambaファイルをローカルに更新しません。

ファイル読み取り間隔が<= 10秒の場合、WindowsクライアントはLinux Sambaファイルをローカルに更新しません。

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)5秒ごとにファイルを表示するには、Windowsシステムで単純なバッチファイルを作成します。

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で実行されているバッチファイルを見ると、実際のファイルのように「CHANGED」の代わりに「ORIGINAL」が5秒ごとに表示されます。

8) バッチファイルを終了して15秒程度待つか、タイムアウトを10秒以上に変更すると正しく更新されます。

これを適切にテストする方法を説明し、説明したことを願っています。

誰でもこの動作を再現したり、この問題を解決する方法を提案できますか?

メモ:

Linuxクライアント> Linux SMBホストは正しいファイルの内容を表示します。

Windowsクライアント> Windows SMBホストが正しいファイルの内容を表示します。

具体的には、Windowsクライアント> Linux SMBホストは、更新間隔<= 10秒の場合、正しいファイルコンテンツを表示しません。

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

また、Samba共有「NT1、SMB2、SMB3」でさまざまなプロトコルをテストしましたが、動作は変わりませんでした。

注:私はこれがWindowsの問題である可能性が最も高いと思いましたが、一週間はtechnetまたはsuperuserの答えを受け取りませんでした。これはテストするのが簡単です。誰でもこの動作を確認または説明できますか?

ベストアンサー1

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

  • oplocks = yes
  • kernel oplocks = no

(サンバ参照smb構成ファイル文書)


他の方法に従って商談ロックを無効にすることができます。回答

または、最新のカーネル(2.4以降)を含むLinuxオペレーティングシステムを実行している場合は、そのままにしてくださいoplocks = yes代わりにsmb.confカーネルoplockを有効にする行を追加します。 ~によるとカーネル機会ロック(S)文書のセクション:

カーネルoplockサポートを使用すると、ローカルのUNIXプロセスまたはNFS操作がsmbd(8)によってロックされたファイルにアクセスすると、Samba oplockが壊れる可能性があります。これにより、SMB / CIFS、NFS、およびローカルファイルアクセス間の完全なデータ整合性が可能になります。

oplocksと両方をkernel oplocks有効にすると(キャッシュから)良いパフォーマンスが得られ、ファイルが更新されるとキャッシュが無効になります。

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

kernel oplocks = yes

おすすめ記事