NFS服務器故障與問題診斷
NFS問題確定
與其它網絡服務一樣,使用網絡文件系統NFS服務器可能出現問題。對這些問題的故障診斷涉及理解跟蹤 NFS 問題的策略、識別 NFS 相關的錯誤消息和選擇適當的解決方案。當跟蹤到一個NFS服務器問題時,請首先孤立三個主要故障點以確定其中是哪一個不工作:服務器、客戶機或網絡本身。
識別硬安裝和軟安裝文件問題
當網絡或服務器有問題時,訪問硬安裝遠程文件的程序與訪問軟安裝遠程文件的程序所出現的故障不同。
如果一臺服務器未能響應一個硬安裝請求,NFS 會顯示消息:
NFS服務器主機名未響應,仍在嘗試
因為客戶機會反復嘗試安裝請求直到成功,所以硬安裝遠程文件系統導致程序掛起直到服務器響應。執行硬安裝時請使用 mount 命令的 -bg 標志,這樣如果服務器不響應,客戶機就會在后臺重試安裝。
如果服務器未響應一個軟安裝請求,NFS 會顯示消息:
連接超時
當一段時間的嘗試沒有成功后軟安裝遠程文件系統返回一個錯誤。不幸的是在文件系統操作中很多程序不檢查返回情況,因此在訪問軟安裝文件時您不會看到該錯誤消息。然而,該 NFS 錯誤消息在控制臺上顯示。
獲取 NFS 守護程序的當前狀態
可以立即分別或全部獲取 NFS 守護程序的當前狀態。要分別獲取 NFS 守護程序的當前狀態,請運行:
lssrc -s Daemon
其中 Daemon 是由 SRC 控制的任何一個守護程序。例如,要獲取 rpc.lockd 守護程序的當前狀態,請運行:
lssrc -s rpc.lockd
要立即獲取所有 NFS 守護程序的當前狀態,請運行:
lssrc -a
識別NFS故障核對表
如果一臺客戶機當前有NFS故障,請執行以下操作:
1. 驗證網絡連接是否正確。
2. 按照 獲取 NFS 守護程序的當前狀態 中的指示信息,驗證客戶機中是否運行了 inetd , portmap 和 biod 守護程序。
3. 驗證正在安裝的文件系統是否存在有效的安裝點。
4. 在客戶機 shell 提示符下運行以下命令以驗證服務器是否已啟動并運行:
/usr/bin/rpcinfo -p server_name
如果服務器已啟動,會顯示程序、版本、協議和端口號的清單,類似以下內容:
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100005 1 udp 1025 mountd
100001 1 udp 1030 rstatd
100001 2 udp 1030 rstatd
100001 3 udp 1030 rstatd
100002 1 udp 1036 rusersd
100002 2 udp 1036 rusersd
100008 1 udp 1040 walld
100012 1 udp 1043 sprayd
100005 1 tcp 694 mountd
100003 2 udp 2049 nfs
100024 1 udp 713 status
100024 1 tcp 715 status
100021 1 tcp 716 nlockmgr
100021 1 udp 718 nlockmgr
100021 3 tcp 721 nlockmgr
100021 3 udp 723 nlockmgr
100020 1 udp 726 llockmgr
100020 1 tcp 728 llockmgr
100021 2 tcp 731 nlockmgr
如果沒有返回類似的響應,請在服務器控制臺上登錄服務器并按 獲取NFS守護程序的當前狀態 中的指示信息檢查 inetd 守護程序的狀態。
5. 驗證 mountd 、 portmap 和 nfsd 守護程序正在NFS服務器上運行,請在客戶機 shell 提示符下輸入以下命令:
6. /usr/bin/rpcinfo -u server_name mount
7. /usr/bin/rpcinfo -u server_name portmap
/usr/bin/rpcinfo -u server_name nfs
如果守護程序在服務器運行,會返回以下響應:
program 100005 version 1 ready and waiting
program 100000 version 2 ready and waiting
program 100003 version 2 ready and waiting
程序號分別與命令對應,如前例中所示。如果沒有返回類似的響應,請在服務器控制臺上登錄服務器并按照 獲取 NFS 守護程序的當前狀態 中的指示信息檢查守護程序的狀態。
8. 驗證服務器中上的 /etc/exports 文件是否列出客戶機要安裝的文件系統名稱以及該文件系統是否已導出。輸入以下命令進行操作:
showmount -e server_name
該命令列出了由 server_name 當前導出的所有文件系統。
異步寫錯誤
當應用程序在 NFS 安裝文件系統中寫數據到一個文件時,寫操作由 biod 守護程序調度為異步處理。如果在數據實際寫入磁盤的同時在 NFS 服務器上出現錯誤,該錯誤會返回 NFS 客戶機,且 biod 守護程序在 NFS 數據結構內部保存錯誤。然后在下一次該應用程序調用 fsync 或 close 函數時,存儲的錯誤返回該應用程序。作為此類錯誤的結果,寫錯誤在程序關閉文件前不會通知給該應用程序。此事件的一個典型示例是當服務器上的文件系統已滿時,導致客戶機嘗試的寫失敗。
NFS服務器錯誤消息
以下部分解釋使用NFS時可能生成的錯誤代碼。
nfs_server 錯誤消息
您網絡上傳輸緩沖不足可能導致以下錯誤消息:
nfs_server: 壞發送回復
要增加傳輸緩沖區,請使用基于 Web 的系統管理器( wsm )或系統管理接口工具 (SMIT)快速路徑, smit commodev 。然后選擇您的適配器類型并增加傳輸緩沖區數。
mount 錯誤消息
一個遠程的安裝過程可能會以幾種方式出現故障。與安裝故障相關的錯誤消息如下:
mount: ... 已安裝
您嘗試安裝的文件系統已經安裝。
mount: ... 在 /etc/filesystems 中未找到
指定的文件系統或目錄名不能匹配。
如果您發出的 mount 命令帶有一個目錄或文件系統名稱但不是兩者,該命令在 /etc/filesystems 文件的文件系統或目錄字段中查找與參數匹配的項。如果 mount 命令找到類似以下的項:
/dancer.src:
dev=/usr/src
nodename = d61server
type = nfs
mount = false
則它會象已經在命令行輸入以下命令一樣執行安裝:
/usr/sbin/mount -n dancer -o rw,hard /usr/src /dancer.src
... 在 hosts 數據庫中不存在
在一個無網絡信息服務的網絡中,此消息表示 mount 命令中指定的主機不在 /etc/hosts 文件中。在一個運行 NIS 的網絡中,該消息表示 NIS 無法找到 /etc/hosts 數據庫中的主機名或機器上的 NIS ypbind 守護程序失敗。如果存在 /etc/resolv.conf 文件,而名稱服務器正用于主機名解析,則可能在 named 數據庫中有問題。請參閱 NFS 服務器上的名稱解析 。
檢查 mount 命令中的拼寫和語法。如果命令正確,您的網絡不運行 NIS 并只得到該主機名的本條消息,請檢查 /etc/hosts 文件中的項。
如果網絡正在運行 NIS,請在命令行輸入以下內容確保 ypbind 守護程序正在運行:
ps -ef
您應該在列表中看到 ypbnd 守護程序。嘗試使用 rlogin 命令遠程登錄到另一臺機器,或使用 rcp 命令來遠程復制一些東西到另一臺機器上。如果這仍然失敗,您的 ypbind 守護程序很可能已停止或掛起。
如果您僅獲得該主機名的本條消息,請檢查 NIS 服務器上的 /etc/hosts 項。
mount: ... 服務器無響應:端口映射失敗 — RPC 超時
您嘗試要從其安裝的服務器已當機或其端口映射器已停止或掛起。請嘗試重新啟動服務器以激活 inetd 、 portmap 和 ypbind 守護程序。
如果無法使用 rlogin 命令遠程登錄服務器但是服務器已啟動,請通過嘗試遠程登錄另一臺機器以檢查網絡連接。同時檢查服務器網絡連接。
mount: ... 服務器無響應:程序未注冊
這意味著 mount 命令到達了端口映射器,但是 rpc.mountd NFS 安裝守護程序沒有注冊。
mount: 拒絕訪問 ...
您的機器名不在您正嘗試從服務器安裝的文件系統的導出列表中。
通過在命令行運行以下命令您能得到服務器導出的文件系統的列表:
showmount -e hostname
如果您希望的文件系統不在列表中,或您的機器名或網組名稱不在文件系統的用戶列表中,請登錄服務器并檢查 /etc/exports 文件中是否有正確的文件系統項。出現在 /etc/exports 文件中,但沒有出現在 showmount 命令的輸出中的文件系統名表示 mountd 守護程序出了故障。守護程序不能分析文件中的該行,它不能查找目錄,或此目錄名不是一個本地安裝的目錄。如果 /etc/exports 文件看上去正確并且您的網絡運行 NIS,請檢查服務器上的 ypbind 守護程序。它可能已終止或掛起。有關更多信息,請參閱 AIX 5L Version 5.2 Network Information Services (NIS and NIS+) Guide 。
mount: ... : 拒絕許可權
此消息是服務器上部分認證失敗的通用指示。在前一個示例中,也可能您不在導出列表中,服務器不能識別您機器的 ypbind 守護程序,或服務器不接受您提供的身份。
請檢查服務器上的 /etc/exports 文件和(如果可用) ypbind 守護程序。在這種情況下,您可以僅使用 hostname 命令更改您的主機名并重試 mount 命令。
mount: ... : 不是一個目錄
遠程路徑或本地路徑不是一個目錄。請檢查命令中的拼寫并嘗試在兩個目錄上都運行。
mount: ... : 您不被允許
您必須有 root 許可權或是系統組的成員以在您的機器上運行 mount 命令,因為它會影響該機器上所有用戶的文件系統。僅允許 root 用戶和系統組的成員進行 NFS 安裝和卸裝安裝。
識別 NFS 緩慢訪問時間的原因
如果訪問遠程文件異常緩慢,請確保訪問時間沒有被失控守護程序、壞的 tty 行或類似的錯誤所禁止。
檢查進程
在服務器上的命令行輸入以下命令:
ps -ef
如果服務器似乎運行正常且別的用戶得到及時的響應,請確保 biod 守護程序正在運行。請嘗試以下的步驟:
1. 請運行 ps -ef 命令并在顯示中尋找 biod 守護程序。
如果它們沒有運行,請繼續步驟 2 和步驟 3。
2. 通過發出以下命令停止 biod 守護程序。
stopsrc -x biod -c
3. 通過發出以下命令啟動 biod 守護程序:
startsrc -s biod
要確定是否一個或多個 biod 守護程序沒有響應,當用戶懷疑一個或多個 biod 守護程序掛起時可以運行幾次 nfsstat -c 。如果遠程進程呼叫(RPC)客戶機讀或寫數中沒有明顯的更改,則一個或多個 biod 守護程序沒有執行它們的任務。您只能確定一個或多個 biod 守護程序處于非激活狀態;但不能確定哪一個是處于非激活狀態。
檢查網絡連接
如果 biod 守護程序正在工作,請檢查網絡連接。 nfsstat 命令確定是否正在丟信息包。使用 nfsstat -c 和 nfsstat -s 命令來確定是否客戶機或服務器正在重新發送大的數據塊。信息包丟失或服務器繁忙容易導致重發。重發率在百分之五或以上就認為是高。
重新發送的可能性可以通過更改通信適配器傳輸隊列參數來減少。 系統管理接口工具 (SMIT)可以用來更改這些參數。
下面是給 NFS 服務器的推薦值。
通信適配器***傳輸單元(MTU)和傳輸隊列大小
適配器MTU傳輸隊列
令牌環
4Mb
16Mb1500
3900
1500
850050
40(如果 nfsstat 命令超時請增加。)
40(如果 nfsstat 命令超時請增加)
40(如果 nfsstat 命令超時請增加。)
以太網150040(如果 nfsstat 命令超時請增加)
每個令牌環速度的較大
MTU 值會減少處理器使用并顯著提升讀/寫操作。
注:
1. 如果重新發送持續,則請將這些值應用于 NFS 客戶機。
2. 網絡上所有節點必須使用相同 MTU 大小。
設置 MTU 大小
要設置 MTU 大小,請使用基于 Web 的系統管理器( wsm )或 SMIT 快速路徑 smit chif 。請選擇相應的適配器并在“***的 IP 包尺寸”字段中輸入一個 MTU 值。
ifconfig 命令可被用來設置 MTU 大小(且設置 MTU 大小為 8500 時 必須 使用)。 ifconfig 命令的格式是:
ifconfig tr n NodeName up mtu MTUSize
其中 tr n 是您的適配器名稱,例如 tr0。
另一種設置 MTU 大小的方法把 ifconfig 命令和 SMIT 組合。
1. 為令牌環將 ifconfig 命令(如前例中所示)添加到 /etc/rc.bsdnet 文件。
2. 輸入 smit setbootup_option 快速路徑。將“使用 BSD 風格”字段切換到 是 。
設置傳輸隊列大小
通信適配器傳輸隊列大小由 SMIT 設置。輸入 smit chgtok 快速路徑,選擇相應的適配器,然后在“傳輸”字段輸入一個隊列大小。
修正掛起的程序
如果在與文件相關工作期間程序掛起,NFS 服務器可能已停止。在這種情況下,可能顯示以下錯誤消息:
NFS服務器 hostname 沒有響應,仍在嘗試
NFS服務器(hostname)已當機。這表示 NFS 服務器、網絡連接或 NIS 服務器有問題。
如果您的機器完全掛起,請檢查已從其安裝文件系統的服務器。如果一臺或多臺服務器當機,請不用擔心。當服務器重新啟動時,程序會自動繼續。沒有文件會破壞。
如果一個軟安裝服務器死機,別的工作不受影響。當嘗試訪問軟安裝的遠程文件時,超時的程序會失敗并發出 errno 信息,但是您仍然可以訪問您其它的文件系統。
如果所有服務器正在運行,請確定是否正在運行同一服務器其它用戶也有問題。超過一臺有服務錯誤的機器表示服務器上的 nfsd 守護程序有問題。在這種情況下,請登錄到服務器并運行 ps 命令來察看是否 nfsd 守護程序正在運行并累積 CPU 時間。如果不是,您也許可以終止并重啟 nfsd 守護程序。如果不起作用,您必須重啟服務器。
如果其它系統似乎啟動并運行,請檢查您的網絡連接和服務器連接。
#p#許可和認證方案
有時,安裝已成功的建立后,會出現讀、寫或創建遠程文件或目錄的問題。這些困難通常是由于許可或認證問題引起的。許可和認證問題的原因根據是否使用 NIS 和指定安全安裝而變化。
最簡單的情況出現在指定了非安全安裝且沒有使用 NIS 的時候。在這種情況下,用戶標識(UID)和組標識(GID)只通過服務器 /etc/passwd 文件和客戶機 /etc/group 文件映射。在該方案中,一個名叫 B 的要在客戶機和服務器上都識別為 B 用戶,用戶 B 必須在 /etc/passwd 文件中有相同的 UID 號。下面是一個這樣可能如何導致問題的示例:
用戶 B 在客戶機 foo 上的 uid 是 200。
用戶 B 在服務器 bar 上的 uid 是 250。
用戶 G 在服務器 bar 上的 uid 是 200。
/home/bar 目錄從服務器 bar 安裝到客戶機 foo。如果用戶 B 正編輯在客戶機 foo 上的 /home/bar 遠程文件系統上的文件,當保存文件時會發生混亂。
服務器 bar 認為文件屬于用戶 G,因為 G 在 bar 上的 UID 是 200。如果 B 通過使用 rlogin 命令直接登錄到 bar,則其可能無法訪問剛才在遠程安裝的文件系統上工作時創建的文件。然而 G,可以這樣做,因為機器根據 UID 而不是名稱仲裁許可權的。
該問題唯一的***解決方案是在兩臺機器上重新分配一致的 UID。例如,在服務器 bar 上給 B UID 200 或在客戶機 foo 上給它 250。然后需要對 B 的這些文件運行 chown 命令,以使它們與相應機器上的新標識匹配。
由于在網絡中維護所有機器 UID 和 GID 映射一致的問題,通常用 NIS 或 NIS+ 來執行相應的映射以避免此類問題。有關更多信息,請參閱 AIX 5L Version 5.2 Network Information Services (NIS and NIS+) Guide 。
NFS服務器上的名稱解析
當一個 NFS 服務器服務一個安裝請求時,它查找產生請求的客戶機的名稱。服務器接管客戶機網際協議(IP)地址并查找匹配該地址的相應主機名。一旦找到主機名,服務器會在導出列表中查找請求的目錄并在目錄的訪問列表中檢查客戶機名稱是否存在。如果存在客戶機項且該項完全匹配從名稱解析返回的內容,則通過此部分安裝認證。
如果服務器不能執行 IP 地址到主機名解析,則服務器拒絕安裝請求。服務器必須能找到產生安裝請求的客戶機 IP 址的某個匹配。如果目錄已導出為所有客戶機訪問,則服務器仍然必須能執行逆向名稱查找以允許安裝請求。
服務器也必須能查找客戶機的正確名稱。例如,如果在 /etc/exports 文件中已存在類似以下的一個項:
/tmp -access=silly:funny
則以下相應的項存在于 /etc/hosts 文件中:
150.102.23.21 silly.domain.name.com
150.102.23.52 funny.domain.name.com
請注意名稱是不完全對應的。當服務器查找主機 silly 和 funny 的 IP 地址到主機名匹配時,字符串名稱與導出訪問列表中的項不完全匹配。這種類型的名稱解析問題通常在將 named 守護程序用于名稱解析時發生。大多數 named 守護程序數據庫具有主機的全域名的別名,以使用戶在引用主機時不必輸入全名。即使存在別名的主機名到 IP 地址項,逆向查找可能不存在。逆向名稱查找的數據庫(IP 地址到主機名)通常具有包含該主機的 IP 地址和全域名(不是別名)。有時導出項以較短的別名創建,當客戶機嘗試安裝時會引起問題。
NFS結構中組數的限制
在使用 NFS V3.2 的系統上,用戶不可能成為超過 16 個組的成員而不導致復雜化。 (組由 groups 命令定義。)如果一個用戶是 17 個或更多組的成員,且用戶嘗試訪問第 17 個(或更大)組擁有的文件時,系統將不允許文件讀取或復制。為了允許用戶訪問文件,請重排列組的次序。
從具有先前版本 NFS 的 NFS 服務器安裝
當從早于 NFS V3 的服務器安裝文件系統到 NFS V3 客戶機時,當客戶機上執行安裝的用戶是超過八個組的成員時會發生問題。一些服務器不能正確處理這種情況并拒絕安裝請求。解決方案是將用戶的組員身份更改為少于八個然后重試安裝。以下是這種組問題的特征錯誤消息:
RPC: Authentication error; why=Invalid client credential
沒有裝載NFS內核擴展而發生的問題
有些NFS命令在NFS內核擴展沒有裝入的情況下不能正確執行。具有這些相關性的一些命令有: nfsstat 、 exportfs 、 mountd 、 nfsd 和 biod 。當 NFS 安裝在系統上時,內核擴展存放在 /usr/lib/drivers/nfs.ext 文件中。然后當配置系統文件時,該文件隨后裝入為 NFS 內核擴展。進行該內核擴展的腳本裝入 /etc/rc.net 文件。在腳本中完成了許多別的東西,其中之一用來裝入 NFS 內核擴展。請注意傳輸控制協議/網際協議(TCP/IP)內核擴展應該在裝入 NFS 內核擴展之前裝入。
注:
gfsinstall 命令是用于在系統初始啟動時將 NFS 內核擴展裝入內核的命令。每次系統啟動時這條命令可以運行超過一次而并不會導致問題。當前隨系統提供了 gfsinstall 命令,該命令用于 /etc/rc.net 和 /etc/rc.nfs 文件中。不需除去這些調用中的任何一個。

















