如何組建和設(shè)定Ubuntu NFS服務(wù)器
對(duì)于嵌入式平臺(tái)來(lái)說(shuō),最為常用的就是Debian/Ubuntu系統(tǒng)了。那么想要在這個(gè)系統(tǒng)上實(shí)現(xiàn)網(wǎng)絡(luò)文件共享,就需要Debian/Ubuntu NFS服務(wù)器進(jìn)行配置。在默認(rèn)狀態(tài)下我們要對(duì)其進(jìn)行安裝。下面看一下具體的Debian/Ubuntu NFS服務(wù)器配置過(guò)程。
一般而言, 使用nfs能夠方便地使各unix-like系統(tǒng)之間實(shí)現(xiàn)共享.原理 :NFS運(yùn)行在SUN的RPC(Remote Procedure Call, 遠(yuǎn)程過(guò)程調(diào)用)基礎(chǔ)上, RPC定義了一種與系統(tǒng)無(wú)關(guān)的方法來(lái)實(shí)現(xiàn)進(jìn)程間通信. 由此, NFS server也可以看作是RPC server.正因?yàn)镹FS是一個(gè)RPC服務(wù)程序, 所以在使用它之前, 先要映射好端口——通過(guò)portmap設(shè)定. 比如: 某個(gè)NFS client發(fā)起NFS服務(wù)請(qǐng)求時(shí), 它需要先得到一個(gè)端口(port). 所以它先通過(guò)portmap得到port number. (不僅NFS, 所有的RPC服務(wù)程序啟動(dòng)之前, 都需要設(shè)定好portmap)
與NFS相關(guān)的幾個(gè)文件, 命令:
1, /etc/exports
對(duì)NFS卷的訪問(wèn)是由exports來(lái)批準(zhǔn), 它枚舉了若干有權(quán)訪問(wèn)NFS服務(wù)器上文件系統(tǒng)的主機(jī)名.
2, /sbin/exportfs
維護(hù)NFS的資源共享. 可以通過(guò)它重新設(shè)定 /etc/exports 的共享目錄, 卸載NFS Server共享的目錄或者重新共享等.
3, /usr/sbin/showmount
用在 NFS Server 端,而 showmount 則主要用在 Client 端. showmount 可以用來(lái)查看 NFS 共享的目錄資源.
4, /var/lib/nfs/xtab
NFS的記錄文檔: 通過(guò)它可以查看有哪些Client 連接到NFS主機(jī)的記錄.
下面這幾個(gè)并不直接負(fù)責(zé)NFS, 實(shí)際上它們負(fù)責(zé)所有的RPC
5, /etc/default/portmap
實(shí)際上, portmap負(fù)責(zé)映射所有的RPC服務(wù)端口, 它的內(nèi)容非常非常之簡(jiǎn)單(后面詳述)
6, /etc/hosts
設(shè)定拒絕\允許portmap服務(wù)的主機(jī)
安裝Ubuntu NFS服務(wù)器:
Debian/Ubuntu NFS服務(wù)器的默認(rèn)狀態(tài)是沒(méi)有安裝的,首先要安裝NFS服務(wù)程序:
$ sudo apt-get install nfs-kernel-server
$ sudo apt-get install nfs-commmon
(安裝nfs-kernel-server時(shí),apt會(huì)自動(dòng)安裝nfs-common和portmap)
這樣,宿主機(jī)就相當(dāng)于NFS Server.
在開(kāi)發(fā)系統(tǒng)上,同樣地,目標(biāo)系統(tǒng)作為NFS的客戶(hù)端,需要安裝NFS客戶(hù)端程序.如果是Debian/Ubuntu系統(tǒng),則需要安裝nfs-common.
$ sudo apt-get install nfs-commmon
注:nfs-common和nfs-kernel-server都依賴(lài)于portmap!
配置Ubuntu NFS服務(wù)器:
配置portmap$ sudo dpkg-reconfigure portmap , 對(duì)Should portmap be bound to the loopback address? 選N.
Ubuntu NFS服務(wù)器配置/etc/hosts.deny
(禁止任何host(主機(jī))能和你的NFS服務(wù)器進(jìn)行NFS連接),加入:
### NFS DAEMONS
portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL
Ubuntu NFS服務(wù)器配置/etc/hosts.allow
允許那些你想要的主機(jī)和你的NFS服務(wù)器建立連接.下列步驟將允許任何IP地址以192.168.2開(kāi)頭的主機(jī)(連接到NFS服務(wù)器上),也可以指定特定的IP地址.參看man頁(yè) hosts_access(5), hosts_options(5).
### NFS DAEMONS
portmap: 59.64.
lockd: 59.64.
rquotad: 59.64.
mountd: 59.64.
statd: 59.64.
/etc/hosts.deny 和 /etc/hosts.allow 設(shè)置對(duì)portmap的訪問(wèn). 采用這兩個(gè)配置文件有點(diǎn)類(lèi)似"mask"的意思. 先在/etc/hosts.deny中禁止所有用戶(hù)對(duì)portmap的訪問(wèn). 再在/etc/hosts.allow 中允許某些用戶(hù)對(duì)portmap的訪問(wèn).
運(yùn)行 $ sudo /etc/init.d/portmap restart 重啟portmap daemon.
Ubuntu NFS服務(wù)器配置/etc/exports:
NFS掛載目錄及權(quán)限由/etc/exports文件定義,/etc/exports實(shí)際上就是nfs服務(wù)器的核心配置文件了.
比如我要將我的home目錄中的/home/warmbupt/arm/nfs目錄讓59.64.195.97的IP共享, 則在該文件末尾添加下列語(yǔ)句:
/home/warmbupt/arm/nfs 59.64.195.97(rw,sync,no_root_squash)
以上Ubuntu NFS服務(wù)器配置的說(shuō)明:
59.64.195.97的NFS客戶(hù)端能夠共享NFS服務(wù)器 /home/warmbupt/arm 目錄內(nèi)容.且有讀,寫(xiě)權(quán)限, 并且該用戶(hù)進(jìn)入 /home/warmbupt/arm目錄后的身份為root
***加上sync, 否則 $ sudo exportfs -r 時(shí)會(huì)給出警告, sync是NFS的默認(rèn)選項(xiàng).
修改目錄權(quán)限 :chmod 777 -R /home/warmbupt/arm/nfs
運(yùn)行 $ showmount -e 查看NFS server的export list.若更改了/etc/exports, 運(yùn)行 $ sudo exportfs -r 更新
運(yùn)行 $ sudo /etc/init.d/nfs-kernel-server restart 重啟nfs服務(wù))
$ sudo iptables -F
測(cè)試NFS:
可以嘗試一下掛載本地磁盤(pán)(假設(shè)本地主機(jī)IP地址為:59.64.195.97,將/home/warmbupt/arm/nfs 掛載到/mnt)
$ sudo mount 59.64.195.97:/home/warmbupt/arm/nfs /mnt
運(yùn)行 $ df 看看結(jié)果
$ sudo umount /mnt
如果 出現(xiàn) permission deny:
試一試 :sudo mount -o nolock -t nfs 59.64.195.97:/home/warmbupt/arm/nfs /mnt搞定.