NFSv4 就是 NFS 的第四版,他與上一代的 NFSv3 有些差異,若是沒有注意到他更動的地方,可能會被他搞得一頭霧水(筆者就是這樣),所以在這裡特別記錄一下,免得自己以後忘記,又要再重頭來研究一遍,Open Source 的東西就是更新很快,是很大的優點,也是很大的缺點,每隔沒多久就要學新的東西,累死老人家。
這裡以 Ubuntu Linux 為例,示範如何安裝 NFSv4 的 Server 與 Client,並比較 NFSv4 與 NFSv3 的差異。
首先安裝 NFS Server,在 apt 中有好幾個 nfs 相關的套件可以選擇,不過一般都是用 nfs-kernel-server
,因為這個套件效能比較好:
sudo apt-get install nfs-kernel-server
接著設定要 export 出去的資料夾,傳統的做法是直接在 /etc/exports
設定每一個要 export 的路徑就可以了,但是從 NFSv4 開始有些不一樣,所有被 export 出去的資料都會被整合進一個單一的檔案系統中,然後再一起 export 出去,我們直接看範例比較清楚。
假設我們要 export /home/users
與 /usr/local/data
兩個資料夾,首先就是要將這兩個分開的資料夾以 bind 的方式綁在一個虛擬的檔案系統中,一開始先建立一個作為虛擬根目錄的目錄:
mkdir /export
然後再將要 export 的目錄綁進來這個目錄中:
mkdir /export/users mkdir /export/data mount --bind /home/users /export/users mount --bind /usr/local/data /export/data
這個設定在重新開機後,就會不見,建議直接寫進 /etc/fstab
中,一勞永逸,即在 /etc/fstab
中加入兩行:
/home/users /export/users none bind 0 0 /usr/local/data /export/data none bind 0 0
這樣就會將 /home/users
與 /usr/local/data
兩個資料夾分別掛載至 /export/users
與 /exports/data
,如以一來就建立一個虛擬的檔案系統。
更改 /etc/default/nfs-kernel-server
設定檔,將 NEED_SVCGSSD
設為 no
:
NEED_SVCGSSD=no
更改 /etc/default/nfs-common
設定檔,將 NEED_IDMAPD
設為 yes
,NEED_GSSD
設為 no
:
NEED_IDMAPD=yes NEED_GSSD=no
接著設定 /etc/exports
:
/export 192.168.1.0/24(rw,fsid=0,no_subtree_check,sync) /export/users 192.168.1.0/24(rw,nohide,insecure,no_subtree_check,sync) /export/data 192.168.1.0/24(rw,nohide,insecure,no_subtree_check,sync)
第一行是設定 /export
為根錄目(fsid=0
即是設定為根目錄的意思),另外將 /export/users
與 /export/data
也開放給 192.168.1.0/24
這個網域的所有機器。
接著重新啓動 NFS Server 與 idmapd:
sudo /etc/init.d/nfs-kernel-server restart sudo start idmapd # or... sudo service idmapd restart
NFS 的 Client 端要先安裝 nfs-common
套件:
sudo apt-get install nfs-common
再設定 /etc/default/nfs-common
,將 NEED_IDMAPD
設為 yes
:
NEED_IDMAPD=yes
(重新)啟動 idmapd:
# start idmapd # or... # service idmapd restart
接下來就可以掛載了,最簡單的方式就是直接將整個虛擬檔案系統掛上來,一次解決:
sudo mount -t nfs4 -o proto=tcp,port=2049 nfs-server:/ /mnt
其中 nfs-server 要換成自己的 NFS Server 的 IP 位址(建議用 IP 位址)或是 hostname,而 /mnt
就是在 Client 上要掛載的位置,而這裡根 NFSv3 不一樣的地方在於指定 Server 上的目錄是根目錄(/
),這個根目錄就會對應到 NFS Server 上 /etc/exports
設定為根目錄的位置,以這裡來說就是對應到 /export
。
若是測試沒問題,就可以寫入 /etc/fstab
了,在 /etc/fstab
加入:
nfs-server:/ /mnt nfs4 _netdev,auto 0 0