跳至內容跳至頁面導覽:上一頁 [access key p]/下一頁 [access key n]
documentation.suse.com / SUSE Linux Enterprise Server 文件 / 儲存管理指南 / 網路儲存 / 使用 NFS 共用檔案系統
適用範圍 SUSE Linux Enterprise Server 15 SP5

19 使用 NFS 共用檔案系統

網路檔案系統 (NFS) 是允許存取伺服器上檔案的通訊協定,存取方式與存取本地檔案相似。

SUSE Linux Enterprise Server 會安裝 NFS v4.2,後者引入了對疏鬆檔案、檔案預先配置、伺服器端複製、應用程式資料區塊 (ADB) 和適用於強制性存取控制 (MAC) 的帶標籤 NFS (用戶端和伺服器上均需要 MAC) 的支援。

19.1 綜覽

網路檔案系統 (NFS) 是經過充分驗證且受到廣泛支援的標準化網路通訊協定,它允許在不同的主機之間共用檔案。

網路資訊服務 (NIS) 可用於在網路中進行集中式使用者管理。將 NFS 和 NIS 結合使用,可透過檔案和目錄權限在網路中進行存取控制。NFS 與 NIS 攜手能讓使用者對網路有清楚的瞭解。

在預設組態中,NFS 完全信任網路,因此會信任連接到可信網路的任何機器。在可透過實體方式存取 NFS 伺服器所信任的任何網路的任何電腦上,任何具有管理員特權的使用者都可以存取該伺服器提供的所有檔案。

一般而言,此安全性層級非常適合以下情形:所信任的網路是真正的私人網路,通常局限於單個機櫃或機房,並且無法進行未經授權的存取。將整個子網路做為一個整體信任的其他情形限制較多,需要更精密的信任機制。為了符合這些情形的需要,NFS 使用 Kerberos 基礎架構來支援各種安全性層級。Kerberos 需要 NFSv4 (預設使用該通訊協定)。如需詳細資料,請參閱Chapter 6, Network authentication with Kerberos

YaST 模組中使用了下列詞彙。

輸出

由 NFS 伺服器輸出的目錄,用戶端可將該目錄整合到其系統中。

NFS 用戶端

NFS 用戶端是指透過「網路檔案系統」通訊協定使用 NFS 伺服器提供之 NFS 服務的系統。TCP/IP 通訊協定已整合到 Linux 核心中;不需要安裝任何其他軟體。

NFS 伺服器

NFS 伺服器向用戶端提供 NFS 服務。執行中的伺服器依賴於以下精靈運作:nfsd (worker)、idmapd (用於 NFSv4 的 ID 到名稱映射,僅在某些情境下需要)、statd (檔案鎖定) 和 mountd (掛接要求)。

NFSv3

NFSv3 是第 3 版實作,即支援用戶端驗證的無狀態 NFS。

NFSv4

NFSv4 是新版 (第 4 版) 實作,支援透過 Kerberos 的安全使用者驗證。NFSv4 只需要一個連接埠,因此比 NFSv3 更適合在防火牆後的環境中使用。

協定的定義如 https://datatracker.ietf.org/doc/html/rfc3530 所示。

pNFS

平行 NFS,NFSv4 的通訊協定延伸。所有 pNFS 用戶端都可以直接存取 NFS 伺服器上的資料。

重要
重要:DNS 所需

原則上,可以只使用 IP 位址來進行所有的輸出。為了避免逾時,您需要有正常運作的 DNS 系統。即使為了記錄目的,DNS 也必不可少,因為 mountd 精靈執行的是反向查詢。

19.2 安裝 NFS 伺服器

預設不會安裝 NFS 伺服器。若要使用 YaST 安裝 NFS 伺服器,請依次選擇軟體 › 軟體管理模式,然後啟用伺服器功能區段的檔案伺服器選項。按一下接受安裝所需套件。

該模式不包含用於 NFS 伺服器的 YaST 模組。完成模式安裝後,請執行以下指令安裝該模組:

> sudo zypper in yast2-nfs-server

NFS 與 NIS 一樣,都是主從式系統。但一台機器可同時扮演這兩種角色 — 它可透過網路提供檔案系統 (輸出),也可以從其他主機掛接檔案系統 (輸入)。

注意
注意:在輸出伺服器上本地掛接 NFS 磁碟區

SUSE Linux Enterprise Server 上不支援在輸出伺服器本地掛接 NFS 磁碟區。

19.3 設定 NFS 伺服器

NFS 伺服器可透過 YaST 來設定,也可以手動設定。若要進行驗證,還可以將 NFS 與 Kerberos 結合使用。

19.3.1 使用 YaST 輸出檔案系統

使用 YaST,將您網路中的主機轉變為 NFS 伺服器,此類伺服器可將目錄和檔案輸出到擁有其存取權的所有主機或一個群組下的全體成員。因此,無需在每個主機上本地安裝應用程式,伺服器也可以提供應用程式。

若要設定這樣的伺服器,請執行下列步驟:

程序 19.1︰ 設定 NFS 伺服器
  1. 啟動 YaST 並選取網路服務 ›  NFS 伺服器;請參閱圖形 19.1 「NFS 伺服器組態工具」。系統可能會提示您安裝其他軟體。

    NFS 伺服器組態工具
    圖 19.1︰ NFS 伺服器組態工具
  2. 按一下開始選項圓鈕。

  3. 如果 firewalld 在系統上處於使用中狀態,請單獨為 NFS 設定 firewalld (請參閱Section 23.4, “firewalld)。YaST 尚不完全支援 firewalld,因此請忽略「防火牆不可設定」訊息並繼續。

    在設定 firewalld 規則時,新增 TCP 和 UDP 連接埠值均為 2049 的 nfs3nfs 服務。此外,新增 TCP 和 UDP 連接埠值均為 20048 的 mountd 服務。

  4. 檢查是否要啟用 NFSv4。如果停用 NFSv4,YaST 將只支援 NFSv3。如需啟用 NFSv2 的相關資訊,請參閱注意:NFSv2

    1. 如果選取 NFSv4,請另行輸入適當的 NFSv4 網域名稱。idmapd 精靈會使用此參數。Kerberos 設定需要該精靈,當用戶端無法處理數字使用者名稱時,也需要使用該精靈。如果您不執行 idmapd 或無任何特殊要求,請將它保留為 localdomain (預設值)。如需 idmapd 精靈的詳細資訊,請參閱 /etc/idmapd.conf

  5. 若您需要安全存取伺服器,請按一下啟用 GSS 安全性。先決條件是您的網域中安裝有 Kerberos,且伺服器和用戶端都可進行 Kerberos 驗證。 按下一步繼續執行下一個組態對話方塊。

  6. 按一下對話方塊上半部分中的新增目錄以輸出目錄。

  7. 如果您尚未設定允許的主機,系統會自動彈出另一個對話方塊,可讓您輸入用戶端資訊及選項。輸入主機萬用字元 (通常您可以保留預設設定不變)。

    可以為每個主機設定四類主機萬用字元:單一主機 (名稱或 IP 位址)、網路群組、萬用字元 (例如 * 表示所有機器都能存取伺服器) 和 IP 網路。

    如需這些選項的詳細資訊,請參閱 exports 手冊頁。

  8. 按一下完成以完成組態。

19.3.2 手動輸出檔案系統

NFS 輸出服務的組態檔案是 /etc/exports/etc/sysconfig/nfs。如果 NFSv4 伺服器組態包含經過 Kerberos 驗證的 NFS,或者用戶端不能使用數字使用者名稱,則除了這些檔案外,還需要 /etc/idmapd.conf

若要啟動或重新啟動服務,請執行 systemctl restart nfsserver 指令。此指令還會重新啟動 NFS 伺服器所需的 RPC 連接埠對應程式。

為確保 NFS 伺服器永遠都會在開機時啟動,請執行 sudo systemctl enable nfsserver

注意
注意:NFSv4

NFSv4 是 SUSE Linux Enterprise Server 上可用的最新版 NFS 通訊協定。現在,針對 NFSv4 輸出的目錄設定方法與 NFSv3 相同。

SUSE Linux Enterprise Server 11 上,必須在 /etc/exports 中指定結合掛接。現在仍支援此方式,但已有了取代方案。

/etc/exports

/etc/exports 檔案包含一份項目清單。每一個項目都指出一個共用的目錄,並記錄它的共用方式。/etc/exports 中的項目通常包含:

/SHARED/DIRECTORY   HOST(OPTION_LIST)

例如:

/export/data   192.168.1.2(rw,sync)

這裡使用了 IP 位址 192.168.1.2,以識別允許的用戶端。您還可以使用主機名稱、表示一組主機的萬用字元 (*.abc.com* 等) 或網路群組 (@my-hosts)。

如需所有選項及其意義的詳細說明述,請參閱 /etc/exportsman 頁面:(man exports)。

如果您在 NFS 伺服器執行時修改了 /etc/exports,則需使用 sudo systemctl restart nfsserver 指令重新啟動 NFS 伺服器,以使變更生效。

/etc/sysconfig/nfs

/etc/sysconfig/nfs 檔案包含一些決定 NFSv4 伺服器精靈行為的參數。參數 NFS4_SUPPORT 必須設定為 yes (預設值)。NFS4_SUPPORT 決定 NFS 伺服器是否支援 NFSv4 輸出和用戶端。

如果您在 NFS 伺服器執行時修改了 /etc/sysconfig/nfs,則需使用 sudo systemctl restart nfsserver 指令重新啟動 NFS 伺服器,以使變更生效。

提示
提示:裝載選項

SUSE Linux Enterprise Server 11 上,必須在 /etc/exports 中指定 --bind 掛接。現在仍支援此方式,但已有了取代方案。現在,針對 NFSv4 輸出的目錄設定方法與 NFSv3 相同。

注意
注意:NFSv2

如果 NFS 用戶端仍相依於 NFSv2,請在伺服器的 /etc/sysconfig/nfs 中設定以下幾項來啟用該通訊協定:

NFSD_OPTIONS="-V2"
MOUNTD_OPTIONS="-V2"

重新啟動服務後,執行以下指令檢查版本 2 是否可使用:

> cat /proc/fs/nfsd/versions
+2 +3 +4 +4.1 +4.2
/etc/idmapd.conf

僅當使用 Kerberos 驗證或用戶端不能使用數字使用者名稱時,才需要 idmapd 精靈。自 Linux 核心 2.6.39 起,Linux 用戶端可以使用數字使用者名稱。idmapd 精靈會將傳送到伺服器的 NFSv4 要求進行名稱到 ID 的映射,並回覆用戶端。

如果需要,idmapd 需在 NFSv4 伺服器上執行。用戶端上的名稱到 ID 映射將由 nfs-client 套件提供的 nfsidmap 執行。

對於可能使用 NFS 來共用檔案系統的機器,請確定以統一的方式在這些機器間為使用者指定使用者名稱和 ID (UID)。您可以透過 NIS、LDAP 或您網域中的任何統一網域驗證機制來達成這個目的。

/etc/idmapd.conf 檔案中,必須為用戶端和伺服器設定相同的 Domain 參數。如果您不確定,請讓伺服器和用戶端檔案中的網域保持為 localdomain。我們在此提出一個組態檔案的例子,如下所示:

[General]
Verbosity = 0
Pipefs-Directory = /var/lib/nfs/rpc_pipefs
Domain = localdomain

[Mapping]
Nobody-User = nobody
Nobody-Group = nobody

若要啟動 idmapd 精靈,請執行 systemctl start nfs-idmapd。如果您在精靈執行時修改了 /etc/idmapd.conf,則需使用 systemctl start nfs-idmapd 指令重新啟動精靈,以使變更生效。

如需詳細資訊,請參閱 idmapdidmapd.conf 的手冊頁 (man idmapdman idmapd.conf)。

19.3.3 NFS 配合使用 Kerberos

若要讓 NFS 使用 Kerberos 驗證,必須啟用一般安全性服務 (GSS)。在初始 YaST NFS 伺服器對話方塊中選取啟用 GSS 安全性。您必須有一個工作中的 Kerberos 伺服器才能使用此功能。YaST 不會設定伺服器,而只是使用所提供的功能。若要使用 Kerberos 進行驗證,除了 YaST 組態外,至少還須完成以下步驟才能執行 NFS 組態:

  1. 請確定伺服器和用戶端位於相同的 Kerberos 領域中。它們必須存取相同的 KDC (金鑰配送中心) 伺服器,並共用其 krb5.keytab 檔案 (在任何機器上的預設位置都是 /etc/krb5.keytab)。如需有關 Kerberos 的詳細資訊,請參閱Chapter 6, Network authentication with Kerberos

  2. 在用戶端上執行 systemctl start rpc-gssd.service,以啟動 gssd 服務。

  3. 在伺服器上執行 systemctl start rpc-svcgssd.service,以啟動 svcgssd 服務。

若要進行 Kerberos 驗證,也需要在伺服器上執行 idmapd 精靈。若需更多資訊,請參閱/etc/idmapd.conf

如需有關設定啟用 Kerberos 之 NFS 的詳細資訊,請參閱第 19.6 節 「更多資訊」 中的連結所提供的內容。

19.4 設定用戶端

您不需安裝其他軟體就能將您的主機設定為 NFS 用戶端。所有需要的套件預設都會安裝。

19.4.1 使用 YaST 輸入檔案系統

授權使用者可以使用 YaST NFS 用戶端模組將NFS 目錄從 NFS 伺服器掛接到本地檔案樹。請執行下列步驟:

程序 19.2︰ 輸入 NFS 目錄
  1. 啟動 YaST NFS 用戶端模組。

  2. NFS 共用索引標籤中按一下新增。輸入 NFS 伺服器的主機名稱、要輸入的目錄和在本地掛接此目錄的掛接點。

  3. 使用 NFSv4 時,在 NFS 設定索引標籤中選取啟用 NFSv4。另外,NFSv4 網域名稱必須包含 NFSv4 伺服器所用的相同值。預設網域為 localdomain

  4. 若要為 NFS 使用 Kerberos 驗證,則 GSS 安全性必須啟用。選取啟用 GSS 安全性

  5. 如果您使用防火牆並希望允許從遠端電腦存取服務,請啟用 NFS 設定索引標籤中的在防火牆中開啟埠。防火牆的狀態顯示於核取方塊旁。

  6. 按一下確定,儲存變更。

組態會寫入 /etc/fstab,並且系統會掛接指定的檔案系統。當您稍後啟動 YaST 組態用戶端時,它也會從這個檔案讀取現有組態。

提示
提示:用做根檔案系統的 NFS

在透過網路將根分割區掛接為 NFS 共用的 (無磁碟) 系統中,設定 NFS 共用可供存取的網路裝置時請保持謹慎。

將系統關閉或重新開機時,預設的處理順序是先關閉網路連接,然後卸載根分割區。對於 NFS 根檔案系統,這種順序會造成問題,因為在已停用與 NFS 共用的網路連接的情況下,根分割區無法完全卸載。為防止系統停用相關的網路裝置,請依第 23.4.1.2.5 節 「啟動網路裝置」中所述開啟網路裝置組態索引標籤,然後在裝置啟動窗格中選取在 NFSroot 時

19.4.2 手動輸入檔案系統

從 NFS 伺服器手動輸入檔案系統的先決條件是有 RPC 埠對應程式正在執行。nfs 服務負責正確啟動該程式;因此,請以 root 身分輸入 systemctl start nfs,以啟動該服務。然後就可以像處理本地分割區一樣,使用 mount 指令在檔案系統中掛接遠端檔案系統:

> sudo mount HOST:REMOTE-PATHLOCAL-PATH

例如,若要從 nfs.example.com 機器輸入使用者目錄,可以使用:

> sudo mount nfs.example.com:/home /home

若要定義用戶端到 NFS 伺服器的 TCP 連接計數,可以使用 mount 指令的 nconnect 選項。您可以指定介於 1 到 16 之間的任何數字,其中 1 是預設值 (如果未指定掛接選項)。

僅會在第一次掛接程序中針對特定 NFS 伺服器套用 nconnect 設定。如果同一用戶端針對同一 NFS 伺服器執行掛接指令,則將共用所有已建立的連接,而不會建立新的連接。若要變更 nconnect 設定,必須卸載與特定 NFS 伺服器的所有用戶端連接。然後,您可以為 nconnect 選項定義一個新值。

您可以在 mount 的輸出或檔案 /proc/mounts 中找到 nconnect 目前套用的值。如果掛接選項沒有值,則在掛接期間不會使用該選項,而是使用預設值 1

注意
注意:連接數與 nconnect 定義的不同

由於您可以在第一次掛接後關閉和開啟連接,因此實際連接計數不必與 nconnect 的值相同。

19.4.2.1 使用自動掛接服務

autofs 精靈可用於自動掛接遠端檔案系統。請將下列項目新增至 /etc/auto.master 檔案:

/nfsmounts /etc/auto.nfs

如果 auto.nfs 檔案正確填入,/nfsmounts 目錄將做為用戶端上所有 NFS 掛接作業的根部。選擇 auto.nfs 這個名稱是從方便角度考量,您可以自行選擇任何名稱。使用以下指令在 auto.nfs 中為所有 NFS 掛接作業新增項目:

localdata -fstype=nfs server1:/data
nfs4mount -fstype=nfs4 server2:/

root 身分執行 systemctl start autofs,以啟用該設定。此範例中,透過 NFS 掛接 /nfsmounts/localdata (server1/data 目錄),透過 NFSv4 掛接 server2/nfsmounts/nfs4mount

如果在 autofs 服務執行中時編輯了 /etc/auto.master 檔案,則必須使用 systemctl restart autofs 重新啟動自動掛接器,才能使變更生效。

19.4.2.2 手動編輯 /etc/fstab

/etc/fstab 中的一般 NFSv3 掛接項目如下所示:

nfs.example.com:/data /local/path nfs rw,noauto 0 0

對於 NFSv 掛接,請在第三欄中使用 nfs4 而不是 nfs

nfs.example.com:/data /local/pathv4 nfs4 rw,noauto 0 0

noauto 選項可防止在啟動時自動掛接檔案系統。如果要手動掛接各檔案系統,可以縮短掛接指令的長度,僅指定掛接點:

> sudo mount /local/path
注意
注意:啟動時掛接

請注意,如果未輸入 noauto 選項,系統的 init 程序檔會在啟動時處理這些檔案系統的掛接。

19.4.3 平行 NFS (pNFS)

NFS 是最舊的通訊協定之一,開發於八十年代。雖然如此,NFS 對於共用小型檔案還是綽綽有餘的。但是,當您要傳輸大型檔案或有大量的用戶端要存取資料時,NFS 伺服器會成為瓶頸,嚴重影響系統效能。出現這種情況的原因是檔案快速增大,而乙太網路的相對速度無法完全跟上這一變化。

當您向一般 NFS 伺服器要求檔案時,伺服器會尋找檔案中繼資料、收集所有資料,並透過網路將資料傳輸到您的用戶端。但是,不論檔案的大小,效能瓶頸都會變得很明顯:

  • 對於小型檔案,大部分時間都用在收集中繼資料上。

  • 對於大型檔案,大部分時間則用在將資料從伺服器傳輸至用戶端上。

pNFS (或平行 NFS) 克服了這個局限性,因為它將檔案系統中繼資料與資料位置分隔開來。因此,pNFS 需要兩種類型的伺服器:

  • 中繼資料控制伺服器,用於處理所有非資料流量

  • 一或多個儲存伺服器,用於存放資料

中繼資料與儲存伺服器構成了一個邏輯 NFS 伺服器。當用戶端想要讀取或寫入時,中繼資料伺服器會告知 NFSv4 用戶端使用哪個儲存伺服器來存取檔案區塊。用戶端可以直接存取伺服器上的資料。

SUSE Linux Enterprise Server 僅在用戶端上支援 pNFS。

19.4.3.1 使用 YaST 設定 pNFS 用戶端

程序 19.2 「輸入 NFS 目錄」 中所示繼續操作,但要按一下pNFS (v4.2)核取方塊並選擇性地按一下NFSv4 共用。YaST 會執行所有必要步驟,並會在檔案 /etc/exports 中寫入所有必需的選項。

19.4.3.2 手動設定 pNFS 用戶端

請參閱第 19.4.2 節 「手動輸入檔案系統」 開始設定。大部分組態均由 NFSv4 伺服器執行。對於 pNFS,唯一的區別是將 minorversion 選項和中繼資料伺服器 MDS_SERVER 新增至您的 mount 指令:

> sudo mount -t nfs4 -o minorversion=1 MDS_SERVER MOUNTPOINT

為方便除錯,請變更 /proc 檔案系統中的值:

> sudo echo 32767 > /proc/sys/sunrpc/nfsd_debug
> sudo echo 32767 > /proc/sys/sunrpc/nfs_debug

19.5 透過 NFSv4 管理存取控制清單

除了針對使用者、群組和其他人 (rwx) 的簡單讀取、寫入、執行 (ugo) 旗標之外,Linux 中的各存取控制清單 (ACL) 之間沒有統一的標準。控制能力相對較好的一個選擇是 POSIX 從未正式標準化的《Draft POSIX ACLs》(POSIX ACL 草稿)。另一個選擇是 NFSv4 ACL,它們設計為 NFSv4 網路檔案系統的一部分,目的是為 Linux 上的 POSIX 系統與 Microsoft Windows 上的 WIN32 系統之間提供合理的相容性。

NFSv4 ACL 不能完全正確實作 Draft POSIX ACL,因此未在 NFSv4 用戶端上對應 ACL 存取權 (例如使用 setfacl)。

使用 NFSv4 時,無法使用 Draft POSIX ACL (即使是在模擬環境中),必須直接使用 NFSv4 ACL;換言之,雖然 setfacl 可以在 NFSv3 上運作,但不能在 NFSv4 上運作。為了能夠在 NFSv4 檔案系統上使用 NFSv4 ACL,SUSE Linux Enterprise Server 提供了 nfs4-acl-tools 套件,套件中包含下列各項:

  • nfs4-getfacl

  • nfs4-setfacl

  • nfs4-editacl

它們的運作方式與用於檢查和修改 NFSv4 ACL 的 getfaclsetfacl 類似。僅當 NFS 伺服器上的檔案系統提供對 NFSv4 ACL 的全面支援時,這些指令才起作用。雖然某些存取控制項目 (ACE) 的特定組合可能在用戶端中不可用,但用戶端上執行的程式都將受到伺服器所實作之任何限制的影響。

不支援在輸出 NFS 伺服器本地掛接 NFS 磁碟區。

其他資訊

如需資訊,請參閱 Introduction to NFSv4 ACLs,網址為:http://wiki.linux-nfs.org/wiki/index.php/ACLs#Introduction_to_NFSv4_ACLs

19.6 更多資訊

除了 exportsnfsmount 的手冊頁外,還可在 /usr/share/doc/packages/nfsidmap/README 中找到關於設定 NFS 伺服器和用戶端的資訊。如需更多線上文件,請參閱下列網站:

19.7 收集資訊以供 NFS 疑難排解

19.7.1 常見疑難排解

在某些情況下,您可以透過讀取產生的錯誤訊息並查看 /var/log/messages 檔案,來瞭解 NFS 中的問題。但很多時候,錯誤訊息和 /var/log/messages 中提供的資訊不夠詳細。此時,您可透過在重現問題時擷取網路封包來充分瞭解大部分 NFS 問題。

明確定義問題。透過以各種方式測試系統並確定問題的發生時間來檢查問題。隔離會導致問題的最簡單步驟。然後嘗試依照下面程序中所述重現問題。

程序 19.3︰ 重現問題
  1. 擷取網路封包。在 Linux 上,可以使用 tcpdump 套件提供的 tcpdump 指令。

    tcpdump 語法的範例如下:

    tcpdump -s0 -i eth0 -w /tmp/nfs-demo.cap host x.x.x.x

    其中:

    s0

    阻止封包截斷

    eth0

    應以將傳遞封包的本地介面的名稱取代 。您可以使用 any 值同時擷取所有介面,但使用此屬性通常會導致資料品質下降並造成分析混亂。

    w

    指定要寫入的擷取檔案的名稱。

    x.x.x.x

    應以 NFS 連接另一端的 IP 位址取代。例如,在 NFS 用戶端取得 tcpdump 時,請指定 NFS 伺服器的 IP 位址,反之亦然。

    注意
    注意

    在某些情況下,只需在 NFS 用戶端或 NFS 伺服器任一端擷取資料就足夠了。但如果不確定端到端網路的完整性,則通常需要在兩端擷取資料。

    請不要關閉 tcpdump 程序並繼續下一步。

  2. (選擇性) 如果問題發生在 nfs mount 指令自身執行期間,您可以嘗試使用 nfs mount 指令的高詳細程度選項 (-vvv ) 來獲得更多輸出。

  3. (選擇性) 取得重現方法的 strace。重現步驟的 strace 精確記錄了發生系統呼叫的確切時間。此資訊可用於進一步確定您應在 tcpdump 中關注哪些事件。

    例如,如果您發現在 NFS 掛接上執行 mycommand --param 指令失敗,則可以使用以下指令來 strace 指令:

    strace -ttf -s128 -o/tmp/nfs-strace.out mycommand --param

    如果您未取得任何重現步驟的 strace,請注意問題的重現時間。檢查 /var/log/messages 記錄檔案以找出問題。

  4. 一旦問題重現,按 CTRLc 來停止在終端機中執行的 tcpdump。如果 strace 指令導致掛斷,還需要終止 strace 指令。

  5. 現在,具有分析封包追蹤和 strace 資料經驗的管理員可以檢查 /tmp/nfs-demo.cap/tmp/nfs-strace.out 中的資料。

19.7.2 進階 NFS 除錯

重要
重要:進階除錯適用於進階使用者

請注意,以下小節僅適用於瞭解 NFS 代碼的專業 NFS 管理員。因此,請執行第 19.7.1 節 「常見疑難排解」中所述的第一步,以縮小問題範圍,並告知專家可能需要哪些方面的除錯代碼 (如果有) 才能瞭解更深入的詳細資料。

可啟用各種除錯代碼來收集額外的 NFS 相關資訊。不過,除錯訊息非常晦澀難懂,並且數量巨大,因此使用除錯代碼可能會影響系統效能。它甚至有可能對系統產生的影響大到足以阻止問題的發生。大多數情況下都不需要除錯代碼輸出,對於不太熟悉 NFS 代碼的人來說,通常也沒什麼用。

19.7.2.1 使用 rpcdebug 啟用除錯

rpcdebug 工具可讓您設定和清除 NFS 用戶端和伺服器除錯旗標。如果在 SLE 中無法存取 rpcdebug 工具,可以從 nfs-clientnfs-kernel-server 套件為 NFS 伺服器安裝此工具。

若要設定除錯旗標,請執行:

rpcdebug -m module -s flags

若要清除除錯旗標,請執行:

rpcdebug -m module -c flags

其中,module 可以是:

nfsd

NFS 伺服器代碼的除錯

nfs

NFS 用戶端代碼的除錯

nlm

NFS 鎖定管理員除錯 (在 NFS 用戶端或 NFS 伺服器端)。僅適用於 NFS v2/v3。

rpc

遠端程序呼叫模組除錯 (在 NFS 用戶端或 NFS 伺服器端)。

如需 rpcdebug 指令詳細用法的資訊,請參閱手冊頁:

man 8 rpcdebug

19.7.2.2 針對 NFS 相依的其他代碼啟用除錯

NFS 活動可能依賴於其他相關服務,例如 NFS 掛接精靈—rpc.mountd。您可以在 /etc/sysconfig/nfs 中為相關服務設定選項。

例如,/etc/sysconfig/nfs 包含以下參數:

MOUNTD_OPTIONS=""

若要啟用除錯模式,必須使用 -d 選項,後接以下任何值:allauthcallgeneralparse

例如,以下代碼可啟用所有形式的 rpc.mountd 記錄:

MOUNTD_OPTIONS="-d all"

如需所有可用選項,請參閱手冊頁:

man 8 rpc.mountd

變更 /etc/sysconfig/nfs 後,需要重新啟動服務:

systemctl restart nfsserver  # for nfs server related changes
systemctl restart nfs  # for nfs client related changes