NFS服务使用小结

2016/11/18

本处以配置ovirt用到的NFS服务为例,示例如何配置NFS服务,或有不对,后续将更新。


一、配置NFS服务
1)安装服务
[root@n86 ~]# yum install nfs-utils -y
chkconfig rpcbind on
chkconfig nfs on
service rpcbind start
service nfs start
mkdir -p /data/ovirt/{data,export,iso} \
&& chown -R 36:36 /data/ovirt  \
&& chmod -R 0755 /data/ovirt  \
&& cat <<'_EOF' >>/etc/exports
/data/ovirt/data  *(rw,sync,no_subtree_check,all_squash,anonuid=36,anongid=36)
/data/ovirt/export  *(rw,sync,no_subtree_check,all_squash,anonuid=36,anongid=36)
/data/ovirt/iso  *(rw,sync,no_subtree_check,all_squash,anonuid=36,anongid=36)
_EOF
exportfs -arv

2)调整nfs端口
nfs服务可以自定义配置,例如我们看下那些启动脚本用到了/etc/sysconfig/nfs:
[root@n86 ~]# grep 'sysconfig/nfs' /etc/init.d/*
/etc/init.d/nfs:# config: /etc/sysconfig/nfs
/etc/init.d/nfs:[ -f /etc/sysconfig/nfs ] && . /etc/sysconfig/nfs
/etc/init.d/nfslock:[ -f /etc/sysconfig/nfs ] && . /etc/sysconfig/nfs
/etc/init.d/rpcgssd:[ -f /etc/sysconfig/nfs ] && . /etc/sysconfig/nfs
/etc/init.d/rpcidmapd:[ -f /etc/sysconfig/nfs ] && . /etc/sysconfig/nfs
/etc/init.d/rpcsvcgssd:[ -f /etc/sysconfig/nfs ] && . /etc/sysconfig/nfs

接下来,我们调整一下配置:
[root@n86 ~]# mv /etc/sysconfig/nfs /etc/sysconfig/nfs.bak`date +%Y%m%d%H%M%S` \
&& cat <<'_EOF' >>/etc/sysconfig/nfs
RPCRQUOTADOPTS="-p 875"
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
RPCNFSDCOUNT=8
RPCMOUNTDOPTS="-p 892"
STATDARG="-p 662 -o 2020"
_EOF
service rpcbind restart
service nfs restart

3)最后调整防火墙的配置:
[root@n86 ~]# sed -i.backup '/-A INPUT -i lo -j ACCEPT/a\## NFS related \
-A INPUT -p tcp -m state --state NEW -m tcp --dport 111 -j ACCEPT \
-A INPUT -p udp -m state --state NEW -m udp --dport 111 -j ACCEPT \
-A INPUT -p tcp -m state --state NEW -m tcp --dport 662 -j ACCEPT \
-A INPUT -p udp -m state --state NEW -m udp --dport 662 -j ACCEPT \
-A INPUT -p tcp -m state --state NEW -m tcp --dport 875 -j ACCEPT \
-A INPUT -p udp -m state --state NEW -m udp --dport 875 -j ACCEPT \
-A INPUT -p tcp -m state --state NEW -m tcp --dport 892 -j ACCEPT \
-A INPUT -p udp -m state --state NEW -m udp --dport 892 -j ACCEPT \
-A INPUT -p tcp -m state --state NEW -m tcp --dport 2049 -j ACCEPT \
-A INPUT -p udp -m state --state NEW -m udp --dport 32769 -j ACCEPT \
-A INPUT -p tcp -m state --state NEW -m tcp --dport 32803 -j ACCEPT \
# \
' /etc/sysconfig/iptables
[root@n86 ~]# service iptables reload

先从外边的其他机器访问来测试一下:
【调整前】
[root@e01 ~]# showmount -e 10.50.100.86
rpc mount export: RPC: Unable to receive; errno = No route to host

【调整后】
[root@e01 ~]# showmount -e 10.50.100.86
Export list for 10.50.100.86:
/data/ovirt/iso    *
/data/ovirt/export *
/data/ovirt/data   *

符合预期。


五、FAQ
1、mount时,要建立对应的目录,例如2013
2、umount时,可能被占用,busy,此时,先找到进程:
fuser -mv /home/web/upload/phonerecord
通知对应的同事结束该进程然后再umount

或者:
umount -l,在空闲时会自动umount掉。



3、对比调整前后端口的变化。
【调整前】
# rpcinfo -p localhost
   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
    100024    1   udp  38557  status
    100024    1   tcp  54219  status
    100005    1   udp  47978  mountd
    100005    1   tcp  38427  mountd
    100005    2   udp  48299  mountd
    100005    2   tcp  45243  mountd
    100005    3   udp  43376  mountd
    100005    3   tcp  54444  mountd
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    2   tcp   2049  nfs_acl
    100227    3   tcp   2049  nfs_acl
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    2   udp   2049  nfs_acl
    100227    3   udp   2049  nfs_acl
    100021    1   udp  39553  nlockmgr
    100021    3   udp  39553  nlockmgr
    100021    4   udp  39553  nlockmgr
    100021    1   tcp  39147  nlockmgr
    100021    3   tcp  39147  nlockmgr
    100021    4   tcp  39147  nlockmgr

【调整后】
# rpcinfo -p localhost   
   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    892  mountd
    100005    1   tcp    892  mountd
    100005    2   udp    892  mountd
    100005    2   tcp    892  mountd
    100005    3   udp    892  mountd
    100005    3   tcp    892  mountd
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    2   tcp   2049  nfs_acl
    100227    3   tcp   2049  nfs_acl
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    2   udp   2049  nfs_acl
    100227    3   udp   2049  nfs_acl
    100021    1   udp  32769  nlockmgr
    100021    3   udp  32769  nlockmgr
    100021    4   udp  32769  nlockmgr
    100021    1   tcp  32803  nlockmgr
    100021    3   tcp  32803  nlockmgr
    100021    4   tcp  32803  nlockmgr

4、挂载时,在客户端和服务端都出现所有者为 nobody 或者 4294967294 的情况,则需要启动nfs相关服务,重点是 rpcidmapd 这个服务。
1)最简单的方式是使用 nfs v3 版本:
mount -t nfs -o vers=3 ip:/test /data

2)还有一种方式是针对 nfs v4 的使用,要启用 idmapped 服务
service rpcidmapd start
chkconfig rpcidmapd on


ZYXW、参考
http://my.oschina.net/panzhc/blog/191663
http://lyp.cn/161_nfs-nobody
http://longgeek.com/2012/07/18/rhel-centos-fedora-third-party-software-library-pbone-epel-rpmforge-rpmfusion-using-the-configuration/