1、NFS介紹
NFS(Network File System)即網絡文件系統,它允許網絡中的計算機之間通過TCP/IP網絡共享資源。將NFS主機分享的目錄,掛載到本地客戶端當中,本地NFS的客戶端應用可以讀寫位於遠端NFS服務器上的文件。在客戶端看起來,就像訪問本地文件一樣。
2、NFS原理
2.1、NFS服務原理
NFS支持的功能相當多,而不同的功能都會使用不同的程序來啟動,每啟動一個功能就會啟用一些端口來傳輸數據,因此NFS的功能對應的端口並不固定,客戶端要知道NFS服務器端的相關端口才能建立連接進行數據傳輸,而RPC就是用來統一管理NFS端口的服務,並且統一對外的端口是111,RPC會記錄NFS端口的信息,如此我們就能夠通過RPC實現服務端和客戶端溝通端口信息。PRC最主要的功能就是指定每個NFS功能所對應的port number,並且通知客戶端,記客戶端可以連接到正常端口上去。
在啟動NFS SERVER之前,首先要啟動RPC服務(即portmap或rpcbind服務)否則NFS SERVER就無法向RPC服務區注冊,另外,如果RPC服務重新啟動,原來已經注冊好的NFS端口數據就會全部丟失。因此此時RPC服務管理的NFS程序也要重新啟動以重新向RPC注冊。一般修改NFS配置文檔后,是不需要重啟NFS的,直接在命令執行/etc/init.d/nfs reload或exportfs –rv即可使修改的/etc/exports生效。
2.2、NFS服務的優缺點
優點 :
a.節省本地存儲空間,將常用的數據存放在一台服務器可以通過網絡訪問該數據
缺點 :
a.局限性容易發生單點故障,服務器機宕機的話所有客戶端都不能訪問
b.在高並發情況下NFS效率/性能有限
c.客戶端沒用用戶認證機制,且數據是通過明文傳送,安全性一般(一般建議在局域網內使用)
d.NFS的數據是明文的,對數據完整性不做驗證
e.多台機器掛載NFS服務器時,連接管理維護麻煩
3、NFS安裝
# 1、檢查rcpbind 和 nfs是否安裝
rpm -qa nfs-utils rpcbind
# 2、安裝nfs 和 rpcbind
yum install nfs-utils rpcbind -y
# 3、通過systemctl設置自啟動
systemctl enable nfs-server
systemctl enable rpcbind
# 4、驗證是否自啟動
systemctl is-active nfs-server
systemctl is-active rpcbind
4、NFS共享及客戶端掛載
4.1、NFS共享
# 1、通過/etc/exports文件定義共享目錄,vi編輯exports文件
vi /etc/exports
# 2、加入共享目錄和共享規則
#以讀寫的方式共享目錄 /public 能被IP為 10.84.196.* 網段的服務器訪問
/opt/resources 10.84.196.*(rw,sync,no_root_squash)
#共享格式為:
共享目錄絕對路徑 授權訪問的IP或網段(權限1,權限2)
權限說明
ro 只讀訪問
rw 讀寫訪問
sync 所有數據在請求時寫入共享
async NFS在寫入數據前可以相應請求
secure NFS通過1024以下的安全TCP/IP端口發送
insecure NFS通過1024以上的端口發送
wdelay 如果多個用戶要寫入NFS目錄,則歸組寫入(默認)
no_wdelay 如果多個用戶要寫入NFS目錄,則立即寫入,當使用async時,無需此設置。
hide 在NFS共享目錄中不共享其子目錄
no_hide 共享NFS目錄的子目錄
subtree_check 如果共享/usr/bin之類的子目錄時,強制NFS檢查父目錄的權限(默認)
no_subtree_check 和上面相對,不檢查父目錄權限
all_squash 共享文件的UID和GID映射匿名用戶anonymous,適合公用目錄。
no_all_squash 保留共享文件的UID和GID(默認)
root_squash root用戶的所有請求映射成如anonymous用戶一樣的權限(默認)
no_root_squash root用戶具有根目錄的完全管理訪問權限
anonuid=xxx 指定NFS服務器/etc/passwd文件中匿名用戶的UID
anongid=xxx 指定NFS服務器/etc/passwd文件中匿名用戶的GID
# 3、保存退出后,通過exportfs命令重新加載共享文件列表/etc/exports,生效設置
exportfs -r
# 4、查看共享目錄
exports -v
# exportfs - 管理NFS共享文件系統列表
exportfs命令:
-a 打開或取消所有目錄共享。
-o options,... 指定一列共享選項,與 exports(5) 中講到的類似。
-i 忽略 /etc/exports 文件,從而只使用默認的和命令行指定的選項。
-r 重新共享所有目錄。它使 /var/lib/nfs/xtab 和 /etc/exports 同步。它將 /etc/exports 中已刪除的條目從 /var/lib/nfs/xtab 中刪除,將內核共享表中任何不再有效的條目移除。
-u 取消一個或多個目錄的共享。
-f 在“新”模式下,刷新內核共享表之外的任何東西。任何活動的客戶程序將在它們的下次請求中得到mountd 添加的新的共享條目。
-v 輸出詳細信息。當共享或者取消共享時,顯示在做什么。顯示當前共享列表的時候,同時顯示共享的選項。
# 卸載所有共享
exportfs -au
# 重掛所有
exportfs -ar
4.2、客戶端掛載
# 1、使用showmount命令查看遠程NFS服務器共享目錄
showmount ip -e
# 2、新建掛載點
mkdir -p /opt/resources
# 3、掛載
mount -t nfs ip:/opt/resources/ /opt/resources/
# 4、設置開機掛載
vi /etc/rc.local
# 將掛載命令加入文件即可
mount -t nfs ip:/opt/resources/ /opt/resources/
# 5、驗證掛載
mount |grep "/opt/resources/"