Debian下NFS安裝及配置
2008-11-29 20:47:02
分類: 系統(tǒng)運(yùn)維
本文主要用以簡(jiǎn)單快速的實(shí)現(xiàn)NFS的安裝和配置。 (這里有關(guān)于NFS比較詳細(xì)的介紹。 http://www./2004/10-9/195838.html ) NFS(Network File System, 網(wǎng)絡(luò)文件系統(tǒng))可以通過(guò)網(wǎng)絡(luò)將分享不同主機(jī)(不同的OS)的目錄——可以通過(guò)NFS掛載遠(yuǎn)程主機(jī)的目錄, 訪問(wèn)該目錄就像訪問(wèn)本地目錄一樣! 1。安裝: $sudo aptitab instab nfs-kenrnel-server (nfs-common -NFS support files common to client and server, 會(huì)自動(dòng)安裝) (nfs-common和nfs-kernel-server都依賴于portmap,portmap會(huì)自動(dòng)安裝) 這樣服務(wù)端安裝完畢。 (客戶端可安裝nfs-client,) 2.配置: 首先配置portmap: $sudo vi /etc/hosts.allow 加入: ### NFS DAEMONS portmap: 192.168.0. lockd: 192.168.0. u家bitscn.net rquotad: 192.168.0. mountd: 192.168.0. statd: 192.168.0. (同樣可配置/etc/hosts.deny 把上述全部相應(yīng)的改為 :All ,這樣可實(shí)現(xiàn)允許+禁止的有效定制) $sudo vi /etc/default/portmap 將 -i 127.0.0.1 注釋掉。 $sudo /etc/init.d/portmap restart 重啟portmap daemon. 然后配置NFS: $sudo vi /etc/exports (NFS掛載目錄及權(quán)限由/etc/exports文件定義,NFS核心配置文件!) 示例: /home/xxx/myShare 192.168.0.*(rw,sync,no_root_squash) (若更改了/etc/exports, 運(yùn)行 $sudo exportfs -r 更新) $sudo /etc/init.d/nfs-kernel-server restart (可以到/var/log/messages里面查看是否正確激活) $sudo showmount -e 查看NFS server的export list. 3. 測(cè)試NFS $sudo mount 192.168.0.123:/home/alyan/share /mnt/nfs_test 運(yùn)行 $ df 看看結(jié)果 $sudo umount /mnt/nfs_test 4.NFS客戶端的設(shè)定 #mount -t nfs hostname(orIP):/directory /mountpoint 搞定,就這么簡(jiǎn)單。 嵌入式linux內(nèi)核應(yīng)該支持NFS客戶端: 內(nèi)核設(shè)置時(shí),選擇如下: File system--> Network File Systems--> 選中NFS System support和Provide NFSvs client support,然后保存退出,重新編譯內(nèi) 核,將生成的zImage重新下載到target board。 1.2.2 在target board的linux shell下,執(zhí)行下列命令來(lái)進(jìn)行NFS共享目錄的掛載。 #mkdir /mnt/nfs #mount -o nolock -t nfs severip:/home/lqm /mnt/nfs #ls /mnt/nfs 由于非常多嵌入式設(shè)備的根文件系統(tǒng)中不帶portmap,所以一般都使用-o nolock參數(shù),即 不使用NFS文件鎖,這樣就能避免使用portmap。如果順利,在/mnt/nfs下,就能看到linu x server的共享目錄下的內(nèi)容了,而且兩個(gè)目錄內(nèi)的修改是同步的。 nfs: -o nolock選項(xiàng)! ----------------------------------------------------------------------- 附1: 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能夠方便地使各unix-like系統(tǒng)之間實(shí)現(xiàn)共享。 但如果需要在unix-like和windows系統(tǒng)之間共享,使用samba. 附2: exportfs的用法 如果我們修改了/etc/exports后,并不需要重啟nfs服務(wù),只要用exportfs重新掃描一次/etc/exports,并且重新加載即可 語(yǔ)法: exportfs [-aruv] -a: 全部掛載(或卸載) /etc/exports檔案內(nèi)的設(shè)定 -r: 重新掛載/etc/exports里面的設(shè)定,也同步的更新/etc/exports和/var/lib/nfs/xtab里面的內(nèi)容 -u:卸載某一目錄 -v:在export的時(shí)候,將分享的目錄顯示到熒屏上. 例子 #exportfs -rv //重新export一次 #exportfs -au //全部卸載 showmount命令 語(yǔ)法: showmount [-ae] hostname -a: 顯示目前主機(jī)與client所連上來(lái)的使用目錄的狀態(tài) -e: 顯示hostname的/etc/exports里面共享的目錄 查看激活的portnumber #netstat -utln nfs 自己所開(kāi)啟的 port ,就是那個(gè) 2049 的 port 。就是 NFS 主要產(chǎn)生的 port NFS server 在前面我們就提過(guò)了,他是 RPC server 的一種,而 NFS 由于提供了多個(gè) program ( 例如 rpc.mountd, rpc.rquotad, rpc.nfsd... ) ,因此就需要激活多個(gè) port 了!而且這些 port 是『隨機(jī)產(chǎn)生的』,也就是那個(gè) port number 不會(huì)是固定的!每次 restart nfs 都會(huì)得到不一樣的 port number 呢!那么 Client 端怎么知道要連接上那個(gè) port 來(lái)呼叫需要的 program 呢?呵呵!那就是 sunrpc ( port 111 ) 那個(gè) portmap 服務(wù)所產(chǎn)生的 port number 的功用啦!Client 會(huì)先連接到 sunrpc 那個(gè) port 去知道應(yīng)該到那個(gè) port 去呼叫所需要的程序!所以, rpc.xxxx 等之類的 daemon 自然就不需要有固定的 port number ! 附3 可能出問(wèn)題的地方: 1.權(quán)限的設(shè)定不符合 2.忘記了激活portmap,此時(shí)會(huì)報(bào)錯(cuò): mount: RPC: Port mapper failure - RPC: Unable to receive 或者 mount: RPC: Program not registered 那么,啟動(dòng)portmap,并且重新啟動(dòng)nfs #service portmap start #service nfs restart 3.被防火墻搞掉 重新設(shè)置防火墻,包括iptables與TCP_Wrappers,因?yàn)榧せ盍藀ortmap,所以port 111必須提供出去.因此在iptables rules中,要增加: iptables -A INPUT -p TCP --dport 111 -j ACCEPT iptables -A INPUT -p UDP --dport 111 -j ACCEPT 如果還不行,那就是TCP_Wrappers的問(wèn)題,檢查/etc/hosts.deny,如果有一行是: ALL: ALL: deny 那就必須在/etc/hosts.allow中增加: portmap: ALL: allow 如果我們的NFS針對(duì)內(nèi)部網(wǎng)絡(luò)開(kāi)發(fā),對(duì)于外部網(wǎng)絡(luò)只對(duì)學(xué)術(shù)網(wǎng)絡(luò)開(kāi)發(fā)(140.0.0.0/8),可以: iptables -A INPUT -i eth0 -p TCP -s 192.168.0.0/24 --dport 111 -j ACCEPT iptables -A INPUT -i eth0 -p UDP -s 192.168.0.0/24 --dport 111 -j ACCEPT iptables -A INPUT -i eth0 -p TCP -s 140.0.0.0/8 --dport 111 -j ACCEPT iptables -A INPUT -i eth0 -p UDP -s 140.0.0.0/8 --dport 111 -j ACCEPT 還可以使用TCP_Wrappers,在/etc/hosts.allow里面規(guī)定連上 NFS 主機(jī)的主機(jī) IP 與名稱,例如 #vi /.etc/hosts.allow portmap: 192.168.0.0/255.255.255.0 :allow portmap: 140.113.23.23 :allow portmap: .sdu.edu.cn :allow RPC Server的相關(guān)命令 rpcinfo #rpcinfo -p hostname(orIP) 要注意的問(wèn)題: 需 要注意的是,由于 NFS 使用的這個(gè) RPC 在 client 端連上主機(jī)時(shí),那么你的主機(jī)想要關(guān)機(jī),那可就會(huì)成為『不可能的任務(wù)』!我還不知道正確的原因是什么,但是,如果你的 Server 上面還有 Client 在聯(lián)機(jī),那么你要關(guān)機(jī),可能得要等到數(shù)個(gè)鐘頭才能夠正常的關(guān)機(jī)成功!嗄!真的假的!不相信嗎?不然您自個(gè)兒試試看! ^_^!所以啰,建議您的 NFS Server 想要關(guān)機(jī)之前,能更先『關(guān)掉 portmap 與 nfs 』這兩個(gè)東西!如果無(wú)法正確的將這兩個(gè) daemons 關(guān)掉,那么先以 netstat -utlp 找出 PID ,然后以 kill 將他關(guān)掉先!這樣才有辦法正常的關(guān)機(jī)成功喔!這個(gè)請(qǐng)?zhí)貏e特別的注意呢! 在TurboLinux8.0 for AMD64 (kernel 2.4.21-4smp),mount NFS時(shí)候報(bào)錯(cuò)為: portmap: server localhost not responding, timed out 解決辦法: mount -t nfs -o nolock node1:/public /public 即增加-o nolock參數(shù),原因: Unfsd doesn't support NLM locking, and it's causing the lockd daemon to be started (which again requires the portmapper to be installed etc.) |
|