NFS 是 Network File System 的縮寫,即網絡文件系統。一種使用於分散式文件系統的協定,由 Sun 公司開發,於 1984 年向外公佈。功能是經過網絡讓不一樣的機器、不一樣的操做系統可以彼此分享個別的數據,讓應用程序在客戶端經過網絡訪問位於服務器磁盤中的數據,是在類 Unix 系統間實現磁盤文件共享的一種方法 它的主要功能是經過網絡讓不一樣的機器系統之間能夠彼此共享文件和目錄。NFS 服務器能夠容許 NFS 客戶端將遠端 NFS 服務器端的共享目錄掛載到本地的 NFS 客戶端中。在本地的 NFS 客戶端的機器看來,NFS 服務器端共享的目錄就好像本身的磁盤分區和目錄同樣。vim
NFS 服務主要用於文件共享,例如音樂,視頻,音樂等靜態文件。centos
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
協議:
RPC(Remote Procedure Call Protocol) 遠程過程調用協議
軟件:
nfs-utils-* :包括 NFS 命令與監控程序
rpcbind-* :支持安全 NFS RPC 服務的鏈接bash
注:一般狀況下,是做爲系統的默認包安裝的
Cent OS6.*以前 rpcbind 叫 portmap服務器
yum install nfs -y
NFS 服務器的配置相對比較簡單,只須要在相應的配置文件中進行設置,而後啓動 NFS 服務器便可。
NFS 服務的配置文件爲 /etc/exports,這個文件是 NFS 的主要配置文件,不過系統並無默認值,因此這個文件不必定會存在,可能要使用 vim 手動創建,而後在文件裏面寫入配置內容。網絡
共享目錄 客戶機(訪問權限,用戶映射,其餘)
一、啓動 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
[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
若是咱們在啓動了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 -p 能夠查看出RPC開啓的端口所提供的程序有哪些,其中nfs 開啓的是2049,portmapper(rpcbind) 開啓的是111,其他則是rpc開啓的