Samba
持久文件句柄、彈性文件句柄和持久文件句柄之間的區別
在 CIFS/SMB 協議中,我看到有 3 種類型的文件句柄:持久、彈性和持久。它們之間有什麼區別?
- 耐用搖桿是 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 由 create context 呼叫實現,而 Resilient 由 IOCTL 實現。 (我無法理解的主要事情是鎖定排序和重放如何適應這一點,但看起來這並不是持久性和彈性之間的關鍵區別。)
對於持久句柄,我想不出比這個 Samba 文件更好的東西:
持久文件句柄類似於具有強大保證的持久文件句柄。使用持久性標誌設置為 true 的持久 v2 創建請求 blob 請求它們。伺服器僅授予標記為 CA(持續可用)的共享的持久句柄。
據我所知,這些還沒有在 Samba 中實現,但目標是支持集群和持續可用性,所以它正在開發中。