NFS 是Network File System的縮寫,即網絡檔案系統。一種使用于分散式檔案系統的協定。功能是通過網絡讓不同的機器、不同的作業系統能夠彼此分享個别的資料讓應用程式在用戶端通過網絡通路位于伺服器磁盤中的資料,是在類Unix系統間實作磁盤檔案共享的一種方法。NFS 的基本原則是“容許不同的用戶端及服務端通過一組RPC分享相同的檔案系統”,它是獨立于作業系統,容許不同硬體及作業系統的系統共同進行檔案的分享。NFS在檔案傳送或資訊傳送過程中依賴于RPC協定。RPC,遠端過程調用(Remote Procedure Call) 是能使用戶端執行其他系統中程式的一種機制。NFS本身是沒有提供資訊傳輸的協定和功能的,但NFS卻能讓我們通過網絡進行資料的分享,這是因為NFS使用了一些其它的傳輸協定。而這些傳輸協定用到這個RPC功能的。可以說NFS本身就是使用RPC的一個程式。或者說NFS也是一個RPC SERVER。是以隻要用到NFS的地方都要啟動RPC服務,不論是NFSSERVER或者NFS CLIENT。這樣SERVER和CLIENT才能通過RPC來實作PROGRAM PORT的對應。可以這麼了解RPC和NFS的關系:NFS是一個檔案系統,而RPC是負責資訊的傳輸。
作業系統:CentOS Linux release 7.3.1611 (Core)
服務端:10.0.1.16
用戶端:10.0.1.1 10.0.1.2
指令如下:
#yum list |grep nfs-utils #檢視是否有nfs-utils的rpm包
#yum install nfs-utils.x86_64 -y #安裝nfs-utils
#groupadd -g 1005 rick
#useradd -g 1005 -u 1005-M rick
#mkdir -p /share/data
#chown -R rick:rick /share/data
注:1005是使用者id和使用者組id,這個實驗我使用自定義的;也可以使用預設的,使用
cat /etc/passwd |grep rick 指令行檢視,例如
rick:x:1001:1001::/home/rick:/bin/bash
以冒号為分隔符,第一個字段是使用者名稱;第二個字段是密碼,是隐藏的;第三個字段是使用者id;第四個字段是使用者組id;第五個字段是描述;第六個字段是使用者的主目錄;第七個字段是使用者可用的shell。
指令:vim /etc/exports
添加 /share/data *(rw,sync,all_squash,anonuid=1005,anongid=1005)
共享目錄 權限設定,*代表允許所有ip通路,其他權限參考2.4節
注:這裡為了友善使用*來設定可通路共享目錄的ip,為了安全起見,部署的時候建議指定可通路的單個ip或者一個網段,
例如
/share/data 10.0.1.1(rw,sync,all_squash,anonuid=1005,anongid=1005)
#指定單個ip可通路共享檔案目錄
/share/data 10.0.1.0/24(rw,sync,all_squash,anonuid=1005,anongid=1005)
#指定某個網段可以通路共享檔案目錄
或者
10.0.1.2(rw,sync,all_squash,anonuid=1005,anongid=1005)
#上面兩行是連接配接起來的哦,ip()空格ip(),多個ip使用空格分隔
#指定多ip可通路共享檔案目錄
systemctl start rpcbind.service
systemctl start nfs-server.service
#firewall-cmd --permanent --add-port=111/tcp
#firewall-cmd --permanent --add-port=2049/tcp
#firewall-cmd --reload
yum install nfs-utils.x86_64 -y
mount -t nfs 10.0.1.16:/share/data /opt
注:/opt目錄是自定義的,如果本地沒有此目錄會自動建立
vim /etc/fstab
添加10.0.1.16:/share/data /opt nfs defaults 0 0
參數值
內容說明
rw
ro
該目錄分享的權限是可讀寫 (read-write) 或唯讀 (read-only),但最終能不能讀寫,還是與檔案系統的 rwx 及身份有關。
sync
async
sync 代表資料會同步寫入到記憶體與硬碟中,async 則代表資料會先暫存於記憶體當中,而非直接寫入硬碟!
no_root_squash
root_squash
用戶端使用 NFS 檔案系統的帳號若為 root 時,系統該如何判斷這個帳號的身份?預設的情況下,用戶端 root 的身份會由 root_squash 的設定壓縮成 nfsnobody, 如此對伺服器的系統會較有保障。但如果你想要開放用戶端使用 root 身份來操作伺服器的檔案系統,那麼這裡就得要開 no_root_squash 才行!
all_squash
不論登入 NFS 的使用者身份為何, 他的身份都會被壓縮成為匿名使用者,通常也就是 nobody(nfsnobody) 啦!
anonuid
anongid
anon 意指 anonymous (匿名者) 前面關於 *_squash 提到的匿名使用者的 UID 設定值,通常為 nobody(nfsnobody),但是你可以自行設定這個 UID 的值!當然,這個 UID 必需要存在於你的 /etc/passwd 當中! anonuid 指的是 UID 而 anongid 則是群組的 GID 囉。
本文是參考鳥哥的私房菜-伺服器而進行的實驗,且本文沒有鳥哥寫的那麼詳細。