NFS

NFSNetworkFileSystem),网络文件系统,基于RPC实现在远程主机上完成读写功能,NFS服务端功能由Kernel中提供,所以只能在LinuxUNIX中使用,另外只能根据IP地址限制用户访问。

RPC (Remote Procedure Call),实现两个远程主机之间功能函数的调用、参数传递功能。在Linux中一些通用功能都被做成库,本地的应用程序需要使用这些功能时,直接调用即可,这就叫本地调用;本地所需要的库(功能函数)在远程主机上,这时候就可以使用RPC协议将调用请求、参数封装成报文在网络上传输,并且服务端能理解之后将调用请求在本地执行返回结果,这称为远程过程调用。很多服务都会基于RPC完成某些功能, 例如NFS服务就基于RPC调用远程 主机上的open() ,read(),write(),close()…等函数将执行结果返回本地,完成文件共享功能。

 

工作原理:

                    NFS_第1张图片                 

1.服务端启动时将NFS功能(NFS daemons)像RPC进行注册端口。

2.客户端通过RPC连接服务器获取NFS Daemon注册的端口。

3.客户端连与NFS daemon进行联机,mountd对用户进行认证,nfs提供文件共享服务功能。

注意RPC(tcp/111,udp/111),NFS(tcp/2049,udp/2049) 使用的都是知名端口,但mountd并不是知名服务,客户端不知道mountd在哪,不知道如何去认证,而NFS必须要mountd认证通过返回令牌才能提供服务,所以NFS在启动时需要向RPC注册使用随机端口,这样客户端直接找RPC即可.

[root@el6 ~]# rpcinfo  -p  127.0.0.1

     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    57168  status

      100024    1   tcp    57017  status

      100011    1   udp      875  rquotad

      100011    2   udp      875  rquotad

      100011    1   tcp      875  rquotad

      100011    2   tcp      875  rquotad

      100005    1   udp    40548  mountd

      100005    1   tcp    60166  mountd

      100005    2   udp    46629  mountd

      100005    2   tcp    39141  mountd

      100005    3   udp    48524  mountd

      100005    3   tcp    50953  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    48054  nlockmgr

      100021    3   udp    48054  nlockmgr

      100021    4   udp    48054  nlockmgr

      100021    1   tcp    43004  nlockmgr

      100021    3   tcp    43004  nlockmgr

100021    4     tcp  43004  nlockmgr

daemon进程有多个是因为NFS支持并发访问)

 

 

NFS daemon

rpc.nfsd             提供NFS服务

rpc.mountd      用于验证用户是否有权限使用NFS

rpc.lockdrpc.statd      用于锁定文件防止多个用户同时修改,导致文件混乱。

rpc.quota                   用于设置NFS的磁盘配额。

         rpc.bind            用于将服务与端口绑定

         rpc.statd          通知NFS客户端什么时候一个NFS服务器非正常重启动.这个进程被nfslock服务自动启动,不需要用户的配置.

         rpc.idmapd       用于将所有用户的ID映射为nobody用户

安装NFS

[root@7-1 ~]# yum install -y nfs-utils

一般OS自带无需安装

 

NFS配置文件

Usage:     Directory(or   filesystem)           Client1(option1,option2…)   Client2(option1,option2…)

         Directory                   共享目录

         Client                 允许访问的客户端IP

                   172.16.1.1                 单个IP

                   172.16.1.0/24          网段

                   hostname/FQDN      主机名或者FQDN

         Options            可使用权限选项

                   rw              读写权限,默认ro

                   async        异步读写,不启用多线程,也能进行多个I/O操作

                   secure      缺省选项,表示客户端挂载建立连接时采用小于1024的端口号

                   insecure   关闭上述功能

                  

                   root_squash              缺省选项,将root用户映射成nfsnobody

                   no_root_squash       关闭上述功能,非常危险,这表示以root的身份进行读写

                   all_squash                 将所有用户映射成nfsnobody