此处声明 : 实验环境为 Centos 6.5 

nfs  服务器端: nfs-utils

一般默认安装 (如果没有安装的话 :  yum install  -y  nfs-utils )

生成的主要文件为 : (  可以用 rpm -ql nfs-utils 查看)

  /usr/sbin/rpc.mountd

  /usr/sbin/rpc.nfsd

启动服务 :

      service nfs start

注意启动之前请先确保 rpcbind 启动service rpcbind start | status)

rpcbind(以前 称为 Portmap)  工作于 111/tcp 111/udp

查看相应端口也可用

  rpcinfo -p localhost

启动 nfs 后, nfs 会向 rpc 注册使用一系列端口 

nfs  会启用三个子进程:

   nfsd(nfs服务的主服务)

   mountd(接受客户端的挂载请求)

   quotad(限定客户端在本地能使用多大磁盘空间 即磁盘配额)

一般来讲: 

nfs 的端口是启动的时候向 rpc 注册的是可变的

 nfsd  监听在 2049/tcp  2049/udp  这个是不变的虽然是注册使用的。

但是 mounted 和 quotad 监听的端口是半随机的 (rpc 帮其选取的 ,rpc 会选用一个

还没被占用的随机端口给 mounted 和 quotad )


所以 有可能出现占用其他服务的端口 如web 的 80 。


服务脚本 :

 /etc/rc.d/init.d/nfslock  对文件加锁防止同时修改,还有防止客户端在访问文件时崩溃。

当访问一个文件时向 nfs 申请加锁。


好了下面确保 nfs 开机自启动:

   chkconfig  nfs on   ( 也可以 chkconfig --level 35 nfs on   设置, chkconfig --list | grep nfs 查看)


  

实现文件输出的配置文件:

      /etc/exports 

在这个文件中,每一行包含一个共享出去的文件系统,以及那些客户端能够访问,及客户端的访问特性,如果有多个客户端,使用空格隔开,每个客户端后必须跟(),里面定义此客户端访问特性。

格式为:

/path/to/somedir  客户端列表(客户端访问特性)


如:

/nfs_shared  128.1.1.5(rw)


在这个文件中如果想要注释掉一行,使用 # 。

下面说一下客户端的定义: FQDN(即域名) ,IP 地址, IP地址/掩码

下面说一下客户端访问属性:

  ro (只读,只能对文件进行读操作)     

  rw(读写,对文件即能读也能修改)    

  sync  (同步,对文件的修改会立即写入磁盘)       

  async(异步,对文件的修改不会立即写入磁盘,一般都是使用异步,同步性能不大好)


现在开始来操作:  (服务端的ip 为: 128.1.1.5  客户端的ip为: 128.1.1.7)

运行前请确保 iptables 和 selinux 已经关闭

假设已经事先在 服务端创建 /nfs/shared  目录, 客户端创建   /nfs/mount1 目录

   修改 /etc/exports

wKiom1V9CCqwxcoUAAB2i906UZk804.jpg

 修改完记得重启服务:

wKioL1V9CfXzK_ldAAEQG5DbZvg518.jpg

 查看本机导出的目录:

wKioL1V9CiHhpPtdAABUNnrMItM794.jpg

           这里说一下: showmount  主要用来查看本机导出去那些目录,详情请 man  showmount。

               查看  nfs 服务器导出的各文件系统

                用法:showmount   -e   NFS_SERVER          这个命令在 客户端 ,服务端 都能用

             如 :  showmount   -e  128.1.1.7  (这里的 128.1.1.7 也可以写为:

                         128.1.1.7/255.255.255.0  或者  128.1.1.7/24 )

 

在客户端挂载服务端导出的目录,并且用   df   查看是否已经挂载  (请事先在客户端创建

一个目录  /nfs/mount1  )

wKioL1V9DJfB6S-wAAI9-8SrXpE448.jpg


           这里说一下客户端如何挂载:

                            使用 mount 命令挂载 :

                用法  :

               mount   -t    nfs   NFS_SERVER:/PATH/TO/SOME_EXPORT   /PATH/TO/SOMEWHERE

                NFS_SERVER  : nfs 服务器地址

                 /PATH/TO/SOME_EXPORT  : nfs 服务器导出目录

                 /PATH/TO/SOMEWHERE   :  客户端的挂载目录

接下来就可以在客户端上对挂载目录进行操作了:
       wKioL1V9DuWgdF_JAABe0Dojk48437.jpg

                  如果想要在客户端实现写操作请确保,请现在服务端让挂载目录具有写权限。

                         如  chmod   777  /nfs/shared


接下来说一下 exportfs 命令 :

    当修改  /etc/exports  配置文件后,使用 exportfs 命令可以实现挂载而不重启服务。

  说一下可用选项:

           -a  : 跟 -r 或 -u 选项同时使用,表示重新挂载所有文件系统或取消导出所有文件

                       系统。

           -r  : 重新导出

           -u  : 取消导出

           -v  : 显示详细信息

  所以可用  exportfs -arv  来重新读取 /etc/exports

                  exportfs -auv   来取消所有导出的目录

例如:将128.1.1.7 改为 128.1.1.7/24 此时 128.1.1.0/24 网段内的所有主机都能挂载 /nfs/shared


wKioL1V9MCviWdnjAACrG4GuYsA972.jpg

此时在主机 128.1.1.3 上尝试挂载目录,发现能挂载成功

wKiom1V9L7PzmGYQAAG0Wesl6KA640.jpg

测试一下 exportfs  -auv  (发现执行后系统没有导出任何目录)

wKioL1V9MinBtJkkAABc5gPmPK8618.jpg


如果想实现在客户端在开机时候自动挂载的话:

请自己在 /etc/fstab 中添加如下一行:

   128.1.1.5/nfs/shared      /mnt   nfs    defaults,_rnetdev        0  0

上面的  _rnetdev 是为了避免开机挂载不上,启动不起来。


如果出现在客户端挂载之后卸载不了:

        可用   fuser -v   挂载目录              查看有哪些进程占用此目录

       fuser -km  挂载目录    可把正在访问某挂载点的进程都杀死


说一下随机端口问题吧,如果不想让 nfs 使用随机端口

编辑配置文件 /etc/sysconfig/nfs  能让 mountd  和 quotad 等进程监听在固定端口


RQUOTAD_PORT=875

LOCKD_TCPPORT=32803

LOCKD_UDPPORT=32769

MOUNTD_PORT=892

只需要将上面4项都启用,也即是去掉这4项前面的  #