打开同一个 Samba 共享文件没有提供更新的文件是谁的错?

打开同一个 Samba 共享文件没有提供更新的文件是谁的错?

在下面的场景中,Windows 上的应用程序不会获取文件的更新版本,而是获取文件的旧版本。在这种情况下,我有两种方法来获取新版本:(1)在Linux上重新启动Samba服务,或(2)Remove-SmbMapping在Windows上调用PowerShell命令。

我不确定当 SMB 服务器是 Windows 时我是否经历过这种情况,但可能没有,因为我不记得了。如果只有Linux上的文件服务器为Samba时才会出现此问题,请问问题原因是什么? Samba 服务器的错误? Windows 的一个错误?还是SMB协议本身的问题?

  1. 使用 Samba (4.16.2) 在 Linux PC 上共享目录。
  2. 在 Windows PC 上,打开该目录中的文件并关闭该文件。
  3. 在Linux PC上,修改该文件。
  4. 在 Windows PC 上,再次打开该文件。

答案1

这不是一个错误。这是“设计造成的后果”。

概括来说:Samba 服务器有两种运行模式:作为专用文件服务器或不作为专用文件服务器。

专用文件服务器的基本思想是实际存储速度很慢,而且大多数用户无论如何都会通过 smb 访问文件 - 因此将文件缓存在服务器内存中是高效的。预计不会绕过 SMB 修改文件。当然,缓存会在一段时间内失效,但它超出了用户的控制范围(不确定配置的时间和位置,甚至是否可以配置)。

这其中的关键就是:“机会锁”。oplocks键入 smb.conf。

官方文档(https://www.oreilly.com/openbook/samba/book/ch05_05.html) 明确指出:

如果您从 Unix 应用程序(例如 vi )和 SMB 客户端访问相同的文件,则应禁用机会锁...

相关内容