配置nfs伺服器

科技小能手發表於2017-11-21

NFS:Network file system,網路檔案系統.由sun公司1984年推出,用來在網路中的多臺計算機間實現資源共享(包括象檔案或cd-rom).設計的目的是:實現在不同系統間互動使用,所以它的通訊協議採用與主機和作業系統無關的技術

NFS Server可以看作是File Server,它可以讓你的PC通過網路將遠端得NFS SERVER共享出來的檔案MOUNT到自己的系統中,在CLIENT看來使用NFS的遠端檔案就象是在使用本地檔案一樣.

 



一 服務端配置文件


$ cat /etc/exports


  1. /data/storage/bbs 10.10.100.0/24(rw,sync) 
  2.  
  3. 格式如下 
  4. #[共享目錄]   [主機/網路](許可權) []()多個 


1 共享目錄屬性

ll /data/storage/bbs/ | awk `/^d/ {print $1,$2,$3,$4}`


  1. drwxr-xr-x 6 www www 
  2. drwxr-xr-x 13 www www 
  3. drwxr-xr-x 2 www www 
  4. drwx—— 4 www www 
  5. drwxr-xr-x 10 www www 
  6. drwxr-xr-x 11 www www 
  7. drwxr-xr-x 313 www www 
  8. drwxr-xr-x 241 www www 
  9. drwxr-xr-x 276 www www 
  10. drwxr-xr-x 9 www www 
  11. drwxr-xr-x 121 www www 

注意:資料夾屬主屬組與許可權,與客戶端相同

2 授權的主機或網路


  1. 可以使用完整的IP 或者是網路,例如10.10.100.10 或10.10.100.0/24 ,也可以使用主機名稱,
  2. 但這個主機名稱必須要在/etc/hosts 內,或者使用DNS 找到該名稱 

3 許可權詳解

引數值 內容說明


  1. ro | rw 
  2. 該目錄分享的許可權是可讀寫(read-write) 或只讀(read-only),但最終能不能讀寫,還是與檔案系統的rwx 及身份有關。 
  3. sync | async sync 
  4. 代表資料會同步寫入到記憶體與磁碟中,async 則代表資料會先暫存於記憶體當中,而非直接寫入磁碟! 
  5. no_root_squash | root_squash | all_squash 
  6. 使用者端使用NFS系統的帳號若為root 時,系統該如何判斷這個帳號的身份?預設的情況下,
  7. 使用者端root 的身份會由root_squash 的設定壓縮成nfsnobody, 如此對伺服器的系統會較有保障。
  8. 但如果你想要開放使用者端使用root 身份來操作伺服器的檔案系統,那麼這裡就得要開no_root_squash 才行,
  9. all_squash 不論登入NFS 的使用者身份為何,他的身份都會被壓縮成為匿名使用者,通常也就是nobody(nfsnobody) 
  10. anonuid | anongid 
  11. anon 意指anonymous (匿名者) 前面關於*_squash 提到的匿名使用者的UID 設定值,通常為nobody(nfsnobody),
  12. 但是你可以自行設定這個UID 的值!當然,這個UID 必需要存在於你的/etc/passwd 當中! anonuid 指的是UID 而anongid 則是群組的GID。 

注意:若是多個許可權,則以逗號 “,” 分開


4 啟動nfs


  1. $ /etc/init.d/nfs start 
  2. $ /etc/init.d/nfslock start 

5 驗證 nfs 伺服器

$ netstat -antulp | grep -E `2049|rpc`


  1. tcp        0      0 0.0.0.0:896                 0.0.0.0:*                   LISTEN      15980/rpc.rquotad   
  2. tcp        0      0 0.0.0.0:2049                0.0.0.0:*                   LISTEN      –                   
  3. tcp        0      0 0.0.0.0:910                 0.0.0.0:*                   LISTEN      15995/rpc.mountd    
  4. tcp        0      0 0.0.0.0:628                 0.0.0.0:*                   LISTEN      16134/rpc.statd     
  5. tcp        0      0 10.0.100.71:2049            10.0.100.82:680             ESTABLISHED –                   
  6. tcp        0      0 192.168.57.71:2049          192.168.57.92:982           ESTABLISHED –                   
  7. udp        0      0 0.0.0.0:2049                0.0.0.0:*                               –                   
  8. udp        0      0 0.0.0.0:907                 0.0.0.0:*                               15995/rpc.mountd    
  9. udp        0      0 0.0.0.0:622                 0.0.0.0:*                               16134/rpc.statd     
  10. udp        0      0 0.0.0.0:625                 0.0.0.0:*                               16134/rpc.statd     
  11. udp        0      0 0.0.0.0:893                 0.0.0.0:*                               15980/rpc.rquotad  

注意:2049為nfs監聽埠




二 客戶端

0 啟動rpcbind/portmap 服務


  1. /etc/init.d/rpcbind  #rhel6.x 
  2. /etc/init.d/portmap #rhe5.x 


1 掛載nfs伺服器


  1. # mount -t nfs -o nosuid,noexec,nodev,rw -o bg,soft,rsize=32768,wsize=32768 10.10.100.77:/data/storage/bbs/ /storage/ 

2 客戶端掛載引數

引數  意義


  1. suid | nosuid 
  2. 如果掛載的partition 上面有任何SUID 的binary 程式時, 你只要使用nosuid 就能夠取消SUID 的功能 
  3. rw | ro 
  4. 你可以指定該檔案系統是隻讀(ro) 或可讀寫!伺服器可以提供給你可讀寫,使用者端可以僅允許只讀的引數設定值 
  5. dev | nodev 
  6. 是否​​保留裝置檔案的特殊功能 
  7. exec | noexec 
  8. 是否具有執行binary file 的許可權 
  9. user | nouser 
  10. 是否允許使用者進行檔案的掛載與解除安裝功能 
  11. fg |bg 
  12. 當執行掛載時,該掛載的行為會在前臺(fg) 還是在後臺(bg) 執行;若在前臺執行時,則mount 會持續嘗試掛載,直到成功或time out 為止,若為後臺執行, 則mount 會在背持續多次進行mount ,而不會影響到前景的程式操作。 
  13. soft | hard 
  14. 如果是hard 的情況,則當兩者之間有任何一部主機離線,則RPC 會持續的呼叫,直到對方恢復連線為止。如果是soft 的話,那RPC 會在time out 後重復呼叫,而非持續呼叫, 因此係統的延遲會比較不這麼明顯。 
  15. intr 
  16. 當你使用上頭提到的hard 方式掛載時,若加上intr 這個引數, 則當RPC 持續呼叫中,該次的呼叫是可以被中斷的(interrupted)。 
  17. rsize | wsize 
  18. 讀出(rsize)與寫入(wsize)的區塊大小(block size)。這個設定值可以影響使用者端與NFS服器端傳輸資料的緩衝記憶容量。 

3 client端 系統中的www使用者


  1. www:x:5000:5000::/home/www:/sbin/nologin 

4 apache 使用者與組


  1. <IfModule !mpm_netware_module> 
  2. <IfModule !mpm_winnt_module> 
  3. User www 
  4. Group www 
  5. </IfModule> 
  6. </IfModule> 

5 clinet端 掛載點屬性

ll /storage/ | awk `/^d/ {print $1,$2,$3,$4}`


  1. drwxr-xr-x 6 www www 
  2. drwxr-xr-x 13 www www 
  3. drwxr-xr-x 2 www www 
  4. drwx—— 4 www www 
  5. drwxr-xr-x 10 www www 
  6. drwxr-xr-x 11 www www 
  7. drwxr-xr-x 313 www www 
  8. drwxr-xr-x 241 www www 
  9. drwxr-xr-x 276 www www 
  10. drwxr-xr-x 9 www www 
  11. drwxr-xr-x 121 www www 

注意:資料夾屬主屬組與許可權,與服務端相同



三 維護 NFS 
1 nfs 使用的協議與埠


  1. grep -E `^nfs.*nfsd$` /etc/services 
  2. nfs        2049/tcp    nfsd 
  3. nfs        2049/udp    nfsd 

2 RPC 使用的埠


  1. grep -E `portmap` /etc/services 
  2. sunrpc        111/tcp        portmapper    # RPC 4.0 portmapper TCP 
  3. sunrpc        111/udp        portmapper    # RPC 4.0 portmapper UDP 

注意:

RPC 是固定使用port 111 來監聽埠

RPC 服務的功能就是在指定NFS 服務所對應的port number ,並且反回給使用者端,讓使用者端可以連結到正確的埠上去。

RPC 是如何知道每個NFS 的埠?這是因為當伺服器在啟動NFS 時會隨機取用數個埠,並主動的向RPC 註冊,因此RPC 可以知道每個埠對應的NFS。

3 命令


  1. 服務端重新掛載nfs 
  2. exportfs -arv 
  3. 服務端解除安裝全部nfs 
  4. exportfs -auv 
  5. 服務端|客戶端 顯示nfs共享目錄 
  6. showmount -e [ip] 



擴充套件

NFS 的長連線


  1. 顯示NFS 共享目錄 
  2. $ showmount -e 
  3. Export list for one.test.com: 
  4. /data/iso         10.0.100.0/24,192.168.57.0/24 
  5. /data/htdocs/8080 10.0.100.0/24,192.168.6.0/24 
  6.  
  7. 査看與NFS繫結的連線 
  8. $ netstat -antulp | grep 2049 
  9. tcp        0      0 0.0.0.0:2049                0.0.0.0:*                   LISTEN      –                   
  10. tcp        0      0 192.168.57.71:2049          192.168.57.92:984           ESTABLISHED –                   
  11. udp        0      0 0.0.0.0:2049                0.0.0.0:*                               –     
  12.  
  13. 當客戶端掛載NFS 後,客戶端就與服務端保持連線狀態”ESTABLISHED”,如果幾百個NFS客戶端,
  14. 嘿嘿 不過如果在掛載時使用bg引數使用後臺,則會在沒有資料時釋放連線。 

 

#update 20120716 結合nfs client 與 web 伺服器

//統一許可權以www使用者與組為準


  1. 1 nfs server 共享目錄的許可權 www
  2.  
  3. grep -i `www` /etc/passwd 
  4. www:x:501:501::/home/www:/sbin/nologin 
  5.  
  6. ll /data/ | grep www 
  7. drwxr-xr-x 3 www      www       4096 Jul 16 11:05 www 
  8.  
  9. grep -i `www` /etc/exports 
  10. /data/www/bbs/ 10.0.100.0/24(rw,sync) 
  11.  
  12.  
  13. 2 nfs client 端擁有相同的uid/gid (使用者與組) 
  14. grep -i `www` /etc/passwd 
  15. www:x:501:501::/home/www:/sbin/nologin 
  16.  
  17.  
  18. 3 nfs client 端 web 伺服器使用www使用者與組 
  19. //以nginx 為例 
  20. user  www www; 

#


  1. chkconfig –list | grep -E `nfs|port|rpc.*3:on` 
  2. nfs             0:off   1:off   2:off   3:off   4:off   5:off   6:off 
  3. nfslock         0:off   1:off   2:off   3:off   4:off   5:off   6:off 
  4. rpcbind         0:off   1:off   2:on    3:on    4:on    5:on    6:off 




參考
http://linux.vbird.org/linux_server/0330nfs.php

#update 20121009

使用 NFS時請先將rpcbind 服務啟動,rhel5/centos5 系列為 portmap 服務,rhel6/centos6 系列為 rpcbind 服務

NFS Server


  1. chkconfig –list | grep -E `nfs|portmap|rpcbind` 
  2. nfs             0:off   1:off   2:on    3:on    4:on    5:on    6:off 
  3. nfslock         0:off   1:off   2:on    3:on    4:on    5:on    6:off 
  4. portmap         0:off   1:off   2:on    3:on    4:on    5:on    6:off 

NFS Client


  1. chkconfig –list | grep -E `nfs|portmap|rpcbind` 
  2. nfs             0:off   1:off   2:off   3:off   4:off   5:off   6:off 
  3. nfslock         0:off   1:off   2:off   3:off   4:off   5:off   6:off 
  4. rpcbind         0:off   1:off   2:on    3:on    4:on    5:on    6:off 

 

#update 20121010

什麼是RPC?Remote Procedure Call,遠端過程呼叫
因為NFS支援的功能相當,而不同的功能都會使用不同的程式啟動,每啟動一個功能就會啟用一些傳輸資料,因此NFS的功能對應口才沒有固定,而隨機取用一些未被使用的小於1024因為使用者端得要知道伺服器端的相關埠口才能夠連線吧

此時我們就得需要遠端程式呼叫(RPC)的服務啦!RPC最主要功能就是指定每個NFS功能對應埠號,並且回報使用者,讓使用者可以連結到正確的埠口上去RPC如何知道每個NFS呢?是因為伺服器啟動NFS時會隨機取用數個埠口並主動的RPC註冊因此RPC可以知道每個口對應的NFS功能然後RPC固定使用的111埠監聽使用者的需求回報使用者正確的,所以當然可以NFS啟動更為輕鬆愉快了!

1 使用者端會向伺服器端的RPC(埠111)發出NFS檔案存取功能的詢問要求;

2 伺服器端找到對應的已註冊的NFS守護程式埠口後,會回報給使用者端;

3 使用者端了解正確的埠口後,就可以直接與NFS守護程式來連線。

由於NFS的各項功能都必須要向RPC來註冊,如此一來RPC才能瞭解NFS這個服務的各項功能之埠號,PID,NFS在伺服器所監聽的IP等等,而用 戶端才能夠透過RPC的詢問找到正確對應的埠口。也就是說,NFS必須要有RPC存在時才能成功的提供服務,因此我們稱NFS為RPC伺服器的一種。事實 上,有很多這樣的伺服器都是向RPC註冊的,舉例來說,NIS(網路資訊服務)也是RPC伺服器的一種呢。此外,由圖13.1-2你也會知道,不論是使用者 端還是伺服器端,要使用NFS時,兩者都需要啟動RPC才行喔.

 

 

結束

更多請:

linux 相關 37275208
vmware 虛擬化相關  166682360


本文轉自 dongnan 51CTO部落格,原文連結:http://blog.51cto.com/dngood/827766


相關文章