Nfs

RHEL6 NFSv4 客戶端表現得像 NFSv3?

  • March 12, 2018

我的理解是 NFSv4 客戶端應該立即連接到伺服器上的 NFSv4 服務,完全跳過 rpcbind portmapper 和 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 portmapper 服務,但這會導致所有針對該伺服器的 NFS 掛載都失敗(再次,客戶端堅持讓伺服器在 UDP 埠 111 上進行 rpcbind 偵聽)。我也試過弄亂 /etc/netconfig 沒有運氣。

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

我將其追溯到 autofs。它被設置為使用 /etc/auto.net 來使用 showmount 命令獲取導出列表。showmount 命令負責在 NFS 掛載之前訪問 rpcbind 和 mountd,因此嘗試更改掛載選項沒有任何效果。

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

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

引用自:https://serverfault.com/questions/900942