NFS介紹與搭建

2022-07-14 18:01:21

一、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檔案共用系統