一、NFS的介紹
1.1、什麼是NFS
- NFS 是Network File System的縮寫,即網路檔案系統。一種使用於分散式檔案系統的協定,由Sun公司開發,於1984年向外公佈。
- NFS在檔案傳送或資訊傳送過程中依賴於RPC協議。RPC:遠端過程呼叫 (Remote Procedure Call) 是能使客戶端執行其他系統中程式的一種機制。
- NFS伺服器可以看作是一個FILE SERVER。它可以讓你的機器(客戶端)通過網路將遠端的NFS SERVER共享目錄MOUNT到自己的系統中。
在客戶端看來使用NFS的遠端檔案就象是在使用本地檔案一樣,原理圖如下:
1.2、NFS守護程式
- nfsd:它是基本的NFS守護程式,主要功能是管理客戶端是否能夠登入伺服器;
- mountd:它是RPC安裝守護程式,主要功能是管理NFS的檔案系統。當客戶端登入到NFS伺服器後,必須通過檔案使用許可權的驗證。它會讀取NFS的配置檔案/etc/exports來對比客戶端許可權。
- portmap:主要功能是進行埠對映工作。
1.3、NFS伺服器的配置
1.3.1 需要的包:一般都預設安裝好了,如果需要可從映象檔案中安裝。
1.3.2 NFS的相關配置檔案和命令
- /etc/exports NFS服務的主要配置檔案
- /usr/sbin/exportfs NFS服務的管理命令
- /usr/sbin/showmount 檢視命令
1.3.3 /etc/exports檔案內容格式:
<輸出目錄> [客戶端1 選項(訪問許可權,使用者對映,其他)] [客戶端2 選項(訪問許可權,使用者對映,其他)]
如:將NFS Server的/soft共享給192.168.3.0/24網段,許可權為讀寫。
[root@NFS ~]# vi /etc/exports /soft 192.168.3.0/24(rw) 訪問許可權
二、NFS 搭建
2.1. 建立NFS伺服器
2.1.1 安裝nfs-utils和RPC
[root@NFS ~]# rpm -qa nfs-utils rpcbin #檢查系統中是否安裝 NFS 和 RPC [root@NFS ~]# yum -y install nfs-utils rpcbind #使用 yum 安裝nfs 和 rpc
2.1.2 建立共享目錄
[root@NFS ~]# mkdir -p /data/nfs/ [root@NFS ~]# chmod 777 /data/nfs/ [root@NFS ~]# ll /data
2.1.3 編輯配置NFS配置檔案
編輯
/etc/exports
檔案新增需要共享目錄,每個目錄的設定獨佔一行,編寫格式如下:NFS共享目錄路徑 客戶機IP段(引數1,引數2,...,引數n)
引數說明:
引數 | 說明 |
---|---|
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 |
- 注1:儘量指定IP段最小化授權可以訪問NFS 掛載的資源的客戶端
- 注2:經測試引數insecure必須要加,否則客戶端掛載出錯 mount.nfs: access denied by server while mounting
例子:
[root@NFS ~]# cat >>/etc/exports<<EOF > /data/nfs 192.168.3.87(rw,sync,no_subtree_check) 192.168.3.88(rw,sync,no_subtree_check) > EOF [root@NFS ~]# cat /etc/exports /data/nfs 192.168.3.87(rw,sync,no_subtree_check) 192.168.3.88(rw,sync,no_subtree_check) [root@NFS ~]#
2.1.4 啟動RPC和NFS服務
[root@NFS ~]# systemctl start rpcbind # 啟動rpc [root@NFS ~]# systemctl start nfs-server #啟動nfs [root@NFS ~]# systemctl enable rpcbind #設定開機自啟 [root@NFS ~]# systemctl enable nfs-server #設定開機自啟
2.1.5 設定配置檔案生效
[root@NFS ~]# exportfs -r #讓配置檔案生效
2.1.6 檢查
[root@NFS ~]# rpcinfo -p localhost # 檢查NFS服務是否向rpc註冊埠資訊 [root@NFS ~]# showmount -e # 檢查共享目錄資訊
2.2 客戶端掛載
2.2.1 檢查客戶端是否可以連線服務端
[root@localhost ~]# showmount -e 192.168.0.89 # 檢查共享目錄資訊 Export list for 192.168.3.89: /u01/upload 192.168.3.88,192.168.3.85,192.168.3.87
2.2.2 進行掛載
[root@localhost ~]# mount -t nfs 192.168.3.89:/data/nfs /u01/upload # 進行磁碟掛載 [root@localhost ~]# df -h #檢查掛載情況 [root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 50G 7.4G 43G 15% / devtmpfs 16G 0 16G 0% /dev tmpfs 16G 0 16G 0% /dev/shm tmpfs 16G 8.9M 16G 1% /run tmpfs 16G 0 16G 0% /sys/fs/cgroup /dev/sda1 1014M 145M 870M 15% /boot /dev/mapper/centos-home 334G 34M 334G 1% /home tmpfs 3.2G 0 3.2G 0% /run/user/0 192.168.3.89:/data/nfs 50G 22G 29G 44% /u01/upload
三、安裝過程中的報錯與解決
報錯一:
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
這個出現在客戶端用 showmount -e 檢查與服務端共享情況時報得錯,一般原因是因為服務端nfs服務沒啟動或者是防火牆沒關閉。
報錯二:
exportfs: 192.168.3.87:/data/share: Function not implemented
這個報錯一般出現在exportfs -r 設定配置檔案生效時出現的,可能是因為相關nfs服務沒啟動或者相關伺服器需要加埠號才能訪問。
解決方法讓如下:
1. 嘗試重啟nfs服務和rpc服務
2. 配置檔案加上埠號如:/data/share/ 192.168.3.87/22(rw,no_root_squash,no_all_squash,sync)
報錯三:
-bash: showmount: command not found
在客戶端測試時,發現無法使用showmount命令,需要執行命令yum -y install nfs-utils安裝相關命令
其它詳情參考:NFS檔案共享系統