在下面的场景中,Windows 上的应用程序不会获取文件的更新版本,而是获取文件的旧版本。在这种情况下,我有两种方法来获取新版本:(1)在Linux上重新启动Samba服务,或(2)Remove-SmbMapping
在Windows上调用PowerShell命令。
我不确定当 SMB 服务器是 Windows 时我是否经历过这种情况,但可能没有,因为我不记得了。如果只有Linux上的文件服务器为Samba时才会出现此问题,请问问题原因是什么? Samba 服务器的错误? Windows 的一个错误?还是SMB协议本身的问题?
- 使用 Samba (4.16.2) 在 Linux PC 上共享目录。
- 在 Windows PC 上,打开该目录中的文件并关闭该文件。
- 在Linux PC上,修改该文件。
- 在 Windows PC 上,再次打开该文件。
答案1
这不是一个错误。这是“设计造成的后果”。
概括来说:Samba 服务器有两种运行模式:作为专用文件服务器或不作为专用文件服务器。
专用文件服务器的基本思想是实际存储速度很慢,而且大多数用户无论如何都会通过 smb 访问文件 - 因此将文件缓存在服务器内存中是高效的。预计不会绕过 SMB 修改文件。当然,缓存会在一段时间内失效,但它超出了用户的控制范围(不确定配置的时间和位置,甚至是否可以配置)。
这其中的关键就是:“机会锁”。oplocks
键入 smb.conf。
官方文档(https://www.oreilly.com/openbook/samba/book/ch05_05.html) 明确指出:
如果您从 Unix 应用程序(例如 vi )和 SMB 客户端访问相同的文件,则应禁用机会锁...