1. 程式人生 > >NFS服務介紹及實驗

NFS服務介紹及實驗

一、什麼是NFS

NFS 是 Network File System 的縮寫,即網路檔案系統。一種使用於分散式檔案系統的協定,由 Sun 公司開發,於 1984 年向外公佈。功能是通過網路讓不同的機器、不同的作業系統能夠彼此分享個別的資料,讓應用程式在客戶端通過網路訪問位於伺服器磁碟中的資料,是在類 Unix 系統間實現磁碟檔案共享的一種方法 它的主要功能是通過網路讓不同的機器系統之間可以彼此共享檔案和目錄。NFS 伺服器可以允許 NFS 客戶端將遠端 NFS 伺服器端的共享目錄掛載到本地的 NFS 客戶端中。在本地的 NFS 客戶端的機器看來,NFS 伺服器端共享的目錄就好像自己的磁碟分割槽和目錄一樣。

NFS 服務主要用於檔案共享,例如音樂,視訊,音樂等靜態檔案。

二、NFS服務連線原理

NFS 是通過網路來進行服務端和客戶端之間的資料傳輸。兩者之間要傳輸資料就要有想對應的網路埠來進行傳輸。NFS 伺服器到底使用什麼網路埠來傳輸資料的,NFS 伺服器端其實是隨機選擇埠來進行資料傳輸。那 NFS 客戶端又是如何知道NFS伺服器端到底使用的是哪個埠呢?
其實NFS伺服器時通過遠端過程呼叫(remote procedure call 簡稱 RPC) 協議/服務來實現的。也就是說 RPC 服務會統一管理 NFS 的埠,客戶端和服務端通過 RPC 來先溝通 NFS 使用了哪些埠,之後再利用這些埠(小於 1024)來進行資料的傳輸。 也就是 RPC 管理服務端的 NFS 埠分配,客戶端要傳資料,那客戶端的 RPC 會先跟服務端的 RPC 去要伺服器的埠,要到埠後再建立連線,然後傳輸資料。
首先當 NFS 啟動後,就會隨機的使用一些埠,然後 NFS 就會向 RPC 去註冊這些埠。RPC 就會記錄下這些埠。並且 RPC 會開啟 111 埠,等待客戶端 RPC 的請求,如果客戶端有請求,那服務端的 RPC 就會將記錄的 NFS 埠資訊告知客戶端。
在啟動 NFS SERVER 之前,首先要啟動 RPC 服務(即 portmap 服務,下同)否則 NFS SERVER 就無法向 RPC 服務區註冊,另外,如果 RPC 服務重新啟動,原來已經註冊好的 NFS 埠資料就會全部丟失。因此此時 RPC 服務管理的 NFS 程式也要重新啟動以重新向 RPC 註冊。特別注意:一般修改 NFS 配置文件後,是不需要重啟 NFS 的,直接在命令執行

/etc/init.d/nfs  reload
三、NFS服務連線過程
  • 1)首先伺服器端啟動 RPC 服務,並開啟 111 埠
  • 2)啟動 NFS 服務,並向 RPC 註冊埠資訊
  • 3)客戶端啟動 RPC(portmap 服務),向服務端的 RPC(portmap)服務請求服務端的 NFS 埠
  • 4)服務端的 RPC(portmap)服務反饋 NFS 埠資訊給客戶端。
  • 5)客戶端通過獲取的 NFS 埠來建立和服務端的 NFS 連線並進行資料的傳輸
五、相關軟體安裝

協議:
RPC(Remote Procedure Call Protocol) 遠端過程呼叫協議
軟體:
nfs-utils-* :包括 NFS 命令與監控程式
rpcbind-* :支援安全 NFS RPC 服務的連線

注:通常情況下,是作為系統的預設包安裝的
Cent OS6.*之前 rpcbind 叫 portmap

yum install nfs -y 
六、NFS 服務配置

NFS 伺服器的配置相對比較簡單,只需要在相應的配置檔案中進行設定,然後啟動 NFS 伺服器即可。
NFS 服務的配置檔案為 /etc/exports,這個檔案是 NFS 的主要配置檔案,不過系統並沒有預設值,所以這個檔案不一定會存在,可能要使用 vim 手動建立,然後在檔案裡面寫入配置內容。

共享目錄  客戶機(訪問許可權,使用者對映,其他) 
客戶機
  • 指定 ip 地址的主機:100.100.100.200
  • 指定子網中的所有主機:100.100.100.0
  • 指定域名的主機:www.love1.com
  • 指定域中的所有主機:*.love1.com
  • 所有主機:*
訪問許可權
  • 設定輸出目錄只讀:ro
  • 設定輸出目錄讀寫:rw
使用者對映
  • root_squash:將 root 使用者的訪問對映為匿名(nfsnobody)使用者 uid 和 gid;(預設生效)
  • no_root_squash:保留管理員許可權,以伺服器管理員的許可權管理;
  • all_squash:將遠端訪問的使用者及所屬組都對映為指定 uid、gid 的匿名使用者;
    anonuid=xxx:將遠端訪問的所有使用者都對映為指定 uid 的匿名使用者
    anongid=xxx:將遠端訪問的所有使用者組都對映為指定 gid 匿名組賬戶
其他
  • sync: 將資料同步寫入記憶體緩衝區與磁碟中,效率低,但可以保證資料的一致性(同步);
  • async:將資料先儲存在記憶體緩衝區中,必要時才寫入磁碟(非同步)
七、NFS 服務管理

1、啟動 NFS 伺服器

service rpcbind start 
service nfs start 

2、查詢 NFS 伺服器狀態

service rpcbind status 
service nfs status   

3、停止 NFS 伺服器
要停止 NFS 執行時,需要先停止 nfs 服務再停止 rpcbind 服務,對於系統中有其他服務(如 NIS)需要使用時,不需要停止 rpcbind 服務。

service nfs stop 
service rpcbind stop 

4、設定 NFS 伺服器的自動啟動狀態
設定開機啟動,預設在2345級別啟動

chkconfig --level rpcbind on 
chkconfig --level  nfs on 

5、檢視 RPC 伺服器開啟了哪些埠

rpcinfo –p localhost
八、相關實驗
1、建立目錄修改配置檔案
[root@centos ~]#mkdir /share
[root@centos ~]#vim /etc/exports
    /share  100.100.100.103(rw)   
[root@centos ~]#service nfs restart
[root@centos ~]# exportfs
/share          100.100.100.103
2、檢視共享服務
[root@centos ~]# showmount -e 100.100.100.102
Export list for 100.100.100.102:
/share 100.100.100.103
3、客戶機掛載
[root@centos ~]# mkdir /share
命令格式:mount NFS伺服器IP:共享目錄 本地掛載點目錄 
[root@centos ~]# mount 100.100.100.102:/share /share  
    #mount –o vers=3 共享 本地 #指定掛載使用nfs V3版本(避免同步延遲)
    #[root@centos /]# mount  -o vers=3 100.100.100.102:/share  /share
[root@centos ~]# mount | grep /share
 100.100.100.102:/share on /share type nfs (rw,vers=4,addr=100.100.100.102,clientaddr=100.100.100.103)
[root@centos share]# echo haha>1.txt
-bash: 1.txt: Permission denied  
#此時,無法寫入檔案,因為沒有檔案系統許可權,/share目錄所屬使用者是root,我們進行掛載時,使用者為nfsnobody,因此沒有許可權。有多種方法,這裡示例兩種。
1)修改配置檔案
[root@centos ~]# vim /etc/exports
    /share  100.100.100.103(no_root_squash,rw)
[root@centos share]# echo haha>1.txt
[root@centos share]# ll
total 4
-rw-r--r-- 1 root root 5 Jan  1 21:38 1.txt
2)修改檔案系統許可權
chmod 777 /share
4、解除安裝和自動掛載

解除安裝:

    1. 解除安裝客戶端的掛載目錄    
        umount 掛載點 
    2. 停止伺服器端的共享 
        exportfs –au

自動掛載

[root@centos ~]# vim /etc/fstab 
格式:
    <server>:</remote/export> </local/directory> nfs < options> 0 0 
    100.100.100.102:/share /sharenfs defaults 0 0 
    #100.100.100.102:/share /share                   nfs     defaults,vers=3 0 0(指定版本)
[root@centos ~]# mount –a 
exportfs命令

如果我們在啟動了NFS之後又修改了/etc/exports,是不是還要重新啟動nfs呢?這個時候我們就可以用exportfs 命令來使改動立刻生效,該命令格式如下:

格式:exportfs [-aruv] 
-a 全部掛載或解除安裝 /etc/exports中的內容  
-r 重新讀取/etc/exports 中的資訊 ,並同步更新/etc/exports、/var/lib/nfs/xtab 
-u 解除安裝單一目錄(和-a一起使用為解除安裝所有/etc/exports檔案中的目錄) 
-v 在export的時候,將詳細的資訊輸出到螢幕上。 

具體例子:

# exportfs -au 解除安裝所有共享目錄 
# exportfs -ra 重新共享所有目錄並輸出詳細資訊
rpcinfo命令
rpcinfo -p 可以查看出RPC開啟的埠所提供的程式有哪些,其中nfs 開啟的是2049,portmapper(rpcbind) 開啟的是111,其餘則是rpc開啟的