在UBUNTU下進行NFS服務器配置,雖說有實驗指導書,但由於使用的LINUX版本不一樣,一個簡單的NFS服務器配置都花了一天半的時間,網上很多方法都嘗試了,沒有效果。終於找到了一個可以解決的辦法,特意記錄下來,或許能幫助遇到這個問題的朋友。
首先,要把主機的防火牆關掉。並把主機當作服務器,讓開發板作爲客戶端。
NFS服務器配置
NFS用於Linux主機訪問網絡中其他Linux主機上的共享資源。NFS的原理是在客戶端上通過網絡將遠程主機共享文件系統以掛載(Mount)的方式加入本機的文件系統,之後的操作就如同在本機上一樣。
NFS服務器(宿主機)
1.安裝NFS
Ubuntu上默認是沒有安裝NFS服務器的,首先要安裝NFS服務程序:
$ sudo apt-get install nfs-kernel-server
(安裝nfs-kernel-server時,apt會自動安裝nfs-common和portmap)
這樣,宿主機就相當於NFS Server。
2. 配置NFS
1)配置portmap
方法1: 編輯/etc/default/portmap, 將 -i 127.0.0.1 去掉.
方法2:
$ sudo dpkg-reconfigure portmap
對Should portmap be bound to the loopback address? 選N.
2)配置/etc/hosts.deny
$ sudo gedit /etc/hosts.deny
(禁止任何host(主機)能和你的NFS服務器進行NFS連接),加入:
### NFS DAEMONS
portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL
3)配 置/etc/hosts.allow
$ sudo gedit /etc/hosts.allow
允許那些你想要的主機和你的NFS服務器建立連接。下列步驟將允許任何IP地址以192.168.1開頭的主機(連接到NFS服務器上),也可以指定特定的IP地址。
### NFS DAEMONS
portmap: 192.168.1.
lockd: 192.168.1.
rquotad: 192.168.1.
mountd: 192.168.1.
statd: 192.168.1.
起用保護機制
上面設置了只要在192.168.1.*這個網段的所有IP地址用戶都可以訪問共享目錄,但我只想讓一個IP地址訪問,比如 192.168.1.101那麼就可以這樣設置了。
可以通過設定/etc/hosts.deny和/etc/hosts.allow文件來限制網絡服務的存取權限。
***/etc/hosts.deny***
portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL
***/etc/hosts.allow***
portmap:192.168.1.101
lockd:192.168.1.101
mountd:192.168.1.101
rquotad:192.168.1.101
statd:192.168.1.101
同時使用這兩個文件就會使得只有ip爲192.168.1.101的機器使用NFS服務。你的target board的ip地址設定爲192.168.1.101,這樣就可以了。
/etc/hosts.deny 和 /etc/hosts.allow 設置對portmap的訪問. 採用這兩個配置文件有點類似"mask"的意思. 現在/etc/hosts.deny中禁止所有用戶對portmap的訪問. 再在/etc/hosts.allow 中允許某些用戶對portmap的訪問。
4)重啓portmap daemon
每次對/etc/hosts.deny 和 /etc/hosts.allow兩文件的修改後都要重啓portmap daemon。不然修改無效。
$ sudo /etc/init.d/portmap restart
5)配置/etc/exports
NFS掛載目錄及權限由/etc/exports文件定義。
$sudo gedit /etc/exports
比如我要將我的home目錄中的/home/lin/NFSshare目錄讓192.168.1.*的IP共享, 則在該文件末尾添加下列語句:
/home/lin/NFSshare 192.168.1.*(rw,sync,no_root_squash)
然後保存退出。
/home/lin/NFSshare就表示共享目錄,當然,你可以隨便換成自己喜歡的目錄。
192.168.1.*:前面三位是你主機(NFS客戶端)的ip地址(本機終端ifconfig命令就可以獲得本機的ip地址)。
rw:讀/寫權限,只讀權限的參數爲ro;
sync:數據同步寫入內存和硬盤,也可以使用async,此時數據會先暫存於內存中,而不立即寫入硬盤。
no_root_squash:NFS 服務器共享目錄用戶的屬性,如果用戶是 root,那麼對於這個共享目錄來說就具有 root 的權限。
6)重啓nfs服務
$ sudo /etc/init.d/nfs-kernel-server restart
執行這個命令的時候可能會提示一些錯誤,如下:
* Stopping NFS kernel daemon [ OK ]
* Unexporting directories for NFS kernel daemon... [ OK ]
* Exporting directories for NFS kernel daemon... exportfs: /etc/exports [1]: Neither 'subtree_check' or 'no_subtree_check' specified for export "192.168.1.*:/home/lin/NFSshare".
Assuming default behaviour ('no_subtree_check').
NOTE: this default has changed since nfs-utils version 1.0.x
[ OK ]
* Starting NFS kernel daemon [ OK ]
我不知道具體原因,不用管,不影響後面的使用。
注意:每次對/etc/exports文件的修改,都要重啓一下nfs服務。
7)nfs服務器端測試
由於nfs服務器端默認是安裝了nfs客戶端(nfs-common)的,所以可以在服務器端掛載共享文件夾作測試
。
$sudo mount 192.168.1.100:/home/liu /mnt
192.168.1.100是nfs服務器端IP地址,可以在服務器端終端通過命令ifconfig獲得。
可能出現錯誤,解決辦法
重新$sudo gedit /etc/exports,將“ 192.168.1.* ”換成“*”,要注意就這一個星星哦!修改完之後不要忘了重啓一下nfs服務
$ sudo /etc/init.d/nfs-kernel-server restart
這樣修改之後,就可以看到/mnt文件下共享了/home/lin/NFSshare文件夾裏的內容。測試完畢,要卸載nfs的掛載
$sudo umount /umt