NFS 服務器搭建 頂 原

NFS(網絡文件系統)用於Unix/Linux之間的文件共享,NFS在文件傳送過程中依賴與RPC(遠程過程調用)協議。NFS本身是沒有提供信息傳送的協議和功能。只要用到NFS的地方都需要啓動RPC服務,不論是NFS的服務端還是客戶端。

在啓動NFS服務之前,首先要啓動RPC服務(CentOS5是portmap服務,CentOS6.6以後的版本是rpcbind服務),否則NFS服務器無法向RPC服務註冊。另外,RPC服務如果重啓,原來以及有的NFS端口就會丟失,因此,只要RPC服務重啓,NFS服務就要重啓向RPC重新註冊新的隨機端口號。一般修改NFS配置文件後,不需要重啓服務,直接平滑重啓即可,命令:/etc/init.d/nfs reload或者exportfs -rv就可以修改/etc/exports生效。

相關軟件包:nfs-utils(NFS服務主程序)、rpcbind(PRC服務程序)

  • nfsd監聽的端口: 2049/tcp, 2049/udp
  • portmapper監聽的端口: 111/tcp, 111/udp
  • 相關配置文件:
    • /etc/exports
    • /etc/sysconfig/nfs
    • /etc/nfsmount.conf
    • /etc/nfs.conf

1. 安裝並啓動nfs-utils、rpcbind

CentOS和Ubuntu安裝的軟件包有差異,下面分別介紹兩個系統下的安裝方法,其他操作基本沒有差異

==》 CentOS下安裝的軟件包爲nfs-utils和rpcbind
# yum -y install nfs-utils rpcbind
啓動順序很關鍵,必須先啓動rpcbind服務,使得nfs服務可以像rpc服務註冊端口
# systemctl restart rpcbind
# systemctl restart nfs

==》 Ubuntu下安裝的軟件包爲nfs-kernel-server和rpcbind
$ sudo apt install -y nfs-kernel-server rpcbind
啓動順序很關鍵,必須先啓動rpcbind服務,使得nfs服務可以像rpc服務註冊端口
$ systemctl restart rpcbind
$ systemctl restart nfs-kernel-server

查看NFS服務向rpc註冊的端口信息,主端口號是:111 
# rpcinfo -p 192.168.10.10
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100005    1   udp  20048  mountd
    100005    1   tcp  20048  mountd
    100005    2   udp  20048  mountd
    100005    2   tcp  20048  mountd
    100005    3   udp  20048  mountd
    100005    3   tcp  20048  mountd
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    100021    1   udp  37633  nlockmgr
    100021    3   udp  37633  nlockmgr
    100021    4   udp  37633  nlockmgr
    100021    1   tcp  44262  nlockmgr
    100021    3   tcp  44262  nlockmgr
    100021    4   tcp  44262  nlockmgr

2. 添加共享條目

編輯/etc/exports文件添加共享條目
# vim /etc/exports
/shared		192.168.10.0/24(rw,sync,all_squash,anonuid=505,anongid=505) 192.168.20.0/24(rw)

修改共享目錄權限和屬主屬組
# mkdir /shared
# chown -R nfsnobody:nfsnobody /shared
# chmod -R 760 /shared

# 重新導出共享目錄
# exportfs -arv

測試
# showmount -e 192.168.10.10
Export list for 192.168.10.10:
/shared 192.168.10.0/24
測試成功
條目格式:(man exports查看man手冊)
共享目錄		NFS客戶端地址(屬性1,屬性2) 

- ro: 只讀
- rw: 讀寫(還需要配置共享目錄有讀寫權限)
- sync: 數據同步寫入NFS服務器端的硬盤中
- async: 數據先寫到緩存區,再寫到磁盤裏中
- root_squash: NFS客戶端連接服務端時如果使用的是root的話,那麼對服務端分享的目錄來說,擁有匿名用戶權限,通常他將使用nobody或nfsnobody身份
- no_root_squash: NFS客戶端連接服務端時如果使用的是root的話,那麼對服務端分享的目錄來說,也擁有root權限。顯然開啓這項是不安全的
- all_squash: 不論NFS客戶端連接服務端時使用什麼用戶,對服務端分享的目錄來說都是擁有匿名用戶權限
- anonuid:指定匿名用戶的UID值,通常是nobody或nfsnobody,可以在此處自行設定
- anongid: 指定匿名用戶的GID值

3. 客戶端掛載使用

客戶端也要安裝nfs-utils、rpcbind
# yum -y install nfs-utils rpcbind

客戶端只需要啓動rpcbind服務即可,不需要啓動nfs服務
# systemctl restart rpcbind

列出服務端的共享目錄
# showmount -e 192.168.10.10
Export list for 192.168.10.10:
/shared 192.168.10.0/24

掛載文件系統到本地
# mount -t nfs 192.168.10.10:/shared /nfs 
# df -h 
192.168.10.10:/shared     17G  5.4G   12G  32% /nfs

4. 相關命令

showmount

顯示NFS服務器的掛載信息

showmount -e NFS_SERVER: 查看NFS服務器“導出”的各文件系統
showmount -a NFS_SERVER: 查看NFS服務器所有被掛載的文件系統及其掛載的客戶端對應關係列表
showmount -d NFS_SERVER: 顯示NFS服務器所有導出的文件系統中被客戶端掛載了文件系統列表

exportfs

在修改了/etc/exports文件後執行此命令即可重新導出或者取消導出所有文件系統,而不需要重新啓動nfs服務

-a:跟-r或-u選項同時使用,表示重新掛載所有文件系統或取消導出所有文件系統;
-r: 重新導出
-u: 取消導出
-v: 顯示詳細信息

rpcinfo

顯示RPC信息

-p:用rpc協議來探測主機host上使用的rpcbind,並顯示所有已註冊的RPC程序

nfsstat

查看NFS的運行狀態,對於調整NFS的運行有很大幫助

5.NFS性能調優

使用dd命令測試讀寫性能,並根據讀寫性能修改配置文件以允許最大nfs客戶端連接數

# time dd if=/dev/zero of=/nfs/test bs=10k count=10000
10000+0 records in
10000+0 records out
102400000 bytes (102 MB) copied, 0.604919 s, 169 MB/s

real    0m0.608s
user    0m0.002s
sys     0m0.078s

修改配置文件/etc/sysconfig/nfs中的參數RPCNFSDCOUNT,該參數默認值爲8

Q&A常見問題

  1. 客戶端掛載時,報錯誤mount clntudp_create: RPC: Port mapper failure - RPC: Unable to receive
  • 通過命令rpcinfo -p來查看portmap服務是否正常啓動以及相應的端口(默認111)
  • 檢查防火牆設置,允許tcp,udp的111端口訪問
  • 檢查/etc/hosts.deny,/etc/hosts.allow看客戶端連接是否被阻止了
  1. 客戶端執行命令showmount -e NFS_SERVER_IP時,報錯誤:mount clntudp_create: RPC: Program not registered
  • nfs或rpcbind服務沒有啓動,使用chkconfig把nfs、rpcbind加到系統服務中並用service來啓動
  1. 客戶端執行命令showmount -e NFS_SERVER_IP時,報錯誤:rpc mount export: RPC: Unable to receive; errno = No route to host
  • 配置文件:/etc/sysconfig/nfs找到nfs服務相關端口設置的地方,並移除註釋並配置指定端口,然後在iptables防火牆設置中指定允許相應端口的Udp,tcp流通過。
  1. 執行showmount -e NFS_SERVER_IP成功,但是掛載時報錯:mount: mount to NFS server '192.168.10.10' failed: System Error: No route to host.
  • 這是由於nfs服務的默認端口2049被防火牆阻塞了,修改iptables允許2049端口通過
  1. 執行showmount -e NFS_SERVER_IP成功,但是掛載時報錯:mount: mount to NFS server '192.168.10.10' failed: timed out (retrying).
  • 編輯iptables相關端口的tcp端口允許通過,而udp不允許。
  1. 服務端的/etc/exports配置文件中目錄權限屬性設置爲rw(默認爲root_squash),但是在客戶端mount目錄執行touch命令時報錯誤:touch: cannot touch a: Permission denied
  • 檢查服務器端共享目錄是否有寫入權限 ll -d /shared
  • 修改服務器端共享目錄權限 chown -R 760 /shared(文件所有者root有全權限、文件所有組用戶有讀寫權限、其他用戶無權限,然後把目錄的組設置爲nfsnobody)
  • 修改服務器端共享目錄屬主屬組爲nfsnobodychown -R nfsnobody:nfsnobody /shared

其他博文

http://server.51cto.com/sManage-150923.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章