NFS 修理心得

因為我們最重要的 NFS server 突然不通了, 於是我試著將它修復.

第一步是檢查網路, 結果網路是好的.

第二步, 應該沒必要, 我檢查了硬碟 /sbin/fsck -Aa /dev/hda1, 結果找到一些 inode, iblock 的錯誤. 對了! 要先 umount /dev/hda1 再 fsck, 不然會有可怕的事發生. 做完 fsck 之後重開機.

第三步, 我發現關機的時候, NFS 就不能正常結束. 於是查了 NFS 的原理.

http://www.redhat.com/docs/manuals/enterprise/RHEL-3-Manual/ref-guide/ch-nfs.html

The stateless UDP connection under normal conditions minimizes network traffic, as the NFS server sends the client a cookie after the client is authorized to access the shared volume. This cookie is a random value stored on the server’s side and is passed along with RPC requests from the client. The NFS server can be restarted without affecting the clients and the cookie remains intact. However, because UDP is stateless, if the server goes down unexpectedly, UDP clients continue to saturate the network with requests for the server. For this reason, TCP is the preferred protocol when connecting to an NFSv3 server.

藍色字的部分提出了一個可能的問題. 因為我們很多個人一直在做實驗, 重開機,  client 一直在反覆 mount server, 而且都是用前幾次的 cookie. 當 server 被不正常地關機之後, 它就不再認得以前的 cookie, 因此雙方就無法連上了.

NFS 其實是透過 RPC (remote procedure call) 去聯絡 client 和 server, 但 RPC 需要 portmap 來管制. 查看 portmap 有沒有 work 是用這個指令:

rpcinfo -P

理論上會看到 NFS 用了 2049 這個 port, protocol 基本上有 UDP, 如果是 NFSv3, 還會有 TCP.

查看 portmap 有沒有在動, 用

/sbin/service portmap status

它如果說正在 running 那就對了.

接著將 NFS 打開, 重新打開, 或是看到沒開才開, 可以分別下不同的參數:

/sbin/service nfs start

/sbin/service nfs restart

/sbin/service nfs condrestart

如果只要載入, 不需要跑

/sbin/service nfs reload

關掉 NFS

/sbin/service nfs stop

以上應該都是 root 權限才能做的事.

2008/6/17 補充

此次修改 etc/exports 之後, 再啟動 nfs service, 意外地被抱怨.

[root@audio-server etc]# cd /sbin/
[root@audio-server sbin]# ./service nfs condrestart
Shutting down NFS mountd:                                 [  OK  ]
Shutting down NFS daemon:                                [  OK  ]
Shutting down NFS quotas:                                  [  OK  ]
Shutting down NFS services:                                [  OK  ]
Starting NFS services:  exportfs: /etc/exports:7: syntax error: bad option list
[FAILED]
Starting NFS quotas:                                       [  OK  ]
Starting NFS daemon:                                     [  OK  ]
Starting NFS mountd:                                      [  OK  ]

結果只是 rw, 多了一個空格, *(rw, insecure,sync,no_root_squash), 這樣就會錯了!

 

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

%d 位部落客按了讚: