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 套件
yum nfs-utils
[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. 創建分享目錄及檔案
[root@serverc ~]# mkdir -v /share
mkdir: created directory '/share'
[root@serverc ~]# echo "serverc nfs" > /share/README.txt
1.3. 編輯設定檔、重啟 nfs 伺服器及開放防火牆
伺服器分享檔案很容易,只要選擇要分享的目錄並寫入 /etc/export 即可,另可以進階設定哪些IP或是網段及哪些存取權限。
# 創建分享目錄的設定
[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
share.exports 可取任意名稱,必須以 .exports 檔名結尾
2. Client 端
Client 也需要安裝 nfs-utils套件,但是不用啟動 nfs-server 服務。
yum nfs-utils
2.1. 使用 monut 測試能否掛載
[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 移除掛載。
2.2. fstab 開機自動掛載
[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
yum install autofs
[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 有兩種模式:
- Direct Map -> 指定絕對路徑目錄
- Indirect Map -> 指定一個目錄裡包含多的目錄
如果 NFS 分享的目錄中有 5 個子目錄,如果全部子目錄都要分開不同資料夾掛載的話,在第一種模式必須定義 5 個設定,另外在第二種模式,僅需定義一個設定。
3.1.3 NFS 伺服器分享目錄
[root@serverc ~]# tree -F /shares
/shares
├── direct/
│ └── extrernal/
│ └── README.txt
└── indirect/
├── central/
│ └── README.txt
├── east/
│ └── README.txt
└── west/
└── README.txt
6 directories, 4 files
要分享的目錄必須要寫在 /etc/export 內並重啟 nfs 才能存取。
3.1.4 Direct MAP 模式
3.1.4.1. 創建 auto fs 對應檔
以 .autofs 結尾
[root@servera ~]# cat >> /etc/auto.master.d/direct.autofs << EOL
> /- /etc/auto.direct
> EOL
3.1.4.2. 創建 Direct 掛載設定檔
[root@servera ~]# cat >> /etc/auto.direct << EOL
> /external -rw,sync,fstype=nfs4 serverc:/shares/direct/extrernal
> EOL
/external 目錄不用使用 mkdir 創建, autofs 會自行建立。
3.1.4.3. 重啟 autofs,並查看目錄是否自動掛載
[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
autofs 預設沒有使用目錄過 5 分鐘後會自動移除掛載,如果要縮短或是延長時間,可以編輯 /etc/autofs.conf 內的 dismount_interval ,更改後重啟 autofs。
3.1.5 Indirect MAP 模式
3.1.5.1. 創建 auto fs 對應檔
以 .autofs 結尾
[root@servera ~]# cat >> /etc/auto.master.d/indirect.autofs << EOL
> /internal /etc/indirect.autofs
> EOL
3.1.5.2. 創建 Indirect 掛載設定檔
[root@servera ~]# cat >> /etc/indirect.autofs << EOL
> * -rw,sync,fstype=nfs4 serverc:/shares/indirect/&
> EOL
使用 Indirect 使用 * 表示所有的子目錄,並在遠端分享目錄後加上 & 表達。
3.1.5.3. 重啟 autofs,並查看目錄是否自動掛載
只有用到該目錄才會掛載,所以必須要知道 server 端有分享出哪一些目錄
[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 最多可以點五次,而你不用付出任何一塊錢,就能給我寫這篇文章的最大的回饋!