Linux 環境下NFS服務安裝及配置

一、NFS概述

NFS 是 Network FileSystem 的縮寫,是讓不一樣的主機、不一樣的操做系統能夠共享存儲的服務。經過 NFS,咱們本地 NFS 的客戶端能夠透明地讀寫位於服務端 NFS 服務器上的文件,就像訪問本地文件同樣方便。vim

NFS 在文件傳送或信息傳送過程當中依賴於 RPC(Remote Procedure Call) 協議,即遠程過程調用, NFS 的各項功能都必需要向 RPC 來註冊,如此一來 RPC 才能瞭解 NFS 這個服務的各項功能 Port、PID、NFS 在服務器所監聽的 IP 等,而客戶端纔可以透過 RPC 的詢問找到正確對應的端口,因此,NFS 必需要有 RPC 存在時才能成功的提供服務,簡單的理解兩者關係:NFS是 一個文件存儲系統,而 RPC 是負責信息的傳輸。安全

下面詳細說明在Linux平臺上配置NFS服務的方法:服務器

二、環境、軟件準備

這裏以CentOS和Ubuntu爲例來講明,物理機、雲主機或虛擬機都可,保障服務器和客戶機之間的網絡暢通。網絡

三、NFS 服務安裝

經過上邊簡要的介紹,咱們知道 NFS 服務須要依賴 RPC 服務,因此這裏 NFS 服務端須要安裝 rpcbind 和 nfs-utils,客戶端只須要安裝 nfs-utils 便可,因爲我選用的爲 CentOS 系統,因此可使用 yum 快速的安裝。app

CentOS

#服務端
$ yum install -y nfs-utils rpcbind
#客戶端
$ yum install -y nfs-utils

Ubuntu

#服務端
apt install nfs-kernel-server
#客戶端
apt install nfs-common

四、NFS 配置及使用

配置NFS服務

咱們在服務端建立一個共享目錄 /data/share ,做爲客戶端掛載的遠端入口,而後設置權限。async

$ mkdir -p /data/share
$ chmod 666 /data/share

而後,修改 NFS 配置文件 /etc/exportstcp

$ vim /etc/exports
#編輯文件內容以下:
/data/share 10.222.77.0/24(rw,sync,insecure,no_subtree_check,no_root_squash)

說明一下,這裏配置後邊有不少參數,每一個參數有不一樣的含義,具體能夠參考下邊。此處,我配置了將 /data/share 文件目錄設置爲容許 IP 爲該 10.222.77.0/24 區間的客戶端掛載,固然,若是客戶端 IP 不在該區間也想要掛載的話,能夠設置 IP 區間更大或者設置爲 * 即容許全部客戶端掛載,例如:ide

#容許全部ip客戶端掛載
/data/share *(ro,sync,insecure,no_root_squash)

參數說明:測試

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

先啓動 RPC 服務

$ service rpcbind start
#或者
$ /bin/systemctl start rpcbind.service

查看 NFS 服務項 rpc 服務器註冊的端口列表ui

$ rpcinfo -p localhost 
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper

注意:此時咱們尚未啓動 NFS 服務,只監聽了 111 端口,接着咱們來啓動 NFS 服務,再來看下注冊的端口列表。

再啓動 NFS 服務

$ service nfs start
#或者
/bin/systemctl start nfs.service

啓動 NFS服務後 rpc 服務已經啓用了對 NFS 的端口映射列表:

$ rpcinfo -p localhost
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  33745  status
    100024    1   tcp  36980  status
    100005    1   udp  20048  mountd
    100005    1   tcp  20048  mountd
    100005    2   udp  20048  mountd
    100005    2   tcp  20048  mountd
    100005    3   udp  20048  mountd
    100005    3   tcp  20048  mountd
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    100021    1   udp  38960  nlockmgr
    100021    3   udp  38960  nlockmgr
    100021    4   udp  38960  nlockmgr
    100021    1   tcp  38362  nlockmgr
    100021    3   tcp  38362  nlockmgr
    100021    4   tcp  38362  nlockmgr

咱們發現,啓動了 NFS 服務後,rpc 註冊的端口列代表顯增多。OK 如今服務端都啓動起來了,在服務端看下是否正確加載了設置的 /etc/exports 配置。

$ showmount -e localhost
Export list for localhost:
/data/share 10.222.77.0/24

五、注意開啓端口

若是使用了防火牆,必定要在服務端把須要的端口打開,不然會客戶端沒法訪問。
默認狀況須要以下端口:

tcp  111 2049  20048 端口
udp 111  4046  端口

六、NFS 測試

最後,在另外一臺 Linux 上測試一下,是否可以正確掛載吧。首先,咱們能夠在客戶端查看下 NFS 服務端 (上邊服務端 IP 爲:10.222.77.86) 設置可共享的目錄信息。

# showmount -e 10.222.77.86
Export list for 10.222.77.86:
/data/share 10.222.77.0/24

而後,在客戶端建立掛在目錄 /share

$ mkdir -p /share

最後,掛載遠端目錄到本地 /share 目錄。

$ mount 10.222.77.86:/data/share /share
$ df -h | grep 10.222.77.86
Filesystem                 Size  Used  Avail Use% Mounted on
10.222.77.86:/data/share   27G   11G   17G   40%  /share

能夠看到,能夠正確將遠端 NFS 目錄掛載到本地。注意:掛載點 /share 目錄必須已經存在,並且目錄中沒有文件或子目錄。

最後,咱們在 NFS 服務端 /data/share 目錄下建立一個文件,看下客戶端是否可以正確讀取並修改。

服務端寫入文件

$ echo "This is NFS server." > /data/share/nfs.txt
$ ll /data/share/
total 4
-rw-r--r-- 1 root root 20 Nov  5 16:49 nfs.txt

在客戶端讀取測試

$ ll /share/
total 4
-rw-r--r-- 1 root root 20 Nov  5 16:49 nfs.txt
$ cat /share/nfs.txt
This is NFS server.

客戶端寫入文件
$ echo "This is NFS client." >> /share/nfs.txt

服務端讀取測試

$ cat /data/share/nfs.txt
This is NFS server.
This is NFS client.

都是木有問題的,這是由於上邊設置了 NFS 遠端目錄權限爲 rw 擁有讀寫權限,若是設置爲 ro,那麼客戶端只能讀取,不能寫入,根據實際應用場景合理配置,這裏就不在演示了。這裏提一下,NFS 默認使用用 UDP 協議來進行掛載,爲了提升 NFS 的穩定性,可使用 TCP 協議掛載,那麼客戶端掛載命令可以使用以下命令:

$ mount 10.222.77.86:/data/share /share -o proto=tcp -o nolock

最後,若是客戶端要卸載 NFS 掛載的話,使用以下命令便可。

$ umount /share
相關文章
相關標籤/搜索