如果间隔小于等于10秒读取文件,Windows客户端将不会在本地刷新Linux samba文件


8

如果我有Windows客户端以小于等于10秒的间隔读取Linux smb共享上的文件,则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秒显示一次“原始”,而不是真实文件中的“已更改”。

8)终止批处理文件并等待〜15秒,或者将超时更改为> 10秒,它将正确更新。

希望我已经解释并概述了如何充分测试。

任何人都可以重现此行为和/或建议如何解决此问题吗?

笔记:

Linux客户端> Linux SMB主机显示正确的文件内容。

Windows客户端> Windows SMB主机显示正确的文件内容。

特别是Windows客户端> Linux SMB主机在<= 10秒的刷新间隔内未显示正确的文件内容。

我测试过的所有Windows版本(Win7,Win10,Server2016)都表现出相同的行为。

我还在samba共享'NT1,SMB2,SMB3'上测试了不同的协议,它们没有改变行为。

注意:我认为这很可能是Windows的问题,但是一周内我都没有在technet或超级用户上收到任何答复。这应该很容易测试,任何人都可以确认这种行为或以其他方式声明吗?


嗨!也许是Windows客户端缓存文件。您是否尝试设置Windows文件服务器以查看其行为是否相同。我知道您需要窗户,但只是在开玩笑。有史以来最好的解决方案:卸载Windows。
ncomputers

我已在Server 2016上安装了文件服务器角色的服务器上对此进行了测试。发生相同的行为。
R. StackUser

好吧,下一步可能是测试在服务器端和客户端禁用缓存...
ncomputers

Answers:


8

相关设置的默认值为:

  • oplocks = yes
  • kernel oplocks = no

(请参阅Samba smb.conf文档)


您可以根据其他答案禁用oplock 。

另外,如果您运行的是Linux的O /与现代性的核心(2.4或更新版本)S,你可以离开oplocks = yes不是添加一行smb.conf来启用内核机会锁。根据文档中的内核oplock(S)部分:

内核操作锁定支持允许在本地UNIX进程或NFS操作访问smbd(8)已锁定的文件时破坏Samba操作锁定。这样可以实现SMB / CIFS,NFS和本地文件访问之间的完全数据一致性

oplockskernel oplocks都启用时,更新文件时,您应该获得良好的性能(来自缓存)和缓存无效。

要启用内核操作锁定,请将以下行添加到您的Samba配置文件中:

kernel oplocks = yes

1
在回答的第一部分中,您强调oplocks应禁用该功能。在第二部分中,引号说使它们与一起使用kernel oplocks。建议您的最后一个示例不仅应该kernel oplocks = yes而且应该正确oplocks = yes吗?
roaima '19

@roaima,默认配置为:oplocks = yeskernel oplocks = no。因此无需添加oplocks = yes; 我们只需要指定kernel oplocks值即可。
Serge

2
我只是在想,也许既然您的问题的第一部分建议禁用它,那么在您的最终提案中将其联系起来是值得的。
roaima '19

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.