# 前言
本篇主要紀錄如何架設一個 NFS server, 並從其他 node 共享檔案
# 環境
VERSION=”19.10 (Eoan Ermine)”
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME=”Ubuntu 19.10”
VERSION_ID=”19.10”
# 安裝
假如你的 apt 無法更新, 執行
sed -i -e 's/archive.ubuntu.com\|security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list |
# Host
sudo apt update && sudo apt install nfs-kernel-server |
# Client
sudo apt update && sudo apt install nfs-common |
# 建立分享資料夾
sudo mkdir -p /yourPreferred/directoryLocation |
NFS server 預設會將 root 登入者轉為 nobody:nogroup, 因此修改資料夾權限
sudo chown nobody:nogroup /yourPreferred/directoryLocation |
# exports 設定檔
設定 exports 檔案, 定義要 export 的資料夾以及細項設定
sudo vim /etc/exports
設定檔
/yourPrederred/directoryLocation *(rw,sync,no_root_squash)
一些設定參數定義
參數 | 用途 |
---|---|
rw & ro | 該目錄分享的權限是可讀寫 (read-write) 但最終能不能讀寫,還是與檔案系統的 rwx 及身份有關。 |
sync & async | sync 代表資料會同步寫入到記憶體與硬碟中,async 則代表資料會先暫存於記憶體當中,而非直接寫入硬碟。 sync 會增加穩定性以及一致性, 因為返回的結果就代表遠端 disk 的狀態, 而非 cache, 但同時速度也會比較慢 |
no_root_squash | 預設 NFS 會將來自於 root user 的 request 轉換成 nobody, 以避免 client root 擁有 host root 的權限, 若要取消預設行為, 可使用此選項 |
root_squash | 如上, 預設行為 |
all_squash | 不管訪問者是誰, 全部都轉換成 nobody |
anonuid & anongid | 可以自定義上面提到的 nobody, nogroup 的 uid 以及 gid, 前提是此 uid & gid 必須要存在於 /etc/passwd |
fsid | 在 NFS4, 若設為 0, 則代表 root, 表示分享的資料夾為該 host 的 root, 即 client 端掛載時需為 mount -t nfs hostIp:/ /clientTargetMountingDirectory , 若分享多個資料夾, fsid 不可相同, 每個 fsid 都代表一個獨立的分享區塊 |
- 完成設定後, 重啟 server
sudo systemctl restart nfs-kernel-server
# 防火牆設定
# 查看防火牆狀態
sudo ufw status |
一般來說, 防火牆越嚴謹越好, 但我們需要開啟特定的 port 讓外部可以存取 NFS server
# 開啟防火牆
請將 client_ip 替換成實際的 client ip
sudo ufw allow from client_ip to any port nfs
查看結果
sudo ufw status
# 掛載到 client 端
# 確認 nfs-common 有啟動
如果 nfs-common 服務沒啟動的話, 啟動它
sudo systemctl start nfs-common
如果顯示 masked, 使用 unmask 又無效的話, 先刪除 service
sudo rm /lib/systemd/system/nfs-config.service
刪除後在 reload daemon
sudo systemctl daemon-reload
然後再 start nfs-common 一次
# 建立空資料夾
- 建立一個空的資料夾
sudo mkdir -p /yourPrefered/emptyDirectoryLocation
# 掛載
sudo mount -t nfs4 yourHostIp:/ /yourPrefered/emptyDirectoryLocation |
這邊要注意一下, 如果使用的是 nfs4, 那 fsid = 0 實際上就代表 root, 即根目錄實際上就是 host exports 出來的資料夾, 所以要使用 yourHostIp:/
, 而實際上是掛載到上面在 Host 端建立的資料夾
# 卸載
umount /yourClientMountedDirectory |
需注意, 如果你當前位置正在掛載的資料夾, 那會顯示 target is busy, 所以要先離開啦!
# 結語
至此簡易的 NFS 就完成掛載囉, 更多的設定可以參考文末的參考來源。
# 參考資源
- 鳥哥
- DigitalOcean
- Internet
留言