持久文件句柄、弹性文件句柄和持久文件句柄之间的区别

Wav*_*ter 7 samba server-message-block cifs samba4

在 CIFS/SMB 协议中,我看到有 3 种类型的文件句柄:持久性、弹性和持久性。它们之间有什么区别?

War*_*ica 8

  • 耐用的手柄是 SMB 2.0 的一部分
  • 弹性手柄是 SMB 2.1 的一部分
  • 持久句柄是 SMB 2.2 的一部分,现在称为 SMB3

我对以下内容的主要参考是:

https://wiki.samba.org/index.php/SMB3_kernel_status

虽然这最初是为 Samba3 设计的,但它有更多细节:

https://wiki.samba.org/index.php/Samba3/SMB2

持久文件句柄允许连接到 SMB 服务器以在短暂的网络中断中幸存下来——当打开过程终止时,持久句柄不一定被清除。当客户端尝试重新连接时,如果 oplock(/lease) 仍然存在,它会重新连接到文件。

但是,如果另一个客户端尝试打开该文件,则 oplock/lease 将被破坏,第一个客户端无法重新连接。

即使 oplock/lease 被破坏,弹性文件句柄也会保留,但坦率地说,我无法了解其工作原理的所有技术细节。下面的参考资料之一说 Durable 和 Resilient 之间的区别在于句柄的创建方式 - Durable 通过创建上下文调用和 Resilient 通过 IOCTL。 (我无法理解的主要问题是锁定排序和重放如何适应这一点,但看起来这不是持久和弹性之间的关键区别。)

对于持久句柄,我想不出比这个 Samba 文档更好的东西

持久文件句柄类似于具有强大保证的持久文件句柄。使用持久性 v2 创建请求 blob 请求它们,并将持久标志设置为 true。服务器仅授予标记为 CA(持续可用)的共享的持久句柄。

据我所知,这些还没有在 Samba 中实现,但目标是支持集群和持续可用性,所以它正在开发中。