NFS服務介紹及實驗

1、什麼是NFS

NFS 是 Network File System 的縮寫,即網絡文件系統。一種使用於分散式文件系統的協定,由 Sun 公司開發,於 1984 年向外公佈。功能是經過網絡讓不一樣的機器、不一樣的操做系統可以彼此分享個別的數據,讓應用程序在客戶端經過網絡訪問位於服務器磁盤中的數據,是在類 Unix 系統間實現磁盤文件共享的一種方法 它的主要功能是經過網絡讓不一樣的機器系統之間能夠彼此共享文件和目錄。NFS 服務器能夠容許 NFS 客戶端將遠端 NFS 服務器端的共享目錄掛載到本地的 NFS 客戶端中。在本地的 NFS 客戶端的機器看來,NFS 服務器端共享的目錄就好像本身的磁盤分區和目錄同樣。vim

NFS 服務主要用於文件共享,例如音樂,視頻,音樂等靜態文件。centos

2、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
3、NFS服務鏈接過程
  • 1)首先服務器端啓動 RPC 服務,並開啓 111 端口
  • 2)啓動 NFS 服務,並向 RPC 註冊端口信息
  • 3)客戶端啓動 RPC(portmap 服務),向服務端的 RPC(portmap)服務請求服務端的 NFS 端口
  • 4)服務端的 RPC(portmap)服務反饋 NFS 端口信息給客戶端。
  • 5)客戶端經過獲取的 NFS 端口來創建和服務端的 NFS 鏈接並進行數據的傳輸
5、相關軟件安裝

協議:
RPC(Remote Procedure Call Protocol) 遠程過程調用協議
軟件:
nfs-utils-* :包括 NFS 命令與監控程序
rpcbind-* :支持安全 NFS RPC 服務的鏈接bash

注:一般狀況下,是做爲系統的默認包安裝的
Cent OS6.*以前 rpcbind 叫 portmap服務器

yum install nfs -y
6、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:將數據先保存在內存緩衝區中,必要時才寫入磁盤(異步)
7、NFS 服務管理

一、啓動 NFS 服務器app

service rpcbind start 
service nfs start

二、查詢 NFS 服務器狀態異步

service rpcbind status 
service nfs status

三、中止 NFS 服務器
要中止 NFS 運行時,須要先中止 nfs 服務再中止 rpcbind 服務,對於系統中有其餘服務(如 NIS)須要使用時,不須要中止 rpcbind 服務。async

service nfs stop 
service rpcbind stop

四、設置 NFS 服務器的自動啓動狀態
設置開機啓動,默認在2345級別啓動ui

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

五、查看 RPC 服務器開啓了哪些端口

rpcinfo –p localhost
8、相關實驗
一、建立目錄修改配置文件
[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
二、查看共享服務
[root@centos ~]# showmount -e 100.100.100.102
Export list for 100.100.100.102:
/share 100.100.100.103
三、客戶機掛載
[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
四、卸載和自動掛載

卸載:

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開啓的
相關文章
相關標籤/搜索