Contents

Linux - 網路檔案系統 - NFS

NFS 網路檔案系統,透過網路標準協定,在 Unix、 Linux 上進行檔案分享,在大多數的 Linux 都支援使用。

1. NFS 伺服器

RHEL 8 系列後預設使用 NTF 4 及支援 NTF 3 版本, NTF 4 最大改變就是取消 RPC 傳送隨機存取 port ( Udp ),改用指定的 2049 Tcp port。

1.1. 安裝 NFS 套件

1
yum nfs-utils
1
2
3
4
5
6
7
8
[root@serverc ~]# yum install nfs-utils
Dependencies resolved.
=============================================================================================================================================================================================
 Package                                            Architecture                            Version                                            Repository                               Size
=============================================================================================================================================================================================
Installing:
 nfs-utils                                          x86_64                                  1:2.3.3-46.el8                                     BaseOS                                  499 k
...

1.2. 創建分享目錄及檔案

1
2
3
[root@serverc ~]# mkdir -v /share
mkdir: created directory '/share'
[root@serverc ~]# echo "serverc nfs" > /share/README.txt

1.3. 編輯設定檔、重啟 nfs 伺服器及開放防火牆

伺服器分享檔案很容易,只要選擇要分享的目錄並寫入 /etc/export 即可,另可以進階設定哪些IP或是網段及哪些存取權限。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 創建分享目錄的設定 
[root@serverc ~]# cat >> /etc/exports.d/share.exports << EOL
> /share    *(rw,sync)
> EOL
# 重啟 nfs 服務
[root@serverc ~]# systemctl restart nfs-server.service
# 開放防火牆 nfs 服務
[root@serverc ~]# firewall-cmd --add-service=nfs --permanent 
success           
[root@serverc ~]# firewall-cmd --reload 
success
/etc/export.d/
share.exports 可取任意名稱,必須以 .exports 檔名結尾

2. Client 端

Client 也需要安裝 nfs-utils套件,但是不用啟動 nfs-server 服務。

1
yum nfs-utils

2.1. 使用 monut 測試能否掛載

1
2
3
4
5
6
[root@servera ~]# mount -t nfs serverc:/share /mnt
[root@servera ~]# df -h /mnt
Filesystem      Size  Used Avail Use% Mounted on
serverc:/share  8.0G  1.9G  6.2G  23% /mnt
[root@servera ~]# cat /mnt/README.txt 
serverc nfs
umount
測試完可以藉由 umount 移除掛載。

2.2. fstab 開機自動掛載

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[root@servera ~]# mkdir -v /share
mkdir: created directory '/share'
[root@servera ~]# cat >> /etc/fstab << EOL
> serverc:/share  /share nfs defaults 0 0
> EOL
[root@servera ~]# mount -a
[root@servera ~]# cat /share/README.txt 
serverc nfs
[root@servera ~]# df -h /share/
Filesystem      Size  Used Avail Use% Mounted on
serverc:/share  8.0G  1.9G  6.2G  23% /share

3. AutoFS

autofs 是在 Client 端一個常駐在背景的程式,會自動掛載設定好的 nfs ,跟 monut 最大差別為只有在連線時候才會掛載,當連線結束後一段時候沒有連線請求,將會斷開連線,可以有效釋放 TCP 連線建立交握的頻寬。

3.1.1 安裝 autofs

1
yum install autofs
1
2
3
4
5
6
7
8
9
[root@servera ~]# yum install autofs
Dependencies resolved.
=============================================================================================================================================================================================
 Package                                    Architecture                               Version                                              Repository                                  Size
=============================================================================================================================================================================================
Installing:
 autofs                                     x86_64                                     1:5.1.4-74.el8                                       BaseOS                                     705 k

...

3.1.2 不同掛載目錄模式

autofs 有兩種模式:

  1. Direct Map -> 指定絕對路徑目錄
  2. Indirect Map -> 指定一個目錄裡包含多的目錄

如果 NFS 分享的目錄中有 5 個子目錄,如果全部子目錄都要分開不同資料夾掛載的話,在第一種模式必須定義 5 個設定,另外在第二種模式,僅需定義一個設定。

3.1.3 NFS 伺服器分享目錄

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
[root@serverc ~]# tree -F /shares
/shares
├── direct/
│   └── extrernal/
│       └── README.txt
└── indirect/
    ├── central/
    │   └── README.txt
    ├── east/
    │   └── README.txt
    └── west/
        └── README.txt

6 directories, 4 files
Prepare
要分享的目錄必須要寫在 /etc/export 內並重啟 nfs 才能存取。

3.1.4 Direct MAP 模式

3.1.4.1. 創建 auto fs 對應檔

以 .autofs 結尾

1
2
3
[root@servera ~]# cat >> /etc/auto.master.d/direct.autofs << EOL
> /-  /etc/auto.direct
> EOL

3.1.4.2. 創建 Direct 掛載設定檔

1
2
3
[root@servera ~]# cat >> /etc/auto.direct << EOL
> /external    -rw,sync,fstype=nfs4    serverc:/shares/direct/extrernal
> EOL
Tip
/external 目錄不用使用 mkdir 創建, autofs 會自行建立。

3.1.4.3. 重啟 autofs,並查看目錄是否自動掛載

1
2
3
4
5
6
[root@servera ~]# systemctl restart autofs
[root@servera ~]# df -h /external/
Filesystem                        Size  Used Avail Use% Mounted on
serverc:/shares/direct/extrernal  8.0G  1.9G  6.2G  23% /external
[root@servera ~]# ls /external/
README.txt
Notice
autofs 預設沒有使用目錄過 5 分鐘後會自動移除掛載,如果要縮短或是延長時間,可以編輯 /etc/autofs.conf 內的 dismount_interval ,更改後重啟 autofs。

3.1.5 Indirect MAP 模式

3.1.5.1. 創建 auto fs 對應檔

以 .autofs 結尾

1
2
3
[root@servera ~]# cat >> /etc/auto.master.d/indirect.autofs << EOL
> /internal  /etc/indirect.autofs
> EOL

3.1.5.2. 創建 Indirect 掛載設定檔

1
2
3
[root@servera ~]# cat >> /etc/indirect.autofs << EOL
> *    -rw,sync,fstype=nfs4    serverc:/shares/indirect/&
> EOL
Tip
使用 Indirect 使用 * 表示所有的子目錄,並在遠端分享目錄後加上 & 表達。

3.1.5.3. 重啟 autofs,並查看目錄是否自動掛載

只有用到該目錄才會掛載,所以必須要知道 server 端有分享出哪一些目錄

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[root@servera ~]# systemctl restart autofs
[root@servera ~]# ls /internal/
[root@servera ~]# df -h /internal/west
Filesystem                     Size  Used Avail Use% Mounted on
serverc:/shares/indirect/west  8.0G  1.9G  6.2G  23% /internal/west
[root@servera ~]# ls /internal/
west
[root@servera ~]# df -h /internal/east
Filesystem                     Size  Used Avail Use% Mounted on
serverc:/shares/indirect/east  8.0G  1.9G  6.2G  23% /internal/east
[root@servera ~]# ls /internal/
east  west

4. 小結

NFS 十分方便好用,搭配 autofs ,實用度更上一層樓。



如果你還沒有註冊 Like Coin,你可以在文章最下方看到 Like 的按鈕,點下去後即可申請帳號,透過申請帳號後可以幫我的文章按下 Like,而 Like 最多可以點五次,而你不用付出任何一塊錢,就能給我寫這篇文章的最大的回饋!