NFS(Network File System)讓不同 Linux 系統能透過網路共享目錄,如同存取本地檔案般方便。本文以 CentOS 6.4 為例,詳細說明從套件安裝、服務啟動、匯出配置到客戶端掛載的完整步驟。
檢查是否已安裝 NFS 與 RPC 相關套件:
rpm -qa | grep nfs
rpm -qa | grep rpcbind
若缺少套件,使用 yum 線上安裝:
yum install -y nfs-utils nfs-utils-lib rpcbind
編輯主要配置檔:
vi /etc/exports
加入共享規則(每行一條):
# 僅允許 192.168.0.0/24 網段唯讀存取
/tmp 192.168.0.0/24(ro,sync)
# 允許特定 IP 讀寫,同步寫入,保留 root 權限
/tmp 192.168.0.65(rw,sync,no_root_squash)
常用參數說明:
ro / rw:唯讀 / 讀寫sync:資料同步寫入磁碟(較安全)async:非同步(較快但有風險)no_root_squash:客戶端 root 保有 root 權限(預設會壓縮為 nfsnobody)root_squash:預設行為,將 root 映射為匿名使用者CentOS 6 使用 portmap(新版為 rpcbind):
service portmap restart
service nfs restart
chkconfig portmap on
chkconfig nfs on
驗證服務狀態:
showmount -e localhost # 查看本機匯出列表
showmount -a # 顯示已連線的客戶端
查詢伺服器可用共享:
showmount -e 192.168.0.248
掛載到本地目錄:
mkdir -p /mnt/nfs_share
mount -t nfs 192.168.0.248:/tmp /mnt/nfs_share
設定開機自動掛載(/etc/fstab):
192.168.0.248:/tmp /mnt/nfs_share nfs defaults 0 0
錯誤現象: mount: 1831-008 giving up ... vmount: Operation not permitted
原因: 客戶端使用非保留埠(>1024)連線,但伺服器要求保留埠。
解決: 在伺服器啟用保留埠限制:
nfso -p -o nfs_use_reserved_ports=1
或在客戶端掛載時指定選項:
mount -o resvport 192.168.0.248:/tmp /mnt/nfs_share
NFS 需開放以下埠(TCP/UDP):
/etc/sysconfig/nfs 中的 MOUNTD_PORT、STATD_PORT 等,再於 iptables 開放# 範例 iptables 規則
iptables -A INPUT -p tcp --dport 111 -j ACCEPT
iptables -A INPUT -p udp --dport 111 -j ACCEPT
iptables -A INPUT -p tcp --dport 2049 -j ACCEPT
iptables -A INPUT -p udp --dport 2049 -j ACCEPT
service iptables save
async 提升寫入速度(非關鍵資料)rsize/wsize(讀寫區塊大小),建議 65536 (64KB)mount -t nfs4 ... 獲得更好安全性與效能