NFS服務

但願人長久zz發表於2020-10-18

NFS服務簡介

什麼是NFS?

NFS就是Network File System的縮寫,它最大的功能就是可以通過網路,讓不同的機器、不同的作業系統可以共享彼此的檔案。

NFS伺服器可以讓PC將網路中的NFS伺服器共享的目錄掛載到本地端的檔案系統中,而在本地端的系統中來看,那個遠端主機的目錄就好像是自己的一個磁碟分割槽一樣,在使用上相當便利;

NFS一般用來儲存共享視訊,圖片等靜態資料。

NFS掛載原理:伺服器掛載結構圖

如上圖示:

當我們在NFS伺服器設定好一個共享目錄/home/public後,其他的有權訪問NFS伺服器的NFS客戶端就可以將這個目錄掛載到自己檔案系統的某個掛載點,這個掛載點可以自己定義,如上圖客戶端A與客戶端B掛載的目錄就不相同。並且掛載好後我們在本地能夠看到服務端/home/public的所有資料。如果伺服器端配置的客戶端只讀,那麼客戶端就只能夠只讀。如果配置讀寫,客戶端就能夠進行讀寫。掛載後,NFS客戶端檢視磁碟資訊命令:#df –h。

既然NFS是通過網路來進行伺服器端和客戶端之間的資料傳輸,那麼兩者之間要傳輸資料就要有想對應的網路埠,NFS伺服器到底使用哪個埠來進行資料傳輸呢?基本上NFS這個伺服器的埠開在2049,但由於檔案系統非常複雜。因此NFS還有其他的程式去啟動額外的埠,這些額外的用來傳輸資料的埠是隨機選擇的,是小於1024的埠;既然是隨機的那麼客戶端又是如何知道NFS伺服器端到底使用的是哪個埠呢?這時就需要通過遠端過程呼叫(Remote Procedure Call,RPC)協議來實現了!

RPC與NFS通訊原理:

因為NFS支援的功能相當多,而不同的功能都會使用不同的程式來啟動,每啟動一個功能就會啟用一些埠來傳輸資料,因此NFS的功能對應的埠並不固定,客戶端要知道NFS伺服器端的相關埠才能建立連線進行資料傳輸,而RPC就是用來統一管理NFS埠的服務,並且統一對外的埠是111,RPC會記錄NFS埠的資訊,如此我們就能夠通過RPC實現服務端和客戶端溝通埠資訊。PRC最主要的功能就是指定每個NFS功能所對應的port number,並且通知客戶端,記客戶端可以連線到正常埠上去。

那麼RPC又是如何知道每個NFS功能的埠呢?

首先當NFS啟動後,就會隨機的使用一些埠,然後NFS就會向RPC去註冊這些埠,RPC就會記錄下這些埠,並且RPC會開啟111埠,等待客戶端RPC的請求,如果客戶端有請求,那麼伺服器端的RPC就會將之前記錄的NFS埠資訊告知客戶端。如此客戶端就會獲取NFS伺服器端的埠資訊,就會以實際埠進行資料的傳輸了。

注意:在啟動NFS SERVER之前,首先要啟動RPC服務(即portmap服務,下同)否則NFS SERVER就無法向RPC服務區註冊,另外,如果RPC服務重新啟動,原來已經註冊好的NFS埠資料就會全部丟失。因此此時RPC服務管理的NFS程式也要重新啟動以重新向RPC註冊。特別注意:一般修改NFS配置文件後,是不需要重啟NFS的,直接在命令執行systemctl reload nfs或exportfs –rv即可使修改的/etc/exports生效

NFS客戶端和NFS伺服器通訊過程:

在這裡插入圖片描述

  •    1. 首先伺服器端啟動RPC服務,並開啟111埠
    
  •    2. 伺服器端啟動NFS服務,並向RPC註冊埠資訊
    
  •     3. 客戶端啟動RPC(portmap服務),向服務端的RPC(portmap)服務請求服務端的NFS埠
    
  •     4. 服務端的RPC(portmap)服務反饋NFS埠資訊給客戶端。
    
  •     5. 客戶端通過獲取的NFS埠來建立和服務端的NFS連線並進行資料的傳輸。
    

Linux下NFS伺服器部署

NFS服務所需軟體及主要配置檔案:

安裝NFS服務,需要安裝兩個軟體,分別是:

· RPC主程式:rpcbind

NFS 其實可以被視為一個 RPC 服務,因為啟動任何一個 RPC 服務之前,我們都需要做好 port 的對應 (mapping) 的工作才行,這個工作其實就是『 rpcbind 』這個服務所負責的!也就是說, 在啟動任何一個 RPC 服務之前,我們都需要啟動 rpcbind 才行! (在 CentOS 5.x 以前這個軟體稱為 portmap,在 CentOS 6.x 之後才稱為 rpcbind 的!)。

· NFS主程式:nfs-utils

就是提供 rpc.nfsd 及 rpc.mountd 這兩個 NFS daemons 與其他相關 documents 與說明檔案、執行檔案等的軟體!這個就是 NFS 服務所需要的主要軟體。

NFS的相關檔案:

主要配置檔案:/etc/exports
· 這是 NFS 的主要配置檔案了。該檔案是空白的,有的系統可能不存在這個檔案,主要手動建立。NFS的配置一般只在這個檔案中配置即可。

NFS 檔案系統維護指令:/usr/sbin/exportfs
· 這個是維護 NFS 分享資源的指令,可以利用這個指令重新分享 /etc/exports 變更的目錄資源、將 NFS Server 分享的目錄卸除或重新分享。

分享資源的登入檔:/var/lib/nfs/*tab
· 在 NFS 伺服器的登入檔案都放置到 /var/lib/nfs/ 目錄裡面,在該目錄下有兩個比較重要的登入檔, 一個是 etab ,主要記錄了 NFS 所分享出來的目錄的完整許可權設定值;另一個 xtab 則記錄曾經連結到此 NFS 伺服器的相關客戶端資料。

客戶端查詢伺服器分享資源的指令:/usr/sbin/showmount
這是另一個重要的 NFS 指令。exportfs 是用在 NFS Server 端,而 showmount 則主要用在 Client 端。showmount 可以用來察看 NFS 分享出來的目錄資源。

vi /etc/exports 時裡面的許可權引數

用於配置NFS服務程式配置檔案的引數:
引數 作用
ro 只讀
rw 讀寫
root_squash 當NFS客戶端以root管理員訪問時,對映為NFS伺服器的匿名使用者
no_root_squash 當NFS客戶端以root管理員訪問時,對映為NFS伺服器的root管理員
all_squash 無論NFS客戶端使用什麼賬戶訪問,均對映為NFS伺服器的匿名使用者
sync 同時將資料寫入到記憶體與硬碟中,保證不丟失資料
async 優先將資料儲存到記憶體,然後再寫入硬碟;這樣效率更高,但可能會丟失數

相關文章