R. *_*ser 8 linux command-line samba windows
如果我让 Windows 客户端以 <= 10 秒的间隔读取 Linux smb 共享上的文件,Windows 客户端将显示该文件的错误(缓存?)信息。
我已经在多个系统上复制了这个。
重现的示例步骤:
1) 设置 linux samba 共享 - 对于此示例,使用 Debian 并安装 samba。例子:
sudo mkdir /test
sudo chmod 777 /test
Run Code Online (Sandbox Code Playgroud)
smb.conf 添加:
[test]
read only = no
locking = no
path = /test/
guest ok = yes
Run Code Online (Sandbox Code Playgroud)
2)将此目录映射为Windows客户端中的驱动器(此测试将使用L:)
3)在samba服务器上创建一个包含一些文本的文件
nano /test/test.txt
ORIGINAL
Run Code Online (Sandbox Code Playgroud)
4) 在 windows 机器上创建一个简单的批处理文件以每 5 秒查看一次文件:
copy con test.bat
@echo off
cls
:1
type L:\test.txt
timeout 5
goto 1
Run Code Online (Sandbox Code Playgroud)
5) 运行批处理文件,它应该每 5 秒显示一次 ORIGINAL。
6) 在 linux 服务器上,更改文件内容
nano /test/test.txt
CHANGED
Run Code Online (Sandbox Code Playgroud)
7) 在 windows 上查看正在运行的批处理文件,它仍然会每五秒说“ORIGINAL”,而不是像真实文件那样“CHANGED”。
8) 终止批处理文件并等待 ~ 15 秒,或将超时更改为 > 10 秒,它将正确更新。
希望我已经解释并概述了如何充分测试它。
任何人都可以重现此行为和/或建议如何解决此问题?
.
.
.
笔记:
Linux 客户端 > Linux SMB 主机显示正确的文件内容。
Windows 客户端 > Windows SMB 主机显示正确的文件内容。
它特别是 Windows 客户端 > Linux SMB 主机,它没有以 <= 10 秒的刷新间隔显示正确的文件内容。
我测试过的所有 Windows 版本(Win7、Win10、Server2016)都表现出相同的行为。
我还在我的 samba 共享“NT1、SMB2、SMB3”上测试了不同的协议,它们不会改变行为。
注意:我认为这很可能是 Windows 问题,但一周内我没有收到任何关于 technet 或超级用户的回复。这应该很容易测试,任何人都可以确认这种行为或状态吗?
相关设置的默认值为:
oplocks = yeskernel oplocks = no(参见 Samba smb.conf文档)
根据另一个答案,您可以禁用 oplocks 。
另外,如果您运行的是Linux的O /与现代性的核心(2.4或更新版本)S,你可以离开oplocks = yes而不是添加一行smb.conf来启用内核机会锁。根据文档中的内核 oplocks (S)部分:
内核 oplocks 支持允许在本地 UNIX 进程或 NFS 操作访问 smbd(8) 已 oplock 的文件时破坏 Samba oplocks。这允许 SMB/CIFS、NFS 和本地文件访问之间的完全数据一致性
当oplocks和kernel oplocks都启用时,您应该在文件更新时获得良好的性能(来自缓存)和缓存失效。
要启用内核机会锁,请将此行添加到您的 Samba 配置文件中:
kernel oplocks = yes
Run Code Online (Sandbox Code Playgroud)
我通过放置解决了这个问题
oplocks = False
Run Code Online (Sandbox Code Playgroud)
在我的共享设置下的 smb.conf 中。
https://www.samba.org/samba/docs/old/Samba3-HOWTO/locking.html#id2615926
| 归档时间: |
|
| 查看次数: |
8386 次 |
| 最近记录: |