目標板掛載NFS方法及錯誤解決

kevinhg發表於2010-10-27

一、檢查nfs狀態

#service nfs status

二、在主機建立nfs共享資料夾:

#mkdir /nfsroot

#cat /etc/exports

/nfsroot 192.168.1.118(rw.sync,no_root_squash)

這裡建立了/nfsroot以用於nfs共享,並在/etc/exports檔案中將共享屬性IP設定為192.168.1.118(開發板的IP)的使用者可讀寫,並且由no_root_squash指定信任客戶端。

三、啟動主機nfs服務

#service nfs start

四、在開發板mount主機共享檔案

#mount 192.168.1.100:/nfsroot  /mnt/

無任何提示表示成功,可以操作/mnt目錄,cpmv檔案等。

可能出現的錯誤提示:

# mount -t nfs 192.168.1.249:/appdata /mnt

portmap: server localhost not responding, timed out

RPC: failed to contact portmap (errno -5).

portmap: server localhost not responding, timed out

RPC: failed to contact portmap (errno -5).

lockd_up: makesock failed, error=-5

portmap: server localhost not responding, timed out

RPC: failed to contact portmap (errno -5).

mount: Mounting 192.168.1.249:/appdata on /mnt failed: Input/output error

可能原因:

nfs mount 預設選項包括檔案鎖,依賴於portmap提供的動態埠分配功能;

簡單的解決方法:kill 檔案鎖(lockd)或者mount -o nolock

上面說的檔案鎖具體是什麼原因,還沒有找到更好的解決辦法。

注意:主機防火牆有設定時,也可能導致目標板無法正常訪問,建議最好設定為無防火牆。

改用:mount -o nolock 192.168.1.100:/nfsroot /mnt 可解決。

編輯/etc/exports檔案,格式可以參考man exports,裡面有詳細的引數說明和示例。

如,要共享主機的/appdata目錄給目標板,具有讀寫功能,一般都指定使用者(root)來操作,否則預設會出現uidgid都是-2的數字(可以通過anonuidanongid來設定匿名操作的相關ID,或者用root_squash來設定root操作),最後寫出的exports樣子如下:

#cat /etc/exports

/appdata 192.168.1.*(rw,sync,no_root_squash)

root執行exportfs r,重新載入匯出內容,若修改了檔案exports,直接執行此命令即可;

啟動portmap服務,service portmap start ;(為什麼要這個?因為portmap定向RPC通訊資料流,若不執行portmap,則NFS客戶機無法找到從NFS伺服器共享的目錄。)

啟動nfs服務,service nfs start

注意:啟動目標板並連通網路後,首先檢視kernel自身是否支援nfs

cat /proc/filesystems

檢視其中是否有nfs一行,若沒有則表示核心不支援nfs,就需要重新編譯和燒核心;有則OK,接下來就可以直接mount操作。

相關文章