熱烈祝賀臺州維博網絡的站長論壇隆重上線!(2012-05-28)    熱烈慶祝偉大的祖國60周年生日 點擊進來我們一起為她祝福吧(2009-09-26)    站長論壇禁止發布廣告,一經發現立即刪除。謝謝各位合作!.(2009-08-08)    熱烈祝賀臺州網址導航全面升級,全新版本上線!希望各位一如既往地支持臺州網址導航的發展.(2009-03-28)    臺州站長論壇恭祝各位新年快樂,牛年行大運!(2009-01-24)    臺州Link正式更名為臺州網址導航,專業做以臺州網址為主的網址導航!(2008-05-23)    熱烈祝賀臺州Link資訊改名為中國站長資訊!希望在以后日子里得到大家的大力支持和幫助!(2008-04-10)    熱烈祝賀臺州Link論壇改名為臺州站長論壇!希望大家繼續支持和鼓勵!(2008-04-10)    臺州站長論壇原[社會瑣碎]版塊更名為[生活百科]版塊!(2007-09-05)    特此通知:新臺州站長論壇的數據信息全部升級成功!">特此通知:新臺州站長論壇的數據信息全部升級成功!(2007-09-01)    臺州站長論壇對未通過驗證的會員進行合理的清除,請您諒解(2007-08-30)    臺州網址導航|上網導航誠邀世界各地的網站友情鏈接和友誼聯盟,共同引領網站導航、前進!(2007-08-30)    禁止發廣告之類的帖,已發現立即刪除!(2007-08-30)    希望各位上傳與下載有用資源和最新信息(2007-08-30)    熱烈祝賀臺州站長論壇全面升級成功,全新上線!(2007-08-30)    
便民網址導航,輕松網上沖浪。
臺州維博網絡專業開發網站門戶平臺系統
您當前的位置: 首頁 » Linux網絡/硬件 » NFS:網絡文件系統

NFS:網絡文件系統

論壇鏈接
  • NFS:網絡文件系統
  • 發布時間:2010-07-23 10:00:46    瀏覽數:6650    發布者:lutr    設置字體【   
 NFS server可以看作是一個FILE SERVER,它可以讓你的PC通過網絡將遠端得NFS SERVER共享出來的檔案MOUNT到自己的系統中,在CLIENT看來使用NFS的遠端文件就象是在使用本地文件一樣。

  NFS協議從誕生到現在為止,已經有多個版本,如 NFS V2(rfc1094),NFS V3(rfc1813)(最新的版本是V4(rfc3010)。

  二、各NFS協議版本的主要區別

  V3相對V2的主要區別:

  1、文件尺寸

  V2最大只支持32BIT的文件大小(4G),而NFS V3新增加了支持 64BIT文件大小的技術。

  2、文件傳輸尺寸

  V3沒有限定傳輸尺寸,V2最多只能設定為8k,可以使用 -rsize and -wsize 來進行設定。

  3、完整的信息返回

  V3增加和完善了許多錯誤和成功信息的返回,對于服務器的設置和管理能帶來很大好處。

  4、增加了對TCP傳輸協議的支持

  V2只提供了對UDP協議的支持,在一些高要求的網絡環境中有很大限制,V3增加了對TCP協議的支持

  *5、異步寫入特性

  6、改進了SERVER的mount性能

  7、有更好的 I/O WRITES 性能。

  9、更強網絡運行效能,使得網絡運作更為有效。

  10、更強的災難恢復功能。

  異步寫入特性(v3新增加)介紹:

  NFS V3 能否使用異步寫入,這是可選擇的一種特性。NFS V3客戶端發發送一個異步寫入請求到服務器,在給客戶端答復之前服務器并不是必須要將數據寫入到存儲器中(穩定的)。服務器能確定何時去寫入數據或者將多個寫入請求聚合到一起并加以處理,然后寫入?蛻舳四鼙3忠粋數據的copy以防萬一服務器不能完整的將數據寫入。當客戶端希望釋放這個copy的時候,它會向服務器通過這個操作過程,以確保每個操作步驟的完整。異步寫入能夠使服務器去確定最好的同步數據的策略。使數據能盡可能的同步的提交何到達。與V2比較來看,這樣的機制能更好的實現數據緩沖和更多的平行(平衡)。而NFS V2的SERVER在將數據寫入存儲器之前不能再相應任何的寫入請求。

  V4相對V3的改進:

  1:改進了INTERNET上的存取和執行效能

  2:在協議中增強了安全方面的特性

  3:增強的跨平臺特性

  三、CLIENT 和SERVER的具體操作和設置

  在講NFS SERVER的運作之前先來看一些與NFS SERVER有關的東西:

  RPC(Remote Procedure Call)

  NFS本身是沒有提供信息傳輸的協議和功能的,但NFS卻能讓我們通過網絡進行資料的分享,這是因為NFS使用了一些其它的傳輸協議。而這些傳輸協議勇士用到這個RPC功能的?梢哉fNFS本身就是使用RPC的一個程序;蛘哒fNFS也是一個RPC SERVER.所以只要用到NFS的地方都要啟動RPC服務,不論是NFS SERVER或者NFS CLIENT。這樣SERVER和CLIENT才能通過RPC來實現PROGRAM PORT的對應?梢赃@么理解RPC和NFS的關系:NFS是一個文件系統,而RPC是負責負責信息的傳輸。

  NFS需要啟動的DAEMONS

  pc.nfsd:主要復雜登陸權限檢測等。

  rpc.mountd:負責NFS的檔案系統,當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的對應工作,而且這樣的任務就是由PORTMAP來完成的。通俗的說PortMap就是用來做 PORT的mapping的。

  一:服務器端的設定(以LINUX為例)

  服務器端的設定都是在/etc/exports這個文件中進行設定的,設定格式如下:

  欲分享出去的目錄 主機名稱1或者IP1(參數1,參數2) 主機名稱2或者IP2(參數3,參數4)

  上面這個格式表示,同一個目錄分享給兩個不同的主機,但提供給這兩臺主機的權限和參數是不同的,所以分別設定兩個主機得到的權限。

  可以設定的參數主要有以下這些:

  rw:可讀寫的權限;

  ro:只讀的權限;

  no_root_squash:登入到NFS 主機的用戶如果是ROOT用戶,他就擁有ROOT的權限,此參數很不安全,建議不要使用。

  root_squash:在登入 NFS 主?C使用分享之目?的使用者如果是 root ?r,那????使用者的?嘞?⒈?嚎s成?檳涿?褂謎擼?ǔK??UID ? GID 都??? 成 nobody 那??身份;

  all_squash:不管登陸NFS主機的用戶是什么都會被重新設定為nobody。

  anonuid:將登入NFS主機的用戶都設定成指定的user id,此ID必須存在于/etc/passwd中。

  anongid:同 anonuid ,但是?成 group ID 就是了!

  sync:資料同步寫入存儲器中。

  async:資料會先暫時存放在內存中,不會直接寫入硬盤。

  insecure 允許從這臺機器過來的非授權訪問。

  例如可以編輯/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)

  設定好后可以使用以下命令啟動 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中的內容

  -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 :這個參數是一般在NFS SERVER上使用,是用來顯示已經 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的其它可選參數:

  HARD mount 和SOFT MOUNT:

  HARD: NFS CLIENT會不斷的嘗試與SERVER的連接(在后臺,不會給出任何提示信息,在LINUX 下有的版本仍然會給出一些提示),直到MOUNT上。

  SOFT:會在前臺嘗試與SERVER的連接,是默認的連接方式。當收到錯誤信息后終止 mount嘗試,并給出相關信息。

  例如:mount -F nfs -o hard 192.168.0.10:/nfs /nfs

  對于到底是使用hard還是soft的問題,這主要取決于你訪問什么信息有關。例如你是想通過NFS來運行X PROGRAM的話,你絕對不會希望由于一些意外的情況(如網絡速度一下子變的很慢,插拔了一下網卡插頭等)而使系統輸出大量的錯誤信息,如果此時你用的是HARD方式的話,系統就會等待,直到能夠重新與NFS SERVER建立連接傳輸信息。另外如果是非關鍵數據的話也可以使用SOFT方式,如FTP數據等,這樣在遠程機器暫時連接不上或關閉時就不會掛起你的會話過程。

  rsize和wsize:

  文件傳輸尺寸設定:V3沒有限定傳輸尺寸,V2最多只能設定為8k,可以使用-rsize and -wsize 來進行設定。這兩個參數的設定對于NFS的執行效能有較大的影響

  bg:在執行mount時如果無法順利mount上時,系統會將mount的操作轉移到后臺并繼續嘗試mount,直到mount成功為止。(通常在設定/etc/fstab文件時都應該使用bg,以避免可能的mount不上而影響啟動速度)

  fg:和bg正好相反,是默認的參數

  nfsvers=n:設定要使用的 NFS版本,默認是使用2,這個選項的設定還要取決于server端是否支持NFS VER 3

  mountport:設定mount的端口

  port:根據server端export出的端口設定,例如如果server使用5555端口輸出NFS,那客戶端就需要使用這個參數進行同樣的設定

  timeo=n:設置超時時間,當數據傳輸遇到問題時,會根據這個參數嘗試進行重新傳輸。默認值是7/10妙(0.7秒)。如果網絡連接不是很穩定的話就要加大這個數值,并且推薦使用HARD MOUNT方式,同時最好也加上INTR參數,這樣你就可以終止任何掛起的文件訪問。

  intr 允許通知中斷一個NFS調用。當服務器沒有應答需要放棄的時候有用處。

  udp:使用udp作為nfs的傳輸協議(NFS V2只支持UDP)

  tcp:使用tcp作為nfs的傳輸協議

  namlen=n:設定遠程服務器所允許的最長文件名。這個值的默認是255

  acregmin=n:設定最小的在文件更新之前cache時間,默認是3

  acregmax=n:設定最大的在文件更新之前cache時間,默認是60

  acdirmin=n:設定最小的在目錄更新之前cache時間,默認是30

  acdirmax=n:設定最大的在目錄更新之前cache時間,默認是60

  actimeo=n:將acregmin、acregmax、acdirmin、acdirmax設定為同一個數值,默認是沒有啟用。

  retry=n:設定當網絡傳輸出現故障的時候,嘗試重新連接多少時間后不再嘗試。默認的數值是10000 minutes

  noac:關閉cache機制。

  同時使用多個參數的方法:mount -t nfs -o timeo=3,udp,hard 192.168.0.30:/tmp /nfs

  請注意,NFS客戶機和服務器的選項并不一定完全相同,而且有的時候會有沖突。比如說服務器以只讀的方式導出,客戶端卻以可寫的方式mount,雖然可以成功mount上,但嘗試寫入的時候就會發生錯誤。一般服務器和客戶端配置沖突的時候,會以服務器的配置為準。

  4、/etc /fstab的設定方法

  /etc/fstab的格式如下:

  fs_spec   fs_file  fs_type    fs_options  fs_dump fs_pass

  fs_spec:該字段定義希望加載的文件系統所在的設備或遠程文件系統,對于 nfs這個參數一般設置為這樣:192.168.0.1:/NFS

  fs_file:本地的掛載點

  fs_type:對于NFS來說這個字段只要設置成nfs就可以了

  fs_options:掛載的參數,可以使用的參數可以參考上面的mount參數。

  fs_dump  - 該選項被"dump"命令使用來檢查一個文件系統應該以多快頻率進行轉儲,若不需要轉儲就設置該字段為0

  fs_pass - 該字段被 fsck命令用來決定在啟動時需要被掃描的文件系統的順序,根文件系統"/"對應該字段的值應該為1,其他文件系統應該為2。若該文件系統無需在啟動時掃描則設置該字段為0 。
       5、與NFS有關的一些命令介紹

  nfsstat:

  查看NFS的運行狀態,對于調整 NFS的運行有很大幫助

  rpcinfo:

  查看rpc執行信息,可以用于檢測rpc運行情況的工具。

  四、 NFS調優

  調優的步驟:

  1、測量當前網絡、服務器和每個客戶端的執行效率。

  2、分析收集來的數據并畫出圖表。查找出特殊情況,例如很高的磁盤和CPU占用、已經高的磁盤使用時間

  3、調整服務器

  4、重復第一到第三步直到達到你渴望的性能

  與 NFS性能有關的問題有很多,通?梢砸紤]的有以下這些選擇:

  WSIZE,RSIZE參數來優化NFS的執行效能

  WSIZE、 RSIZE對于NFS的效能有很大的影響。

  wsize和rsize設定了SERVER和CLIENT之間往來數據塊的大小,這兩個參數的合理設定與很多方面有關,不僅是軟件方面也有硬件方面的因素會影響這兩個參數的設定(例如LINUX KERNEL、網卡,交換機等等)。

  下面這個命令可以測試NFS的執行效能,讀和寫的效能可以分別測試,分別找到合適的參數。對于要測試分散的大量的數據的讀寫可以通過編寫腳本來進行測試。在每次測試的時候最好能重復的執行一次MOUNT和unmount。

  time dd if=/dev/zero of=/mnt/home/testfile bs=16k count=16384

  用于測試的WSIZE,RSIZE最好是1024的倍數,對于NFS V2來說8192是RSIZE和WSIZE的最大數值,如果使用的是 NFS V3則可以嘗試的最大數值是32768。

  如果設置的值比較大的時候,應該最好在CLIENT上進入mount上的目錄中,進行一些常規操作(LS,VI等等),看看有沒有錯誤信息出現。有可能出現的典型問題有LS的時候文件不能完整的列出或者是出現錯誤信息,不同的操作系統有不同的最佳數值,所以對于不同的操作系統都要進行測試。

  設定最佳的NFSD的COPY數目。

  linux中的NFSD的COPY數目是在/etc/rc.d/init.d/nfs這個啟動文件中設置的,默認是8個NFSD,對于這個參數的設置一般是要根據可能的CLIENT數目來進行設定的,和WSIZE、RSIZE一樣也是要通過測試來找到最近的數值。

  UDP and TCP

  可以手動進行設置,也可以自動進行選擇。

  mount -t nfs -o sync,tcp,noatime,rsize=1024,wsize=1024 EXPORT_MACHINE:/EXPORTED_DIR /DIR

  UDP有著傳輸速度快,非連接傳輸的便捷特性,但是UDP在傳輸上沒有TCP來的穩定,當網絡不穩定或者黑客入侵的時候很容易使NFS 的 Performance 大幅降低甚至使網絡癱瘓。所以對于不同情況的網絡要有針對的選擇傳輸協議。nfs over tcp比較穩定,nfs over udp速度較快。在機器較少網絡狀況較好的情況下使用UDP協議能帶來較好的性能,當機器較多,網絡情況復雜時推薦使用TCP協議(V2只支持UDP協議)。在局域網中使用UDP協議較好,因為局域網有比較穩定的網絡保證,使用UDP可以帶來更好的性能,在廣域網中推薦使用TCP協議,TCP協議能讓NFS在復雜的網絡環境中保持最好的傳輸穩定性?梢詤⒖歼@篇文章: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 命令沒有結果返回或返回不正確,則需要檢查 /etc/exports 文件。

  2、 mountd 進程沒有啟動

  mountd 進程是一個遠程過程調用 (RPC) ,其作用是對客戶端要求安裝(mount)文件系統的申請作出響應。mountd進程通過查找 /etc/xtab文件來獲知哪些文件系統可以被遠程客戶端使用。另外,通過mountd進程,用戶可以知道目前有哪些文件系統已被遠程文件系統裝配,并得知遠程客戶端的列表。查看mountd是否正常啟動起來可以使用命令rpcinfo進行查看,在正常情況下在輸出的列表中應該象這樣的行:

  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文件系統,重新編譯一下 KERNEL就可以解決。

  4、 can’t contact portmapper: RPC: Remote system error - Connection refused

  出現這個錯誤信息是由于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

  這個提示是當 client要mount nfs server時可能出現的提示,意思是說本機沒有權限去mount nfs server上的目錄。解決方法當然是去修改NFS SERVER咯。

  7、被防火墻阻擋

  這個原因很多人都忽視了,在有嚴格要求的網絡環境中,我們一般會關閉linux上的所有端口,當需要使用哪個端口的時候才會去打開。而NFS默認是使用111端口,所以我們先要檢測是否打開了這個端口,另外也要檢查 TCP_Wrappers的設定。
      六、NFS安全

  NFS的不安全性主要體現于以下4個方面:

  1、新手對NFS的訪問控制機制難于做到得心應手,控制目標的精確性難以實現

  2、NFS沒有真正的用戶驗證機制,而只有對RPC/Mount請求的過程驗證機制

  3、較早的NFS可以使未授權用戶獲得有效的文件句柄

  4、在RPC遠程調用中,一個SUID的程序就具有超級用戶權限.

  加強NFS安全的方法:

  1、合理的設定/etc/exports**享出去的目錄,最好能使用 anonuid,anongid以使MOUNT到NFS SERVER的CLIENT僅僅有最小的權限,最好不要使用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攻擊,需要合理設定NFSD 的COPY數目。

  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參數來改變這個端口,這樣就可以在一定程度上增強安全性。

  6、使用Kerberos V5作為登陸驗證系統

  --------------------

  修改/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

  這個得多注意!!

  ------------------

  /tmp     *(rw,no_root_squash)

  no_root_squash:登入到NFS主機的用戶如果是ROOT用戶,他就擁有ROOT的權限,此參數很不安全,建議不要使用.

  ------------------------

  有時需要執行umont卸載nfs盤陣時,會遇見device is busy的情況,字面意思理解為設備忙,有其他進程正在使用此設備。

  此時需要用到命令fuser

  其格式為: $ fuser -m -v (nfs掛載點) 回車執行后得到的結果依次是:用戶 進程號 權限 命令

  此命令可以查看到訪問此設備的所有進程,停止進程后umount。

  如果添加參數 -k則可以一次性將所有當前訪問nfs共享盤陣的進程停止 也可以加-i 打開交互顯示,以便用戶確認

  ----------------------------------

  或者用fuser命令:

  #fuser -v -m 掛載點

  即可查處 用戶 PID等,KILL掉該進程后再umount.

  或者

  #umount -l 掛載點

  選項 –l 并不是馬上umount,而是在該目錄空閑后再umount。還可以先用命令 ps aux 來查看占用設備的程序PID,然后用命令kill來殺死占用設備的進程,這樣就umount的非常放心了。
娛樂休閑專區A 影視預告B 音樂咖啡C 英語階梯D 生活百科
網頁編程專區E AMPZF HTMLG CSSH JSI ASPJ PHPK JSPL MySQLM AJAX
Linux技術區 N 系統管理O 服務器架設P 網絡/硬件Q 編程序開發R 內核/嵌入
管理中心專區S 發布網址T 版主議事U 事務處理
陕西快乐10分玩法 富余通配资 四川麻将怎么胡 我想看大乐透预测 微信股票群可靠吗 大唐河南麻将 贵州快三电视走势图表 北京赛车pk10平台技巧改单 体育彩票飞鱼走势图 山西体彩新11选五的规则 高手平特肖论坛精选