架設一個 NFS Server

# 前言

本篇主要紀錄如何架設一個 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 就完成掛載囉, 更多的設定可以參考文末的參考來源。



# 參考資源

Laravel - Digging Deeper - Cache (官方文件原子化翻譯文件) Laravel - Testing - Console Tests (官方文件原子化翻譯筆記)

留言

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×