一 NFS服務介紹
NFS 就是 Network FileSystem 的縮寫,它最大的功能就是可以透過網絡,讓不同的機器、不同的操作系統、可以彼此分享個別的檔案 (share files)。
NFS 支持的功能相當的多,而不同的功能都會使用不同的程序來啟動, 每啟動一個功能就會啟用一些端口來傳輸數據,因此, NFS 的功能所對應的端口才沒有固定住, 而是隨機取用一些未被使用的小于 1024 的埠口來作為傳輸之用。因此,當客戶端想要連上服務器,就得需要遠程過程調用 (RPC) 的服務。RPC 最主要的功能就是在指定每個 NFS 功能所對應的 port number ,并且回報給客戶端,讓客戶端可以連結到正確的埠口上去。
當客戶端有 NFS 檔案存取需求時,他會如何向服務器端要求數據呢?
- 客戶端會向服務器端的 RPC (port 111) 發出 NFS 檔案存取功能的詢問要求;
- 服務器端找到對應的已注冊的 NFS daemon 埠口后,會回報給客戶端;
客戶端了解正確的埠口后,就可以直接與 NFS daemon 來聯機。
二 所需軟件及軟件結構
要設定好 NFS 服務器我們必須要有兩個軟件才行,分別是:
- RPC 主程序:rpcbind
- NFS 主程序:nfs-utils
涉及的配置文件:
- 主要配置文件:/etc/exports
- NFS 文件系統維護指令:/usr/sbin/exportfs
- 分享資源的登錄檔:/var/lib/nfs/*tab
- 客戶端查詢服務器分享資源的指令:/usr/sbin/showmount
三 系統環境
系統CentOS7.2
四 安裝NFS服務
查看系統是否已安裝nfs與rpcbind
[apps@db1n18 ~]$ rpm -qa | grep nfs
nfs-utils-1.3.0-0.21.el7.x86_64
[apps@db1n18 ~]$ $ rpm -qa | grep rpcbind
rpcbind-0.2.0-32.el7.x86_64
如果未安裝,則需要安裝nfs-utils與rpcbind
五、服務器配置
nfs服務器上創建共享目錄/data1/apps/nfs_server/并設置權限
[apps@db1n18 ~]$ mkdir -p nfs_server
[apps@db1n18 ~]$ sudo chmod 666 /data1/apps/nfs_server/
編輯export文件
[apps@db1n18 ~]$ sudo vim /etc/exports
/data1/apps/nfs_server $(server_ip)/24(rw,no_root_squash,no_all_squash,sync)
常見的參數則有:
參數值 內容說明
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 啰。
使配置生效
[apps@db1n18 ~]$ sudo exportfs -r
啟動rpcbind、nfs服務
[apps@db1n18 ~]$ sudo service rpcbind start
Redirecting to /bin/systemctl start rpcbind.service
[apps@db1n18 ~]$ sudo service nfs start
Redirecting to /bin/systemctl start nfs.service
六 客戶端配置
跟服務端一樣,先查看客戶端是否安裝了nfs
[apps@bssmysql028 ~]$ rpm -qa | grep nfs
nfs-utils-1.3.0-0.21.el7.x86_64
創建掛載目錄
[apps@bssmysql028 ~]$ mkdir -p nfs_client
查看服務器拋出的共享目錄信息
[apps@bssmysql028 ~]$ showmount -e $(server_ip)
Export list for $(server_ip):
/data1/apps/nfs_server $(server_ip)/24
為了提高NFS的穩定性,使用TCP協議掛載,NFS默認用UDP協議
[apps@bssmysql028 ~]$ sudo mount -t nfs $(server_ip):/data1/apps/nfs_server /data1/apps/nfs_client -o proto=tcp -o nolock
七 測試結果
查看掛載結果(其他的在此省略)
[apps@bssmysql028 ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
$(server_ip):/data1/apps/nfs_server 2.2T 1.3T 785G 63% /data1/apps/nfs_client
卸載已掛載的NFS
[apps@bssmysql028 ~]$ sudo umount /data1/apps/nfs_client
[apps@bssmysql028 ~]$ df -h
Filesystem Size Used Avail Use% Mounted on