CentOS NFS配置詳解
我們知道在Linux上運行NFS會有很多不同的情況。隨著環(huán)境以及相應版本和硬件的改動,它的一些性能會有很大的差異。那么今天我們來看一下CentOS NFS的一些安裝和測試情況。在 CentOS 上安裝和配置 NFS 4.0。NFS 網(wǎng)絡文件系統(tǒng)協(xié)議最早是于1984年由 SUN 公司開發(fā)的,NFSv4 是最新的修訂版本,2003年4月發(fā)布(RFC 3530)。由于 NFS 是一個開放的協(xié)議和標準,所以各個系統(tǒng)上的實現(xiàn)不同,所表現(xiàn)出來就是穩(wěn)定性和性能差異,VPSee 的經(jīng)驗是 NFS 在 Solaris 上最穩(wěn)定、功能最豐富;在 FreeBSD 上的性能最好,但是缺少一些功能,比如 FreeBSD 8.0 內(nèi)核才增加了 NFS 文件鎖的支持;NFS 在 Linux 上表現(xiàn)最一般了,所以我們至今仍有部分服務器低調(diào)地運行著古老的 Solaris 2.5 和 NFSv3,相比 NFSv3 來說 NFSv4 做了一些重大改進,比如:性能的提升、安全性的增強和 ACL,更容易與防火墻集成等。下面地操作在 CentOS 5.5 上完成。
安裝CentOS NFS 服務器
安裝CentOS NFS 服務器所需的軟件包:
- # yum install nfs-utils nfs4-acl-tools portmap
配置CentOS NFS 共享
和安裝任何其他服務器軟件一樣,安裝完 NFS 服務后就需要對 NFS 服務進行配置。輸出服務器端的某個目錄,以便 NFS 客戶端能掛載和訪問到這個目錄
- # vi /etc/exports
- /bak 172.16.20.11(rw,sync,fsid=0) 172.16.20.12(rw,sync,fsid=0)
172.16.20.11 和 172.16.20.12 上面的用戶可以掛載 NFS 服務器(172.16.20.1)上的 /bak 目錄到自己文件系統(tǒng)里;rw 在這里表示可讀可寫。
把CentOS NFS服務加入系統(tǒng)啟動腳本并且手動啟動 NFS 服務:
- # chkconfig nfs on
- # chkconfig portmap on
- # /etc/init.d/portmap start
- # /etc/init.d/nfs start
確認 NFSv4 服務器成功運行:
- # rpcinfo -p
- program vers proto port
- 100000 2 tcp 111 portmapper
- 100000 2 udp 111 portmapper
- 100003 2 udp 2049 nfs
- 100003 3 udp 2049 nfs
- 100003 4 udp 2049 nfs
- ...
- 100005 3 tcp 750 mountd
檢查CentOS NFS服務器是否輸出我們想共享的目錄 /bak:
- # exportfs
- /bak 172.16.20.11
- /bak 172.16.20.12
注意 NFS 使用 portmap,而且新版本的 portmap 使用 hosts.deny 和 hosts.allow 文件來控制訪問源,修改這2個配置文件以便 NFS 客戶端能正常連接到服務器:
- # vi /etc/hosts.deny
- portmap:ALL
- # vi /etc/hosts.allow
- portmap:172.16.38.0/255.255.254.0
使用 NFS 客戶端
首先啟動 portmap:
- # /etc/init.d/portmap start
檢查 NFS 服務器端是否有目錄共享:#p#
- # showmount -e 172.16.20.1
- Export list for 172.16.20.1:
- /bak 172.16.20.11,172.16.20.12
使用 mount 掛載服務器端的目錄 /bak 到客戶端某個目錄下:
- # mkdir /home/vpsee/bak
- # mount -t nfs4 172.16.20.1:/ /home/vpsee/bak/
- # df -H
- Filesystem Size Used Avail Use% Mounted on
- ...
- 172.16.39.1:/ 232G 23G 198G 11% /home/vpsee/bak
在 /etc/fstab 中掛載 nfs 文件系統(tǒng):
- # vi /etc/fstab
- 172.16.20.1:/ /bak nfs4 soft,intr,rsize=8192,wsize=8192,nosuid
- # chkconfig netfs on
在成功掛載服務器端的 /bak 后就可以在客戶端里操作了,這時候?qū)懳募蛘呖截愇募臅r候會遇到一個權(quán)限問題報錯 : Permission denied,這是因為上面我們在服務器端建立了 /bak 但是 /bak 的 owner 是 root:root,而客戶端的正在訪問 NFS 的用戶是 vpsee,NFS 要求服務器端和客戶端的 UID 和 GID 必須一致,所以要在 NFS 服務器端修改 /bak 的權(quán)限和所屬:
- # chown -R vpsee:vpsee /bak
注意使用CentOS NFS 的時候,客戶端的用戶 UID 和 GID 必須和服務器端的 UID 和 GID 完全符合,否則會造成權(quán)限錯誤。在小規(guī)模用戶的情況下,我們可以偷懶通過在客戶和服務器兩端同時建立相同的用戶和組來解決這個問題,但是在大規(guī)模用戶情況下最好的辦法是利用 NIS 或者 OpenLDAP 來統(tǒng)一管理用戶,做到一次登錄,到處訪問。
Troubleshooting
1、在上面的操作過程中,如果你不幸遇到下面這個問題的話,可以嘗試更新 Linux kernel 或通過打開 IPv6 來解決這個問題,這是1個 bug:
- # mount -t nfs4 172.16.20.1:/ /home/vpsee/bak/
- mount.nfs4: Cannot allocate memory
2、如果遇到如下問題,可能是因為你的 mount -t nfs 使用的是 nfsv3 協(xié)議,需要明確指出使用 nfsv4 協(xié)議掛載 mount -t nfs4:
- # mount -t nfs 172.16.20.1:/ /home/vpsee/bak/
- mount: mount to NFS server '172.16.20.1' failed: RPC Error: Program not registered.
- # mount -t nfs4 172.16.20.1:/ /home/vpsee/bak/