linux下nfs详解

   1. NFS概述


   NFS:Network File System网络文件系统。用于unix-like操作系统之间进行文件的共享。通过NFS,客户端可以将服务器端共享出来的目录挂载到本地,就像操作本地文件一样。而NFS在启动之前需要向RPC注册,告诉RPC,相应的服务所使用的端口。NFS可以说是RPC服务的一种。NFS通常情况下启动的端口为2049端口,RPC启动的端口为111端口,而NFS如果要想提供其他的服务,则还要启动不同的端口,这些端口都是随机的,如果不向RPC注册的话,客户端将不知道服务器端打开的端口。


   RPC远程过程调用。RPC定义了一种进程间通过网络进行交互通信的机制,它允许客户端进程通过网络向远程服务进程请求服务,而不需要了解服务器底层的通信协议详细信息。NFS在启动的时候,至少要启动2个服务,一个是管理客户端能否登入主机,一个是管理客户端取得的权限问题。


       rpc.nfsd:管理客户端能否登入主机。

       rpc.mountd:管理NFS共享的文件系统以及客户端的权限问题。当客户端顺利的通过rpc.nfsd登入主机后,在使用服务器提供的文件之前要经过共享文件的权限认证以及在/etc/exportfs里面所定义的权限,如果通过,则允许使用nfs提供的共享文件。

       rpc.lockd:这个服务需要在客户端和服务器端同时开启才有用。当多个客户端对同一文件进行读写时就有可能产生一些问题,该服务可以克服这个问题。常和rpc.statd同时使用。

       rpc.statd:这个服务需要在客户端和服务器端同时开启才有用。用来检查档案的一致性。当多个客户端同时使用同一档案时可能会存在错误,该服务可以用来检测并尝试恢复该档案。



2. NFS的安装和配置


   1、安装:

       RPC的主程序:rpcbind

       NFS的主程序:nfs-utils

yum install -y rpcbind nfs-utils


   2、服务的启动停止与开机自动启动

service nfs start


       设置开机自动启动:

[root@www ~]#chkconfig --list | grep nfs
        nfs 0:off 1:off 2:off 3:off 4:off 5:off 6:off
        nfslock 0:off 1:off 2:off 3:on 4:on 5:on 6:off
[root@www ~]#chkconfig nfs --level 35 on        //在等级3和等级5默认开启
[root@www ~]#chkconfig --list | grep nfs
        nfs 0:off 1:off 2:off 3:on 4:off 5:on 6:off
        nfslock 0:off 1:off 2:off 3:on 4:on 5:on 6:off


       设置RPC的开机自动启动:

chkconfigrpcbind --level 35 on


   3、NFS的配置

       NFS的配置文件为:/etc/exports


       配置文件参数:对满足客户端匹配条件的客户端的权限设置。常用的如下:


       ro:默认选项,以只读的方式共享。

       rw:以读写的方式共享。

       root_squash:将客户端使用的是root用户时,则映射到NFS服务器的用户为NFS的匿名用户(nfsnobody)。

       no_root_squash:将客户端使用的是root用户时,则映射到FNS服务器的用户依然为root用户。

       all_squash:默认选项,将所有访问NFS服务器的客户端的用户都映射为匿名用户,不管客户端使用的是什么用户。

       anonuid:设置匿名用户的UID

       anongid:设置匿名用户的GID

       sync:默认选项,保持数据同步,数据同步写入到内存和硬盘。

       async:先将数据写入到内存,在将数据写入到硬盘。

       secure:NFS客户端必须使用NFS保留端口(通常是1024以下的端口),默认选项。

       insecure:允许NFS客户端不使用NFS保留端口(通常是1024以上的端口)。


   示例:


   设置共享目录

/data 172.16.0.0/16(rw,sync,no_root_squash)        //把“/data”共享给172.16.0.0/16网段(可读可写,同步)。


   设置完成以后,需要使用service nfs restart将NFS服务器重新启动或者是使用exportfs-avr使配置生效。

exportfs -auv        //所有共享的目录停止共享
exportfs -arv        //重新共享


    4、NFS启动在固定端口

       NFS主程序使用的端口是2049端口,为了实现不同的功能,需要启用不同的端口,而这些端口需要向RPC注册,但是在配置防火墙时,由于这些端口不是固定的,因此配置起来就比较麻烦,为了方便防火墙的配置,因此需要让NFS启动在固定的端口,配置如下:


   修改配置文件:/etc/sysconfig/nfs

LOCKD_TCPPORT=3001
LOCKD_UDPPORT=3001
MOUNTD_PORT=3002
STATD_PORT=3003
STATD_OUTGOING_PORT=3004

   将上述几个端口修改为相应的端口。


防火墙的设置:

iptables -A INPUT-i eth0 -p tcp -s 172.16.0.0/16 -d 172.16.12.1 -m multiport --dport 111,2049,3001,3004 -j ACCEPT
iptables -A INPUT-i eth0 -p udp -s 172.16.0.0/16 -d 172.16.12.1 -m multiport --dport 111,2049,3001,3004 -j ACCEPT



   5、客户端查看服务器端的共享


   客户端可以使用showmount -e查看客户端的共享目录。  

showmount -e        //服务的ip地址或FQDN
showmount -e 172.16.12.1

wKiom1M7wLignKINAABLbhngQ9I585.jpg


   6、客户端挂载

   格式:

       在客户端172.16.251.100上执行:

mkdir /tmp/nfs-test
mount -t nfs 172.16.12.1:/data /tmp/nfs-test/


wKioL1M7xB2BhVVAAABFbX09C1A277.jpg

wKioL1M7yxzR6HAkAABaK9miVOg030.jpg


   7、自动挂载

   最好不要用/etc/fstab设置开机自动挂载,有可能会由于服务的启动顺序导致挂载失败,影响开机时间。可以通过autofs自动挂载。


   步骤如下:


   1. 编辑/etc/auto.master文件    

       增加如下内容:

/- /etc/auto.nfs


   2. 新建/etc/auto.nfs文件,增加如下内容:

       /tmp/nfs-test -fstype=nfs 172.16.12.1:/data


   3. 重启autofs服务

  /etc/init.d/autofs stop
/etc/init.d/autofs start


注意:一定要先stop,然后在start,如果直接restart的话,可能会有问题。


这样设置完以后,当我们需要使用/tmp/nfs-test目录时,系统就会自动的帮我们进行挂载。



8、实战测试

   示例:仅允许172.16.0.0/16网段的主机访问,且UID为1000的用户testuser可以读写访问;

  服务器上:

[root@www data]# cat /etc/exports
/data 172.16.0.0/16(rw,sync,anonuid=1000,no_root_squash)
[root@www data]# useradd testuser
[root@www data]# setfcl -m u:testuser:rwx /data


   客户端:

[root@station100 ~]# useradd -u 1000 test
[root@station100 ~]# su - test
[root@station100 ~]# useradd -u 1000 test
[root@station100 ~]# su - test
[test@station100 ~]$ cd /tmp/nfs-test/
[test@station100 nfs-test]$ ll
    total 0
[test@station100 nfs-test]$ touch hello
[test@station100 nfs-test]$ ll
    total 0
    -rw-rw-r-- 1 nobody nobody 0 Apr  2 17:30 hello
[test@station100 nfs-test]$


   服务器端:

wKiom1M72eDgxEHIAABOMkGIGTc079.jpg


你可能感兴趣的:(nfs)