一、服务端配置

         安装 NFS 服务器所需的软件包:nfs 和 rpcbind 

    # yum install nfs-utils

    # yum install rpcbind(默认系统已安装)

    设置启动

    # chkconfig nfs on
    # chkconfig rpcbind on

    启动NFS服务

    1)先启动rpcbind service rpcbind start

    2)再启动nfs    service nfs start

    配置服务器端共享目录

    1)编辑配置文件

    假设服务端 目录为/home/data

              # vi /etc/exports

    格式:

    要共享的目录(使用绝对路径) 客户端主机IP......(可多个IP,之间空格隔开)

    /home/data 10.1.0.2(rw,sync,all_squash,anonuid=0,anongid=1000) 10.1.0.3(rw,sync,all_squash,anonuid=0,anongid=1000)

    括号里的参数:

    rw:read-write,可读写;

    ro:read-only,只读;

    sync:文件同时写入硬盘和内存;

    async:文件暂存于内存,而不是直接写入硬盘;

    no_root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。显然开启这项是不安全的。

    root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,拥有匿名用户权限,通常他将使用nobody或nfsnobody身份;

    all_squash:不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有匿名用户权限;

    anonuid:匿名用户的UID值,通常是nobody或nfsnobody,可以在此处自行设定;

    anongid:匿名用户的GID值。

       其它选项
    secure 限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);

    insecure 允许客户端从大于1024的tcp/ip端口连接服务器;

    sync 将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;

    async 将数据先保存在内存缓冲区中,必要时才写入磁盘;

    wdelay 检查是否有相关的写操作,如果有则将这些写操作 一起执行,这样可以提高效率(默认设置);

    no_wdelay 若有写操作则立即执行,应与sync配合使用;

    subtree 若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);

    no_subtree 即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;

    2)加载配置文件

    exportfs 参数

    参数:

         -a 全部挂载/etc/exports 文件内的设定

         -r: 重新挂载/etc/exports中的设置,此外同步更新/etc/exports  及 var/lib/nfs/xtab中的内容。

         -u:卸载某一目录

          -v:在export时将共享的目录显示在屏幕上。

    3)配置服务器端防火墙

              开启服务端防火墙端口2049

    # vi /etc/sysconfig/iptables

    添加一行 -A INPUT -m state --state NEW -m tcp -p tcp --dport 2049 -j ACCEPT 保存退出

    # /etc/init.d/iptables restart 重启生效

    二、客户端配置

    同服务端一样安装nfs和rpcbind服务 并启动 开启2049端口

    使用monut 命令进行挂载

    假设客户端要挂载的目录为/home/client 服务端IP为10.1.0.1

    mount -t  nfs   10.0.1.1:/home/server /home/client

    umount  -a  取消所有挂载

                

             umount /home/client    //取消挂载

            umount, 老是提示:device is busy, 服务又不能停止的。 可以用"umount -fl"解决!

 

挂载nfs的共享目录:

root@rabbit-0:~# mount -t nfs 192.168.207.129:/home/tomcat/img /home/tomcat/img -o proto=tcp -o nolock

mount.nfs: access denied by server while mounting 192.168.207.129:/home/tomcat/img

原因:在centos 6 x64的系统下使用的是NFSv4,在/var/log/messages中能看到nfs启动时的日志输出:

1

2

3

4

Dec  4 15:21:04 nginx-01 rpc.mountd[2178]: Version 1.2.3 starting

Dec  4 15:21:04 nginx-01 kernel: NFSD: Using /var/lib/nfs/v4recovery as the NFSv4 state recovery directory

Dec  4 15:21:04 nginx-01 kernel: NFSD: starting 90-second grace period

Dec  4 15:21:58 nginx-01 kernel: svc: 192.168.207.128, port=748: unknown version (4 for prog 100003, nfsd)

使用NFSv4时,在nfs服务端做如下操作:

1

2

3

4

5

6

7

[root@nginx-01 ~]# vim /etc/sysconfig/nfs

# Optional arguments passed to rpc.nfsd. See rpc.nfsd(8)

# Turn off v2 and v3 protocol support

RPCNFSDARGS="-N 2 -N 3"

----->启用

# Turn off v4 protocol support

RPCNFSDARGS="-N 4"     ---->启用

重启服务:

1

[root@nginx-01 ~]# service nfs restart

 

 

问题:mount.nfs: requested NFS version or transport protocol is not supported 

此错误发生的一种解决办法:
更新文件 /etc/exports和/etc/hosts.allow,加入对应网段:
/etc/exports:
/rootfs *(rw,no_root_squash,sync,insecure)

/etc/hosts.allow:
portmap mountd nfsd statd lockd rquotad : 192.168.1.*, 192.168.2.*
 

其他的一些设置:

mount -t nfs  -o nfsvers=3 

mount -t nfs  -o nfsvers=2

或者是 rpcbind  nfs 启动顺序不对,  重新启动  rpcbind   nfs