RHEL6 NFSv4 客戶端的行為類似 NFSv3?

RHEL6 NFSv4 客戶端的行為類似 NFSv3?

我的理解是NFSv4 客戶端應該立即連接到伺服器上的NFSv4 服務,完全跳過rpcbind 端口映射器和mountd 服務交互,但我看到我的RHEL6 客戶端總是首先聯繫rpcbind 服務來獲取mountd 端口,獲取清單從 mountd 匯出,然後最終連接到 NFSv4 服務。使用tcpdump觀察。

根據所有跡象(掛載命令的輸出和 TCP 檢查),掛載作業完成後,客戶端和伺服器將使用 NFSv4。

即使我盡一切努力嘗試在客戶端上僅使用 NFSv4,也會發生這種情況。例子:

  • 在 /etc/nfsmount.conf 中設定 Nfsvers=4
  • 使用 vers=4 選項明確安裝
  • 明確設定 NFS 連接埠。 (透過 mount 指令和 nfsmount.conf 中)

我完全偏離了基礎還是有什麼不對勁?這對我來說是一個問題,因為NFS 客戶端堅持能夠通過UDP 到達伺服器上的rpcbind,然後才能掛載任何NFSv4 導出,並且我遇到了神秘的UDP 封包丟失(是的,我正在與網絡人員合作這方面)導致安裝有時會完全失敗或需要很長時間才能完成。

我查看了 libtirpc 原始程式碼,發現它總是使用 UDP 連接到 RPC 連接埠映射器,但我想完全將連接埠映射器和 mountd 服務排除在外。

我嘗試使用“rpcinfo -d”在 NFS 伺服器上取消註冊 UDP 連接埠映射器服務,但這會導致所有針對該伺服器的 NFS 安裝失敗(客戶端再次堅持要求伺服器讓 rpcbind 偵聽 UDP 連接埠 111)。我也嘗試弄亂 /etc/netconfig 但沒有成功。

有人遇到過這種行為或對 NFSv4 有足夠的了解來告訴我我有不切實際的期望嗎?

答案1

我將此追溯到 autofs。它被設定為使用 /etc/auto.net 使用 showmount 指令取得匯出清單。 showmount 指令負責在 NFS 掛載發生之前存取 rpcbind 和 mountd,因此嘗試變更掛載選項沒有效果。

我修改了 /etc/auto.net 並且我的問題得到了解決。

附註:在 auto.master 中使用“-hosts”選項,正如我在不同地方看到的那樣,也會導致 rpcbind 和 mountd 存取。我最終只是讓 auto.net 掛載了所有 NFSv4 伺服器的根目錄,假設我的所有主機都是 NFSv4,我理解這是可以的。

相關內容