NFS服務介紹及實驗

一、什麼是NFS

NFS 是 Network File System 的縮寫,即網絡文件系統。一種使用於分散式文件系統的協定,由 Sun 公司開發,於 1984 年向外公佈。功能是通過網絡讓不同的機器、不同的操作系統能夠彼此分享個別的數據,讓應用程序在客戶端通過網絡訪問位於服務器磁盤中的數據,是在類 Unix 系統間實現磁盤文件共享的一種方法 它的主要功能是通過網絡讓不同的機器系統之間可以彼此共享文件和目錄。NFS 服務器可以允許 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 的,直接在命令執行

<code>/etc/init.d/nfs  reload/<code>

三、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

<code>yum install nfs -y/<code>

六、NFS 服務配置

NFS 服務器的配置相對比較簡單,只需要在相應的配置文件中進行設置,然後啟動 NFS 服務器即可。

NFS 服務的配置文件為 /etc/exports,這個文件是 NFS 的主要配置文件,不過系統並沒有默認值,所以這個文件不一定會存在,可能要使用 vim 手動建立,然後在文件裡面寫入配置內容。

<code>共享目錄  客戶機(訪問權限,用戶映射,其他)/<code>

客戶機

  • 指定 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 服務器

<code>service rpcbind start service nfs start/<code>

2、查詢 NFS 服務器狀態

<code>service rpcbind status service nfs status/<code>

3、停止 NFS 服務器

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

<code>service nfs stop service rpcbind stop/<code>

4、設置 NFS 服務器的自動啟動狀態

設置開機啟動,默認在2345級別啟動

<code>chkconfig --level rpcbind on chkconfig --level  nfs on/<code>

5、查看 RPC 服務器開啟了哪些端口

<code>rpcinfo –p localhost/<code>

八、相關實驗

1、創建目錄修改配置文件

<code>[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/<code>

2、查看共享服務

<code>[root@centos ~]# showmount -e 100.100.100.102Export list for 100.100.100.102:/share 100.100.100.103/<code> 

3、客戶機掛載

<code>[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]# lltotal 4-rw-r--r-- 1 root root 5 Jan  1 21:38 1.txt2)修改文件系統權限chmod 777 /share/<code>

4、卸載和自動掛載

卸載:

<code>1. 卸載客戶端的掛載目錄            umount 掛載點     2. 停止服務器端的共享         exportfs –au/<code>

自動掛載

<code>[root@centos ~]# vim /etc/fstab 格式:    <server>:  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/<server>/<code>

exportfs命令

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

<code>格式:exportfs [-aruv] -a 全部掛載或卸載 /etc/exports中的內容  -r 重新讀取/etc/exports 中的信息 ,並同步更新/etc/exports、/var/lib/nfs/xtab -u 卸載單一目錄(和-a一起使用為卸載所有/etc/exports文件中的目錄) -v 在export的時候,將詳細的信息輸出到屏幕上。/<code>

具體例子:

<code># exportfs -au 卸載所有共享目錄 # exportfs -ra 重新共享所有目錄並輸出詳細信息/<code>

rpcinfo命令

<code>rpcinfo -p 可以查看出RPC開啟的端口所提供的程序有哪些,其中nfs 開啟的是2049,portmapper(rpcbind) 開啟的是111,其餘則是rpc開啟的/<code>


分享到:


相關文章: