建立 Linux 上的 NFS 共享儲存
在企業級基礎設施或家庭實驗室(Home Lab)中,集中化管理儲存資源是提升效率的關鍵。Network File System (NFS) 作為 Linux 生態系中最成熟、最廣泛使用的網路檔案系統協議之一,能夠讓多台伺服器或工作站無縫存取同一份資料集。相較於 iSCSI 提供區塊層級存取,NFS 提供的是檔案層級存取,設定相對簡便,特別適合用於網頁伺服器叢集、VM 備份路徑或開發環境共享。
本文將以 Ubuntu 22.04 / Debian 12 為基礎,引導您完成從伺服器端配置到客戶端掛載的完整流程。
第一步:安裝 NFS 伺服器軟體
首先,我們需要在一台具備靜態 IP 的 Linux 主機上安裝 NFS 伺服器套件。在 Debian 系發行版中,這非常直觀。請透過 SSH 登入伺服器,並執行以下指令:
sudo apt update
sudo apt install nfs-kernel-server nfs-common portmap
安裝過程中,系統會自動處理相依套件。nfs-kernel-server 提供核心的 NFS 服務,nfs-common 包含客戶端與伺服器共用的工具,而 portmap(在較新系統中可能被 rpcbind 取代)則負責將 RPC 服務對應到正確的 TCP/UDP 連接埠。
第二步:設定共享目錄與權限
接下來,我們要建立一個目錄作為共享點,並設定 NFS 的匯出規則。假設我們要共享 /srv/nfs4/shared_data 目錄:
sudo mkdir -p /srv/nfs4/shared_data
sudo chown nobody:nogroup /srv/nfs4/shared_data
sudo chmod 777 /srv/nfs4/shared_data
這裡將所有者設為 nobody:nogroup 是 NFS 的慣例做法,這有助於處理匿名存取或權限映射。若您的應用場景需要更嚴格的權限控制,建議改為特定使用者,並調整 chmod 權限。
接著,編輯 /etc/exports 檔案來定義哪些客戶端可以存取此目錄:
sudo nano /etc/exports
在檔案末尾加入以下行。這裡假設您的客戶端網段為 192.168.1.0/24:
/srv/nfs4/shared_data 192.168.1.0/24(rw,sync,no_subtree_check)
參數說明:
rw:允許讀寫。sync:確保寫入操作在回應客戶端前已寫入磁碟,提升資料安全性。no_subtree_check:關閉子樹檢查,可提升效能並減少連線問題。
設定完成後,重新載入 NFS 服務以套用變更:
sudo exportfs -a
sudo systemctl restart nfs-kernel-server
您可以使用 sudo exportfs -v 來驗證匯出清單是否正確。
第三步:配置防火牆規則
NFS 依賴 RPC 動態連接埠,這使得防火牆設定稍微複雜。在現代 Ubuntu/Debian 系統中,最簡單且推薦的方式是使用 ufw 允許 NFS 服務:
sudo ufw allow from 192.168.1.0/24 to any port nfs
sudo ufw reload
如果您使用的是 firewalld 或其他防火牆工具,請確保開放 TCP/UDP 的 2049 連接埠,以及 RPC 動態連接埠範圍。
第四步:客戶端掛載與驗證
現在切換到另一台 Linux 主機(客戶端),安裝必要的客戶端套件:
sudo apt install nfs-common
建立一個掛載點並測試連線:
sudo mkdir -p /mnt/nfs_share
sudo mount -t nfs 192.168.1.100:/srv/nfs4/shared_data /mnt/nfs_share
將 192.168.1.100 替換為您伺服器的 IP。若無錯誤訊息,表示連線成功。您可以透過 df -h 確認掛載狀態,並嘗試在該目錄下建立檔案測試寫入權限。
為了讓掛載在重啟後自動生效,請編輯 /etc/fstab:
192.168.1.100:/srv/nfs4/shared_data /mnt/nfs_share nfs defaults,_netdev 0 0
加入 _netdev 參數可確保系統在網路初始化後再嘗試掛載,避免開機卡住。
常見問題與解決方案
1. 連線被拒絕或 hangs 住
這通常與防火牆或 NFS 服務狀態有關。請確認伺服器端的 nfs-kernel-server 和 rpcbind 服務均處於運行狀態(systemctl status rpcbind)。此外,檢查 dmesg 或 /var/log/syslog 中的 NFS 相關錯誤訊息,確認 IP 白名單是否正確。
2. 權限錯誤(Permission denied)
若客戶端能掛載但無法寫入,請檢查伺服器端目錄的實際權限。NFS 會將客戶端的 UID/GID 直接映射到伺服器。若客戶端的 user 在伺服器上沒有對應的 UID,可能會導致權限異常。解決方案是確保兩端的 /etc/passwd 中使用者 UID 一致,或使用 root_squash 以外的選項來處理 root 權限映射。
小結
透過上述步驟,您已成功建立了一個穩定且安全的 NFS 共享儲存環境。NFS 雖然設定簡單,但在生產環境中仍需注意網路延遲、磁碟 I/O 效能以及安全性配置。對於高併發或對資料一致性要求極高的場景,建議進一步評估 NFSv4.2 的效能優化選項,或考慮採用 CephFS 等分散式檔案系統。希望這篇文章能幫助您輕鬆整合 NFS 到您的 Linux 基礎架構中。