posts - 188,comments - 176,trackbacks - 0

          NFS server可以看作是一個FILE SERVER,它可以讓你的PC通過網(wǎng)絡(luò)將遠端的NFS SERVER共享出來的檔案MOUNT到自己的系統(tǒng)中,在CLIENT看來使用NFS的遠端文件就象是在使用本地文件一樣。
          NFS協(xié)議從誕生到現(xiàn)在為止,已經(jīng)有多個版本,如NFS V2(rfc1094),NFS V3(rfc1813)(最新的版本是V4(rfc3010)。 
           
          各NFS協(xié)議版本的主要區(qū)別
           
           V3相對V2的主要區(qū)別:
           1、文件尺寸
           V2最大只支持32BIT的文件大小(4G),而NFS V3新增加了支持64BIT文件大小的技術(shù)。
           2、文件傳輸尺寸
           V3沒有限定傳輸尺寸,V2最多只能設(shè)定為8k,可以使用-rsize and -wsize 來進行設(shè)定。
           3、完整的信息返回
           V3增加和完善了許多錯誤和成功信息的返回,對于服務(wù)器的設(shè)置和管理能帶來很大好處。
           4、增加了對TCP傳輸協(xié)議的支持
           V2只提供了對UDP協(xié)議的支持,在一些高要求的網(wǎng)絡(luò)環(huán)境中有很大限制,V3增加了對TCP協(xié)議的支持
           *5、異步寫入特性
           6、改進了SERVER的mount性能
           7、有更好的I/O WRITES 性能。
           9、更強網(wǎng)絡(luò)運行效能,使得網(wǎng)絡(luò)運作更為有效。
           10、更強的災(zāi)難恢復(fù)功能。
           

           異步寫入特性(v3新增加)介紹:
           NFS V3 能否使用異步寫入,這是可選擇的一種特性。NFS V3客戶端發(fā)發(fā)送一個異步寫入請求到服務(wù)器,在給客戶端答復(fù)之前服務(wù)器并不是必須要將數(shù)據(jù)寫入到存儲器中(穩(wěn)定的)。服務(wù)器能確定何時去寫入數(shù)據(jù)或者將多個寫入請求聚合到一起并加以處理,然后寫入。客戶端能保持一個數(shù)據(jù)的copy以防萬一服務(wù)器不能完整的將數(shù)據(jù)寫入。當(dāng)客戶端希望釋放這個copy的時候,它會向服務(wù)器通過這個操作過程,以確保每個操作步驟的完整。異步寫入能夠使服務(wù)器去確定最好的同步數(shù)據(jù)的策略。使數(shù)據(jù)能盡可能的同步的提交何到達。與V2比較來看,這樣的機制能更好的實現(xiàn)數(shù)據(jù)緩沖和更多的平行(平衡)。而NFS V2的SERVER在將數(shù)據(jù)寫入存儲器之前不能再相應(yīng)任何的寫入請求。
           
           V4相對V3的改進:
           1:改進了INTERNET上的存取和執(zhí)行效能
           2:在協(xié)議中增強了安全方面的特性
           3:增強的跨平臺特性


           CLIENT和SERVER的具體操作和設(shè)置
           在講NFS SERVER的運作之前先來看一些與NFS SERVER有關(guān)的東西:
          RPC(Remote Procedure Call) NFS本身是沒有提供信息傳輸?shù)膮f(xié)議和功能的,但NFS卻能讓我們通過網(wǎng)絡(luò)進行資料的分享,這是因為NFS使用了一些其它的傳輸協(xié)議。而這些傳輸協(xié)議勇士用到這個RPC功能的。可以說NFS本身就是使用RPC的一個程序。或者說NFS也是一個RPC SERVER.所以只要用到NFS的地方都要啟動RPC服務(wù),不論是NFS SERVER或者NFS CLIENT。這樣SERVER和CLIENT才能通過RPC來實現(xiàn)PROGRAM PORT的對應(yīng)。可以這么理解RPC和NFS的關(guān)系:NFS是一個文件系統(tǒng),而RPC是負責(zé)負責(zé)信息的傳輸。 
           

           NFS需要啟動的DAEMONS
           pc.nfsd:主要復(fù)雜登陸權(quán)限檢測等。  rpc.mountd:負責(zé)NFS的檔案系統(tǒng),當(dāng)CLIENT端通過rpc.nfsd登陸SERVER后,對clinet存取server的文件進行一系列的管理NFS SERVER在REDHAT LINUX平臺下一共需要兩個套件:nfs-utils和PORTMAP nfs-utils:提供rpc.nfsd 及 rpc.mountd這兩個NFS DAEMONS的套件portmap:NFS其實可以被看作是一個RPC SERVER PROGRAM,而要啟動一個RPC SERVER PROGRAM,都要做好PORT的對應(yīng)工作,而且這樣的任務(wù)就是由PORTMAP來完成的。通俗的說PortMap就是用來做PORT的mapping的。
           

          服務(wù)器端的設(shè)定(以LINUX為例)
          服務(wù)器端的設(shè)定都是在/etc/exports這個文件中進行設(shè)定的,設(shè)定格式如下:
          欲分享出去的目錄 主機名稱1或者IP1(參數(shù)1,參數(shù)2) 主機名稱2或者IP2(參數(shù)3,參數(shù)4)上面這個格式表示,同一個目錄分享給兩個不同的主機,但提供給這兩臺主機的權(quán)限和參數(shù)是不同的,所以分別設(shè)定兩個主機得到的權(quán)限。 
           
          可以設(shè)定的參數(shù)主要有以下這些:
           rw:可讀寫的權(quán)限;
           ro:只讀的權(quán)限;
           no_root_squash:登入到NFS主機的用戶如果是ROOT用戶,他就擁有ROOT的權(quán)限,此參數(shù)很不安全,建議不要使用。
           root_squash:在登入 NFS 主?C使用分享之目?的使用者如果是 root ?r,那????使用者的?嘞?⒈?嚎s成?檳涿褂謎擼ǔK?UID ? GID 都??成 nobody 那??身份;
           all_squash:不管登陸NFS主機的用戶是什么都會被重新設(shè)定為nobody。
           anonuid:將登入NFS主機的用戶都設(shè)定成指定的user id,此ID必須存在于/etc/passwd中。
           anongid:同 anonuid ,但是?成 group ID 就是了!
           sync:資料同步寫入存儲器中。
           async:資料會先暫時存放在內(nèi)存中,不會直接寫入硬盤。
           insecure 允許從這臺機器過來的非授權(quán)訪問。
           
           例如可以編輯/etc/exports為:
           /tmp     *(rw,no_root_squash)
           /home/public 192.168.0.*(rw)   *(ro)
           /home/test  192.168.0.100(rw)
           /home/linux  *.the9.com(rw,all_squash,anonuid=40,anongid=40)
           設(shè)定好后可以使用以下命令啟動NFS:
           /etc/rc.d/init.d/portmap start (在REDHAT中PORTMAP是默認啟動的)
           /etc/rc.d/init.d/nfs start
           
           exportfs命令:
           如果我們在啟動了NFS之后又修改了/etc/exports,是不是還要重新啟動nfs呢?這個時候我們就可以用exportfs命令來使改動立刻生效,該命令格式如下:
           exportfs [-aruv]
           -a :全部mount或者unmount /etc/exports中的內(nèi)容
           -r :重新mount /etc/exports中分享出來的目錄
           -u :umount 目錄
           -v :在 export 的?r候,將詳細的信息輸出到屏幕上。
           具體例子:
           [root @test root]# exportfs -rv <==全部重新 export 一次!
           exporting 192.168.0.100:/home/test
           exporting 192.168.0.*:/home/public
           exporting *.the9.com:/home/linux
           exporting *:/home/public
           exporting *:/tmp
           reexporting 192.168.0.100:/home/test to kernel
           
           exportfs -au <==全部都卸載了。
           
           
           客戶端的操作:
           1、showmout命令對于NFS的操作和查錯有很大的幫助,所以我們先來看一下showmount的用法
           showmout
           -a :這個參數(shù)是一般在NFS SERVER上使用,是用來顯示已經(jīng)mount上本機nfs目錄的cline機器。
           -e :顯示指定的NFS SERVER上export出來的目錄。
           例如:
           showmount -e 192.168.0.30
           Export list for localhost:
           /tmp *
           /home/linux *.linux.org
           /home/public (everyone)
           /home/test 192.168.0.100
           2、mount nfs目錄的方法:
           mount -t nfs hostname(orIP):/directory /mount/point
           具體例子:
           Linux: mount -t nfs 192.168.0.1:/tmp /mnt/nfs
           Solaris:mount -F nfs 192.168.0.1:/tmp /mnt/nfs
           BSD: mount 192.168.0.1:/tmp /mnt/nfs
           
           3、mount nfs的其它可選參數(shù): 
           HARD mount和SOFT MOUNT:
           HARD: NFS CLIENT會不斷的嘗試與SERVER的連接(在后臺,不會給出任何提示信息,在LINUX下有的版本仍然會給出一些提示),直到MOUNT上。 SOFT:會在前臺嘗試與SERVER的連接,是默認的連接方式。當(dāng)收到錯誤信息后終止mount嘗試,并給出相關(guān)信息。
           例如:mount -F nfs -o hard 192.168.0.10:/nfs /nfs
           對于到底是使用hard還是soft的問題,這主要取決于你訪問什么信息有關(guān)。例如你是想通過NFS來運行X PROGRAM的話,你絕對不會希望由于一些意外的情況(如網(wǎng)絡(luò)速度一下子變的很慢,插拔了一下網(wǎng)卡插頭等)而使系統(tǒng)輸出大量的錯誤信息,如果此時你用的是HARD方式的話,系統(tǒng)就會等待,直到能夠重新與NFS SERVER建立連接傳輸信息。另外如果是非關(guān)鍵數(shù)據(jù)的話也可以使用SOFT方式,如FTP數(shù)據(jù)等,這樣在遠程機器暫時連接不上或關(guān)閉時就不會掛起你的會話過程。
           
           rsize和wsize:
           文件傳輸尺寸設(shè)定:V3沒有限定傳輸尺寸,V2最多只能設(shè)定為8k,可以使用-rsize and -wsize 來進行設(shè)定。這兩個參數(shù)的設(shè)定對于NFS的執(zhí)行效能有較大的影響 bg:在執(zhí)行mount時如果無法順利mount上時,系統(tǒng)會將mount的操作轉(zhuǎn)移到后臺并繼續(xù)嘗試mount,直到mount成功為止。(通常在設(shè)定/etc/fstab文件時都應(yīng)該使用bg,以避免可能的mount不上而影響啟動速度)
           fg:和bg正好相反,是默認的參數(shù) nfsvers=n:設(shè)定要使用的NFS版本,默認是使用2,這個選項的設(shè)定還要取決于server端是否支持NFS VER 3
           mountport:設(shè)定mount的端口 port:根據(jù)server端export出的端口設(shè)定,例如如果server使用5555端口輸出NFS,那客戶端就需要使用這個參數(shù)進行同樣的設(shè)定 timeo=n:設(shè)置超時時間,當(dāng)數(shù)據(jù)傳輸遇到問題時,會根據(jù)這個參數(shù)嘗試進行重新傳輸。默認值是7/10妙(0.7秒)。如果網(wǎng)絡(luò)連不是很穩(wěn)定的話就要加大這個數(shù)值,并且推薦使用HARD MOUNT方式,同時最好也加上INTR參數(shù),這樣你就可以終止任何掛起的文件訪問。
           intr 允許通知中斷一個NFS調(diào)用。當(dāng)服務(wù)器沒有應(yīng)答需要放棄的時候有用處。
           udp:使用udp作為nfs的傳輸協(xié)議(NFS V2只支持UDP)
           tcp:使用tcp作為nfs的傳輸協(xié)議
           namlen=n:設(shè)定遠程服務(wù)器所允許的最長文件名。這個值的默認是255
           acregmin=n:設(shè)定最小的在文件更新之前cache時間,默認是3
           acregmax=n:設(shè)定最大的在文件更新之前cache時間,默認是60
           acdirmin=n:設(shè)定最小的在目錄更新之前cache時間,默認是30
           acdirmax=n:設(shè)定最大的在目錄更新之前cache時間,默認是60
           actimeo=n:將acregmin、acregmax、acdirmin、acdirmax設(shè)定為同一個數(shù)值,默認是沒有啟用。
           retry=n:設(shè)定當(dāng)網(wǎng)絡(luò)傳輸出現(xiàn)故障的時候,嘗試重新連接多少時間后不再嘗試。默認的數(shù)值是10000 minutes
           noac:關(guān)閉cache機制。
           同時使用多個參數(shù)的方法:mount -t nfs -o timeo=3,udp,hard 192.168.0.30:/tmp /nfs
           請注意,NFS客戶機和服務(wù)器的選項并不一定完全相同,而且有的時候會有沖突。比如說服務(wù)器以只讀的方式導(dǎo)出,客戶端卻以可寫的方式mount,雖然可以成功mount上,但嘗試寫入的時候就會發(fā)生錯誤。一般服務(wù)器和客戶端配置沖突的時候,會以服務(wù)器的配置為準。
           
           4、/etc/fstab的設(shè)定方法
           /etc/fstab的格式如下:
           fs_spec   fs_file  fs_type   fs_options  fs_dump fs_pass 
           fs_spec:該字段定義希望加載的文件系統(tǒng)所在的設(shè)備或遠程文件系統(tǒng),對于nfs這個參數(shù)一般設(shè)置為這樣:192.168.0.1:/NFS
           fs_file:本地的掛載點
           fs_type:對于NFS來說這個字段只要設(shè)置成nfs就可以了
           fs_options:掛載的參數(shù),可以使用的參數(shù)可以參考上面的mount參數(shù)。
           fs_dump - 該選項被"dump"命令使用來檢查一個文件系統(tǒng)應(yīng)該以多快頻率進行轉(zhuǎn)儲,若不需要轉(zhuǎn)儲就設(shè)置該字段為0
           fs_pass - 該字段被fsck命令用來決定在啟動時需要被掃描的文件系統(tǒng)的順序,根文件系統(tǒng)"/"對應(yīng)該字段的值應(yīng)該為1,其他文件系統(tǒng)應(yīng)該為2。若該文件系統(tǒng)無需在啟動時掃描則設(shè)置該字段為0 。
           
           5、與NFS有關(guān)的一些命令介紹
           nfsstat:
           查看NFS的運行狀態(tài),對于調(diào)整NFS的運行有很大幫助
           rpcinfo:
           查看rpc執(zhí)行信息,可以用于檢測rpc運行情況的工具。
           
           
           NFS調(diào)優(yōu)
           調(diào)優(yōu)的步驟:
           1、測量當(dāng)前網(wǎng)絡(luò)、服務(wù)器和每個客戶端的執(zhí)行效率。
           2、分析收集來的數(shù)據(jù)并畫出圖表。查找出特殊情況,例如很高的磁盤和CPU占用、已經(jīng)高的磁盤使用時間
           3、調(diào)整服務(wù)器
           4、重復(fù)第一到第三步直到達到你渴望的性能
           
           
           與NFS性能有關(guān)的問題有很多,通常可以要考慮的有以下這些選擇: 
           WSIZE,RSIZE參數(shù)來優(yōu)化NFS的執(zhí)行效能
           WSIZE、RSIZE對于NFS的效能有很大的影響。
           wsize和rsize設(shè)定了SERVER和CLIENT之間往來數(shù)據(jù)塊的大小,這兩個參數(shù)的合理設(shè)定與很多方面有關(guān),不僅是軟件方面也有硬件方面的因素會影響這兩個參數(shù)的設(shè)定(例如LINUX KERNEL、網(wǎng)卡,交換機等等)。下面這個命令可以測試NFS的執(zhí)行效能,讀和寫的效能可以分別測試,分別找到合適的參數(shù)。對于要測試分散的大量的數(shù)據(jù)的讀寫可以通過編寫腳本來進行測試。在每次測試的時候最好能重復(fù)的執(zhí)行一次MOUNT和unmount。
          time dd if=/dev/zero of=/mnt/home/testfile bs=16k count=16384
          用于測試的WSIZE,RSIZE最好是1024的倍數(shù),對于NFS V2來說8192是RSIZE和WSIZE的最大數(shù)值,如果使用的是NFS V3則可以嘗試的最大數(shù)值是32768。
          如果設(shè)置的值比較大的時候,應(yīng)該最好在CLIENT上進入mount上的目錄中,進行一些常規(guī)操作(LS,VI等等),看看有沒有錯誤信息出現(xiàn)。有可能出現(xiàn)的典型問題有LS的時候文件不能完整的列出或者是出現(xiàn)錯誤信息,不同的操作系統(tǒng)有不同的最佳數(shù)值,所以對于不同的操作系統(tǒng)都要進行測試。 
           
          設(shè)定最佳的NFSD的COPY數(shù)目。
          linux中的NFSD的COPY數(shù)目是在/etc/rc.d/init.d/nfs這個啟動文件中設(shè)置的,默認是8個NFSD,對于這個參數(shù)的設(shè)置一般是要根據(jù)可能的CLIENT數(shù)目來進行設(shè)定的,和WSIZE、RSIZE一樣也是要通過測試來找到最近的數(shù)值。 
           
          UDP and TCP
          可以手動進行設(shè)置,也可以自動進行選擇。 
           mount -t nfs -o sync,tcp,noatime,rsize=1024,wsize=1024 EXPORT_MACHINE:/EXPORTED_DIR /DIR
          UDP有著傳輸速度快,非連接傳輸?shù)谋憬萏匦裕荱DP在傳輸上沒有TCP來的穩(wěn)定,當(dāng)網(wǎng)絡(luò)不穩(wěn)定或者黑客入侵的時候很容易使NFS的 Performance 大幅降低甚至使網(wǎng)絡(luò)癱瘓。所以對于不同情況的網(wǎng)絡(luò)要有針對的選擇傳輸協(xié)議。nfs over tcp比較穩(wěn)定,nfs over udp速度較快。在機器較少網(wǎng)絡(luò)狀況較好的情況下使用UDP協(xié)議能帶來較好的性能,當(dāng)機器較多,網(wǎng)絡(luò)情況復(fù)雜時推薦使用TCP協(xié)議(V2只支持UDP協(xié)議)。在局域網(wǎng)中使用UDP協(xié)議較好,因為局域網(wǎng)有比較穩(wěn)定的網(wǎng)絡(luò)保證,使用UDP可以帶來更好的性能,在廣域網(wǎng)中推薦使用TCP協(xié)議,TCP協(xié)議能讓NFS在復(fù)雜的網(wǎng)絡(luò)環(huán)境中保持最好的傳輸穩(wěn)定性。可以參考這篇文章:

          http://www.hp.com.tw/ssn/unix/0212/unix021204.asp 
           
          版本的選擇
          V3作為默認的選擇(RED HAT 8默認使用V2,SOLARIS 8以上默認使用V3),可以通過vers= mount option來進行選擇。
          LINUX通過mount option的nfsvers=n進行選擇。
           

          NFS故障解決
          1、NFSD沒有啟動起來
          首先要確認 NFS 輸出列表存在,否則 nfsd 不會啟動。可用 exportfs 命令來檢查,如果 exportfs 命令沒有結(jié)果返回或返回不正確,則需要檢查 /etc/exports 文件。
          2、mountd 進程沒有啟動
          mountd 進程是一個遠程過程調(diào)用 (RPC) ,其作用是對客戶端要求安裝(mount)文件系統(tǒng)的申請作出響應(yīng)。mountd進程通過查找 /etc/xtab文件來獲知哪些文件系統(tǒng)可以被遠程客戶端使用。另外,通過mountd進程,用戶可以知道目前有哪些文件系統(tǒng)已被遠程文件系統(tǒng)裝配,并得知遠程客戶端的列表。查看mountd是否正常啟動起來可以使用命令rpcinfo進行查看,在正常情況下在輸出的列表中應(yīng)該象這樣的行:
           100005 1 udp 1039 mountd
           100005 1 tcp 1113 mountd
           100005 2 udp 1039 mountd
           100005 2 tcp 1113 mountd
           100005 3 udp 1039 mountd
           100005 3 tcp 1113 mountd
           如果沒有起來的話可以檢查是否安裝了PORTMAP組件。
           rpm -qa|grep portmap
          3、fs type nfs no supported by kernel
           kernel不支持nfs文件系統(tǒng),重新編譯一下KERNEL就可以解決。
          4、can't contact portmapper: RPC: Remote system error - Connection refused
           出現(xiàn)這個錯誤信息是由于SEVER端的PORTMAP沒有啟動。
          5、mount clntudp_create: RPC: Program not registered
           NFS沒有啟動起來,可以用showmout -e host命令來檢查NFS SERVER是否正常啟動起來。
          6、mount: localhost:/home/test failed, reason given by server: Permission denied
           這個提示是當(dāng)client要mount nfs server時可能出現(xiàn)的提示,意思是說本機沒有權(quán)限去mount nfs server上的目錄。解決方法當(dāng)然是去修改NFS SERVER咯。
          7、被防火墻阻擋
          這個原因很多人都忽視了,在有嚴格要求的網(wǎng)絡(luò)環(huán)境中,我們一般會關(guān)閉linux上的所有端口,當(dāng)需要使用哪個端口的時候才會去打開。而NFS默認是使用111端口,所以我們先要檢測是否打開了這個端口,另外也要檢查TCP_Wrappers的設(shè)定。 
           
          NFS安全
          NFS的不安全性主要體現(xiàn)于以下4個方面: 
           
          1、新手對NFS的訪問控制機制難于做到得心應(yīng)手,控制目標(biāo)的精確性難以實現(xiàn)
          2、NFS沒有真正的用戶驗證機制,而只有對RPC/Mount請求的過程驗證機制
          3、較早的NFS可以使未授權(quán)用戶獲得有效的文件句柄
          4、在RPC遠程調(diào)用中,一個SUID的程序就具有超級用戶權(quán)限.
           
           加強NFS安全的方法:
          1、合理的設(shè)定/etc/exports中共享出去的目錄,最好能使用anonuid,anongid以使MOUNT到NFS SERVER的CLIENT僅僅有最小的權(quán)限,最好不要使用root_squash。
          2、使用IPTABLE防火墻限制能夠連接到NFS SERVER的機器范圍
           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
          3、為了防止可能的Dos攻擊,需要合理設(shè)定NFSD 的COPY數(shù)目。
          4、修改/etc/hosts.allow和/etc/hosts.deny達到限制CLIENT的目的
          /etc/hosts.allow
          portmap: 192.168.0.0/255.255.255.0 : allow  portmap: 140.116.44.125 : allow 
           /etc/hosts.deny
           portmap: ALL : deny
          5、改變默認的NFS 端口
          NFS默認使用的是111端口,但同時你也可以使用port參數(shù)來改變這個端口,這樣就可以在一定程度上增強安全性。
          6、使用Kerberos V5作為登陸驗證系統(tǒng)



          轉(zhuǎn):http://www.chinaunix.net/jh/4/181192.html

          posted on 2009-11-13 19:25 cheng 閱讀(535) 評論(0)  編輯  收藏 所屬分類: Unix/Linux
          主站蜘蛛池模板: 沅江市| 什邡市| 盐津县| 淳化县| 惠安县| 铅山县| 淮南市| 天柱县| 绥滨县| 高淳县| 泰安市| 潢川县| 年辖:市辖区| 民权县| 邻水| 平陆县| 肥西县| 乌兰察布市| 嘉黎县| 苍山县| 突泉县| 康乐县| 潜山县| 麻栗坡县| 长宁区| 绥化市| 来宾市| 宜阳县| 科技| 河池市| 滦南县| 大余县| 绥江县| 娄烦县| 睢宁县| 嵊州市| 凤庆县| 三台县| 漳平市| 宜黄县| 广平县|