如何使用Linux下NFS網(wǎng)絡(luò)文件系統(tǒng)

本篇內(nèi)容主要講解“如何使用Linux下NFS網(wǎng)絡(luò)文件系統(tǒng)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“如何使用Linux下NFS網(wǎng)絡(luò)文件系統(tǒng)”吧!

十載的茶陵網(wǎng)站建設(shè)經(jīng)驗,針對設(shè)計、前端、開發(fā)、售后、文案、推廣等六對一服務(wù),響應(yīng)快,48小時及時工作處理。全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動調(diào)整茶陵建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)從事“茶陵網(wǎng)站設(shè)計”,“茶陵網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

0.什么是NFS(Network FileSystem)
    NFS 就是 Network FileSystem 的縮寫,最早之前是由 Sun 所發(fā)展出來的。他最大的功能就是可以透過網(wǎng)絡(luò),讓不同的機器、不同的操作系統(tǒng)、可以彼此分享個別的檔案 ( share file ),所以,也可以簡單的將他看做是一個 file server !這個 NFS Server 可以讓你的 PC 來將網(wǎng)絡(luò)遠程的 NFS 主機分享的目錄,掛載到本地端的機器當(dāng)中,所以,在本地端的機器看起來,那個遠程主機的目錄就好象是自己的 partition 一樣!
雖然 NFS 有屬于自己的協(xié)議與使用的 port number ,但是在資料傳送或者其它相關(guān)訊息傳遞的時候, NFS 使用的則是一個稱為遠程過程調(diào)用( Remote Procedure Call, RPC )的協(xié)議來協(xié)助 NFS 本身的運作!

1. NFS至少有兩個主要部分:一臺服務(wù)器和一臺(或者更多)客戶機??蛻魴C遠程訪問存放在服務(wù)器上的數(shù)據(jù)。為了正常工作,一些進程需要被配置并運行。
NFS服務(wù)器的安裝:
檢查linux系統(tǒng)中是否安裝了nfs-utils和portmap兩個軟件包 
(RHEL4系統(tǒng)默認已經(jīng)安裝了這兩個軟件包)
命令

代碼如下:

#rpm –q nfs-utils portmap


查看NFS服務(wù)器是否啟動:
命令

代碼如下:

#service nfs starus
#service portmap status


如果服務(wù)器沒有啟動,則開啟服務(wù)(默認服務(wù)下nfs沒有完全開啟)
命令

代碼如下:

#service nfs start
#service portmap start

2.RPC
    當(dāng)我們在使用某些服務(wù)來進行遠程聯(lián)機的時候,有些信息,例如主機的IP、服務(wù)的 port number、與對應(yīng)到的服務(wù)之 PID 等等,都需要管理與對應(yīng)!這些管理 port 的對應(yīng)與服務(wù)相關(guān)性的工作,就是這個 Remote Procedure Call, RPC 的任務(wù)了。NFS 本身的服務(wù)并沒有提供資料傳遞的協(xié)議,但是 NFS 卻能讓我們進行檔案的分享,這其中的原因,就是 NFS 使用到一些其它相關(guān)的傳輸協(xié)議!而這些傳輸?shù)膮f(xié)議,就是使用到這個所謂的 RPC 的功能啰!這也就是說, NFS 本身就是使用 RPC 的一個 program 就是了!說的更白話一點, NFS 也可以視作是一個 RPC server 啦!同時要注意到的是,在某些狀況中,不但跑 NFS 的 Server 需要激活 RPC 的服務(wù),連帶的,要掛載 NFS partition 的 Client 機器,也需要同步激活 RPC 才行!這樣 Server 端與 Client 端才能藉由 RPC 的協(xié)議來進行 program port 的對應(yīng)喔!NFS 主要在管理分享出來的目錄,而至于資料的傳遞,就直接將他丟給 RPC 的協(xié)議來運作就是了!

3.NFS 激活的 RPC daemons
  rpc.nfsd:這個 daemon 主要的功能就是在管理 Client 是否能夠登入主機的權(quán)限啦,其中還包含這個登入者的 ID 的判別
  rpc.mountd:這個 daemon 主要的功能,則是在管理 NFS 的檔案系統(tǒng)!當(dāng) Client 端順利的通過 rpc.nfsd 而登入主機之后,在他可以使用 NFS server 提供的檔案之前,還會經(jīng)過檔案使用權(quán)限 ( 就是那個 -rwxrwxrwx 與 owner, group 那幾個權(quán)限啦 ) 的認證程序!他會去讀 NFS 的設(shè)定檔 /etc/exports 來比對 Client 的權(quán)限,當(dāng)通過這一關(guān)之后, Client 就可以取得使用 NFS 檔案的權(quán)限啦!(注:這個也是我們用來管理 NFS 分享之目錄的使用權(quán)限與安全設(shè)定的地方哩)

4.NFS需要有兩個套件才行,分別是:
 nfs-utils
 就是提供 rpc.nfsd 及 rpc.mountd 這兩個 NFS daemons 與其它相關(guān) documents 與說明文件、執(zhí)行檔等的套件!這個就是 NFS 的主要套件
 portmap
 就如同剛剛提的到,我們的 NFS 其實可以被視為一個 RPC server program,而要激活任何一個 RPC server program 之前,我們都需要做好 port 的對應(yīng) ( mapping ) 的工作才行,這個工作其實就是『 portmap 』這個服務(wù)所負責(zé)的!也就是說,在激活任何一個 RPC server 之前,我們都需要激活 portmap 才行呢!那么這個 portmap 到底在干嘛呢?就如同這個服務(wù)的名稱,哈哈!就是作 port 的 mapping 啊!舉個例子來說:當(dāng) Client 端嘗試來使用 RPC server 所提供的服務(wù)時,由于 Client 需要取得一個可以連接的 port 才能夠使用 RPC server 所提供的服務(wù),因此, Client 首先就會去跟 portmap 講『喂!可不可以通知一下,給我個 port number ,好讓我可以跟 RPC 聯(lián)絡(luò)吧!』這個時候 portmap 就自動的將自己管理的 port mapping 告知 Client ,好讓他可以連接上來 server 呢!所以啰:『激活 NFS 之前,請先激活 portmap !』

5.NFS server端的設(shè)定:
 a)/etc/exports
 分享的目錄 主機名稱1或IP1(參數(shù)1,參數(shù)2) 主機名稱2或IP2(參數(shù)3,參數(shù)4)
 b).參數(shù)
 rw: 可擦寫的權(quán)限
 ro: 只讀的權(quán)限
 no_root_squash: 登入 NFS 主機使用分享目錄的使用者,如果是 root 的話,那么對于這個分享的目錄來說,他就具有 root 的權(quán)限!這個項目『極不安全』,不建議使用!
 root_squash: 在登入 NFS 主機使用分享之目錄的使用者如果是 root 時,那么這個使用者的權(quán)限將被壓縮成為匿名使用者,通常他的 UID 與 GID 都會變成 nobody 那個身份;
 all_squash: 不論登入 NFS 的使用者身份為何,他的身份都會被壓縮成為匿名使用者,通常也就是 nobody 啦!
 anonuid: 前面關(guān)于 *_squash 提到的匿名使用者的 UID 設(shè)定值,通常為 nobody,但是你可以自行設(shè)定這個 UID 的值!當(dāng)然,這個 UID 必需要存在于你的 /etc/passwd 當(dāng)中!
 anongid: 同 anonuid ,但是變成 group ID 就是了
 sync: 資料同步寫入到內(nèi)存與硬盤當(dāng)中
 async: 資料會先暫存于內(nèi)存當(dāng)中,而非直接寫入硬盤
 
6.設(shè)置的實例:
 a)/tmp *(rw,no_root_squash)  //*號表示所有的IP都可以訪問
 b)/tmp *(rw)
  /home/public 192.168.0.*(rw) *(ro)  //下面兩行作用一樣
  /home/public 192.168.0.0/24(rw) *(ro)
 c)/home/test 192.168.0.100(rw) //只對某部機器設(shè)置權(quán)限
 d)/home/linux *.linux.org(rw,all_squash,anonuid=40,anongid=40) //當(dāng)*.linux.org登陸此NFS主機,并且在/home/linux下面寫入檔案時,該檔案的所有人與所有組,就會變成/etc/passwd里面對應(yīng)的UID為40的那個身份的使用者了.
 
7.權(quán)限問題
假設(shè)/etc/exports里面的內(nèi)容為

代碼如下:


#vi /etc/exports
/tmp *(rw,no_root_squash)
/home/public 192.168.0.*(rw) *(ro)
/home/test 192.168.0.100(rw)
/home/linux *.linux.org(rw,all_squash,anonuid=40,anongid=40)


 假設(shè)我們在192.168.0.100這個client端登陸此NFS主機(192.168.0.2),那么
 情況一:在192.168.0.100的帳號為test這個身份,同時,NFS主機上也有test這個帳號
  a).由于NFS主機的/tmp權(quán)限為-rwxrwxrwt,所以我(test在192.168.0.100上)在/tmp下面具有存取的權(quán)限,并且寫入檔案的所有人為test.
  b).在/home/public中,由于我有讀寫的權(quán)限,如果NFS主機在/home/public這個目錄的權(quán)限對于test開放寫入的話,那么就可以讀寫,并且寫入檔案的所有人是test。如果NFS主機的/home/public對于test這個使用者并沒有開放寫入權(quán)限時,那就無法寫入,雖然/etc/exports里面是rw,也不起作用.
  c).在/home/test中,權(quán)限與/home/public有相同的狀態(tài),需要NFS主機的/home/test對于test有開放的權(quán)限.
  d).在/home/linux當(dāng)中,不論是何種的user,身份都會被變成UID=40的這個帳號
 情況二:如果我們在192.168.0.100的身份為test2,但是NFS主機卻沒有test2這個帳號時
  a).在/tmp下還是可以寫入,但是寫入的檔案所有人變成nobody.
  b).在/home/public與/home/test里面是否可以寫入,還需要看/home/public的權(quán)限而定,不過身份就被變成nobody了
  c)/home/linux下的身份還是變成UID=40的帳號.
 情況三:在192.168.0.100的身份為root
  a).在/tmp里面可以寫入,但是由于no_root_squash的參數(shù),改變了預(yù)設(shè)的root_squash的設(shè)定值,所以在/tmp寫入檔案的所有人為root了.
  b).在/home/public底下的身份被壓縮成了nobody,因為預(yù)設(shè)的屬性都具有root_squash,所以檔案所有人就變成了nobody.
  c)./home/test情況與/home/public相同.
  d)./home/linux中,root的身份也被壓縮成UID=40的那個使用者了.

8.啟動服務(wù)portmap,nfs

代碼如下:


#/etc/rc.d/init.d/portmap start

(or:

代碼如下:

#service portmap start

)

代碼如下:

#/etc/rc.d/init.d/nfs start

  (or:

代碼如下:

#service nfs start

)
 可以到/var/log/messages里面查看是否正確激活

9.exportfs的用法
 如果我們修改了/etc/exports后,并不需要重啟nfs服務(wù),只要用exportfs重新掃描一次/etc/exports,并且重新加載即可
 語法: exportfs [-aruv]
 -a: 全部掛載(或卸載) /etc/exports檔案內(nèi)的設(shè)定
 -r: 重新掛載/etc/exports里面的設(shè)定,也同步的更新/etc/exports和/var/lib/nfs/xtab里面的內(nèi)容
 -u:卸載某一目錄
 -v:在export的時候,將分享的目錄顯示到熒屏上.
 例子
 

代碼如下:


#exportfs -rv //重新export一次
#exportfs -au //全部卸載

10./var/lib/nfs/xtab里面可以查看每個目錄的分享權(quán)限(但是我怎么也沒有找到,靠,找到了,原來要有人mount上nfs后才會出現(xiàn)內(nèi)容),如:
/tmp    node3(ro,sync,wdelay,hide,secure,root_squash,no_all_squash,subtree_check,secure_locks,mapping=identity,anonuid=-2,anongid=-2)
 為什么anonuid=-2呢?呵呵!其實它說的是將 65536 - 2 的值,也就是 65534 的那個 UID 啦!對照一下 /etc/passwd ,你就會發(fā)現(xiàn),哇!原來那就是 nobody 的啦

11.showmount命令
 語法: showmount [-ae] hostname
 -a: 顯示目前主機與client所連上來的使用目錄的狀態(tài)
 -e: 顯示hostname的/etc/exports里面共享的目錄

12.查看激活的portnumber

代碼如下:


#netstat -utln


 nfs 自己所開啟的 port ,就是那個 2049 的 port 啦!就是 NFS 主要產(chǎn)生的 port NFS server 在前面我們就提過了,他是 RPC server 的一種,而 NFS 由于提供了多個 program ( 例如 rpc.mountd, rpc.rquotad, rpc.nfsd... ) ,因此就需要激活多個 port 了!而且這些 port 是『隨機產(chǎn)生的』,也就是那個 port number 不會是固定的啦!每次 restart nfs 都會得到不一樣的 port number 呢!那么 Client 端怎么知道要連接上那個 port 來呼叫需要的 program 呢?呵呵!那就是 sunrpc ( port 111 ) 那個 portmap 服務(wù)所產(chǎn)生的 port number 的功用啦!Client 會先連接到 sunrpc 那個 port 去知道應(yīng)該到那個 port 去呼叫所需要的程序!所以啰, rpc.xxxx 等之類的 daemon 自然就不需要有固定的 port number 啰!
 
 NFS客戶端的設(shè)定
 

代碼如下:


#mount -t nfs hostname(orIP):/directory /mountpoint

   搞定,就這么簡單
 為了擔(dān)心會不小心將 NFS 端掛進來的具有 SUID 權(quán)限檔案的程序執(zhí)行,root可以將NFS 所分享的目錄以較為安全的情況掛載進來,可以
 

代碼如下:

#mount -t nfs -o nosuid,ro hostname:/directory /mountponit

可能出問題的地方:
1.權(quán)限的設(shè)定不符合
2.忘記了激活portmap,此時會報錯:
 mount: RPC: Port mapper failure - RPC: Unable to receive 或者
 mount: RPC: Program not registered
 那么,啟動portmap,并且重新啟動nfs
 

代碼如下:


#service portmap start
#service nfs restart


3.被防火墻搞掉
 重新設(shè)置防火墻,包括iptables與TCP_Wrappers,因為激活了portmap,所以port 111必須提供出去.因此在iptables rules中,要增加:
 

代碼如下:


iptables -A INPUT -p TCP --dport 111 -j ACCEPT
iptables -A INPUT -p UDP --dport 111 -j ACCEPT


 如果還不行,那就是TCP_Wrappers的問題,檢查/etc/hosts.deny,如果有一行是:
 

代碼如下:


 ALL: ALL: deny


 那就必須在/etc/hosts.allow中增加:
 

代碼如下:


 portmap: ALL: allow


 如果我們的NFS針對內(nèi)部網(wǎng)絡(luò)開發(fā),對于外部網(wǎng)絡(luò)只對學(xué)術(shù)網(wǎng)絡(luò)開發(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 主機的主機 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)


 
要注意的問題:
 需要注意的是,由于 NFS 使用的這個 RPC 在 client 端連上主機時,那么你的主機想要關(guān)機,那可就會成為『不可能的任務(wù)』!我還不知道正確的原因是什么,但是,如果你的 Server 上面還有 Client 在聯(lián)機,那么你要關(guān)機,可能得要等到數(shù)個鐘頭才能夠正常的關(guān)機成功!嗄!真的假的!不相信嗎?不然您自個兒試試看! ^_^!所以啰,建議您的 NFS Server 想要關(guān)機之前,能更先『關(guān)掉 portmap 與 nfs 』這兩個東西!如果無法正確的將這兩個 daemons 關(guān)掉,那么先以 netstat -utlp 找出 PID ,然后以 kill 將他關(guān)掉先!這樣才有辦法正常的關(guān)機成功喔!這個請?zhí)貏e特別的注意呢!
 
 在TurboLinux8.0 for AMD64 (kernel 2.4.21-4smp),mount NFS時候報錯為:
  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.)

到此,相信大家對“如何使用Linux下NFS網(wǎng)絡(luò)文件系統(tǒng)”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

網(wǎng)頁名稱:如何使用Linux下NFS網(wǎng)絡(luò)文件系統(tǒng)
標(biāo)題URL:http://muchs.cn/article38/ghiesp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、ChatGPT、企業(yè)建站外貿(mào)建站、品牌網(wǎng)站制作、

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司