Linux - NFS 服務器小結

參考

http://cn.linux.vbird.org/linux_server/0330nfs.php#What_NFS_0



NFS介紹

介紹

NFSNetwork FileSystem的縮寫,主要功能是通過網絡,讓不同的機器,不同的操作系統,可以彼此分享指定的資源文件,可簡單的認爲是一個文件服務器,可以將遠程NFS服務器共享的目錄掛載到本地機器中,在本地機器看起來,被掛載的目錄就像是自己的一個磁盤分區一樣,使用非常方便。

image-20200616151317977

上圖中的NFS服務器設定好了要共享的目錄後,其他客戶端就可直接將該目錄掛載到自己系統上的某個掛載點,就可通過掛載點直接訪問服務器共享目錄中的數據了(前提權限要夠)


NFS數據獲取流程

背景

由於NFS支持的功能較多,不通的功能都會使用不同的程序來啓動,而每一個程序都會啓動一些端口來傳輸數據,所以NFS功能對應的端口沒有固定,而是隨機獲取一些小於1024的端口來用。所以當客戶端需要使用這些端口的時候,就需要遠程過程調用(RPC)的服務了。當NFS服務器在啓動時,會將隨機獲取來的端口都註冊到RPC中,因爲RPC知道每個端口對應的NFS功能,這樣當客戶端請求服務端時,只需要讓監聽在111端口的RPC服務來返回客戶端正確的端口即可。

**注:**所以啓動NFS之前,就需要啓動RPC服務,否則NFS無法向RPC註冊,同時當RPC重啓時,舊的註冊數據就會丟失,他管理的所有服務都需重新向RPC註冊。

所以,當服務端將端口向RPC註冊完成後,若有客戶端有NFS數據存取需求時,執行流程如下:

  1. 客戶端會向服務器端的 RPC (port 111)發出 NFS 檔案存取功能的詢問要求;
  2. 服務器端找到對應的已註冊的端口後,會回報給客戶端;
  3. 客戶端了解正確的端口後,就可以直接與運行在該端口的程序來聯機。

主要配置文件

默認配置文件地址:/etc/exports,該配置文件的內容需要自己手動寫入


語法和參數

[root@suhw ~]# vim /etc/exports
/tmp         192.168.100.0/24(ro)   localhost(rw)   *.ev.ncku.edu.tw(ro,sync)
[分享目錄]    [第一部主機(權限)]   [可用主機]  [可用通配符]

詳細的用戶可參考示例。

權限參考參數,更全的介紹參考 man exports

參數值 內容說明
ro 該主機對共享目錄權限爲只讀權限
rw 該主機對共享目錄權限爲讀寫權限
root_squash 客戶端用root用戶訪問該共享文件夾時,將root用戶映射爲匿名用戶
no_root_squash 客戶端用root用戶訪問該共享文件夾時,不映射root用戶,如果你想要開放客戶端使用 root 身份來操作服務器的文件系統,那麼這裏就得要開 no_root_squash 纔行!
all_squash 客戶機上的任何用戶訪問該共享目錄時都映射成匿名用戶
anonuid 將客戶機上的用戶映射成指定的本地用戶ID的用戶
anongid 將客戶機上的用戶映射成屬於指定的本地用戶組ID
sync 資料同步寫入到內存與硬盤中
async 資料會先暫存於內存中,而非直接寫入硬盤
insecure 允許從這臺機器過來的非授權訪問

舉例

  1. /home/public公開,但是隻有192.168.100.0/24這個網段的用戶可以讀寫,其他來源只能讀取
/home/public 192.168.100.0/24(rw) *(ro)

  1. /home/iso目錄公開,允許所有人進行讀操作
/home/iso        *(ro,insecure,no_root_squash)

注意no_root_squash的功能。在這個例子中,如果你是客戶端,而且你是以 root 的身份登入你的 Linux 主機,那麼當你 mount 上我這部主機的/home/iso之後,你在該 mount 的目錄當中,將具有root的權限!


exportfs指令

利用exportfs可以重新分享/etc/exports 變更的目錄資源、將NFS Server分享的目錄卸除或重新分享等等。

語法和參數

參數 作用
-a 打開或取消所有目錄共享
-o options 指定一列共享選項
-i 忽略 /etc/exports 文件,只使用默認的和命令行指定的選項
-r 重新共享所有目錄,使/etc/exportfs生效
-u 取消一個或多個目錄的共享
-v 輸出詳細信息
-s 顯示/etc/exports中的列表

查看分享資源記錄

NFS服務器的登陸文件都放置到/var/lib/nfs目錄中,比較重要的有etab

etab記錄了NFS所分享出來的目錄的完整權限設定值

/home/iso     (ro,sync,wdelay,hide,nocrossmnt,insecure,no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,insecure,no_root_squash,no_all    _squash)


showmount指令

exportfs是用於在NFS server端維護分享的資源,而shownmount則是用於NFS client端,該命令可以查看出NFS server分享出的目錄資源

語法和參數

showmount [ -adehv ] [ --all ] [ --directories ] [ --exports ] [ --help ] [ --version ] [ host ]

參數選項 作用
-d or --directories 顯示已被nfs客戶端加載的目錄
-e or --exports 顯示nfs服務端上所有的共享目錄


掛載遠程目錄示例

NFS Server 配置

環境準備

要想對NFS server配置首先需要rpcbindnfs-utils

可以使用rpm -qa | grep nfs-utils查詢是否已經安裝該軟件,若沒安裝過執行下列命令

[root@suhw ~]# yum install -y nfs-utils

rpcbindNFS可被視爲RPC服務,而啓動RPC服務之前,我們首先需要啓動rpcbind

[root@suhw ~]# systemctl start rpcbind
[root@suhw ~]# systemctl status rpcbind
● rpcbind.service - RPC bind service
   Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-06-16 10:26:08 CST; 2s ago
  Process: 29537 ExecStart=/sbin/rpcbind -w $RPCBIND_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 29538 (rpcbind)
    Tasks: 1
   Memory: 660.0K
   CGroup: /system.slice/rpcbind.service
           └─29538 /sbin/rpcbind -w

Jun 16 10:26:07 suhw systemd[1]: Starting RPC bind service...
Jun 16 10:26:08 suhw systemd[1]: Started RPC bind service.

由於rpc固定使用111端口,所以可直接查看111端口是否處於監聽狀態

[root@suhw ~]# netstat -tulnp | grep 111
tcp6       0      0 :::111                  :::*                    LISTEN      29538/rpcbind
udp        0      0 0.0.0.0:111             0.0.0.0:*                           29538/rpcbind
udp6       0      0 :::111                  :::*                                29538/rpcbind


啓動服務

確保rpcbind啓動

#查看 rpcbind 狀態
[root@suhw ~]# systemctl status rpcbind
#若rpcbind未啓動,則start
[root@suhw ~]# systemctl start rpcbind

確保nfs啓動

[root@suhw ~]# systemctl status nfs
#若nfs未啓動,則start
[root@suhw ~]# systemctl start nfs

配置文件編寫

允許10.91開頭的地址共享/home/test目錄,並具有可讀可寫操作

[root@suhw ~]# cat /etc/exports
/home/test 10.91.*(rw,sync,no_root_squash)

配置文件生效

使用上面介紹的用來管理當前NFS共享的文件系統列表的exportfs命令

# 重新共享,使 exports 生效
[root@suhw ~]# exportfs -r
[root@suhw ~]# exportfs -s
/home/test  10.91.*(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)


驗證

NFS服務端配置完成後,先在服務端通過showmount命令測試下是否已經共享成功

[root@suhw ~]#  showmount -e localhost
Export list for localhost:
/home/test 10.91.*

此時查看之前說的``etab`就會發現多了一條記錄i

[root@suhw ~]# cat /var/lib/nfs/etab
/home/test      10.91.*(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,no_root_squash,no_all_squash)

在掛載目錄下創建個文件,方便一會觀察現象

[root@suhw ~]# touch /home/test/test.txt


NFS Cient配置

環境驗證

1、確認本地端已經啓動了 rpcbind 服務

[root@nfs-client ~]# systemctl status rpcbind
● rpcbind.service - RPC bind service
   Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2020-06-15 18:11:40 CST; 20h ago
 Main PID: 1264 (rpcbind)
   CGroup: /system.slice/rpcbind.service
           └─1264 /sbin/rpcbind -w

Jun 15 18:11:40 csmp-SP1Fusion systemd[1]: Starting RPC bind service...
Jun 15 18:11:40 csmp-SP1Fusion systemd[1]: Started RPC bind service.

2、確保安裝showmount


查看遠程服務器共享資源

[root@nfs-client ~]# showmount -e 10.91.156.174
Export list for 10.91.156.174:
/home/test 10.91.*/

進行掛載

1、在本地端建立預計要掛載的掛載點目錄

[root@nfs-client ~]# mkdir -p /home/test

2、利用 mount 將遠程主機直接掛載到相關目錄

[root@nfs-client ~]# mount 10.91.156.174:/home/test /home/test

3、查看掛載信息

[root@nfs-client ~]# df -h
Filesystem                Size  Used Avail Use% Mounted on
'''
10.91.156.174:/home/test   17G  8.0G  9.1G  47% /home/test

驗證

查看本地掛載目錄下的內容即可

[root@nfs-client ~]# ll /home/test/
total 0
-rw-r--r-- 1 root root 0 Jun 16 14:47 test.txt


取消掛載

若不需要掛載時,使用umount命令指定本地掛載目錄即可

[root@nfs-client ~]# umount /home/test
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章