一.系统环境

 
  
[root@node1 ~]# cat /etc/redhat-release 
CentOS release 6.8 (Final)
 
  

二.安装NFS服务

1、查看系统是否已安装NFS
 
  
rpm -qa | grep nfs
rpm -qa | grep rpcbind
 
  

2、安装NFS
 
  
 yum -y install rpcbind   nfs-utils
  ##rpcbind,是rpc主程序. nfs-utils,是nfs的主程序.
 
  


3.服务端配置
 
  
1.创建共享目录
mkdir  /nfs-data

2.编辑主要配置文件:/etc/exports
vim /etc/exports 
/nfs-data       192.168.193.0/24(rw,no_root_squash,no_all_squash,sync)
[共享目录]      [第一台主机(权限)]


3.使配置生效
 exportfs -r     #每次修改配置文件,都需要加-r参数进行reload。

 
4.启动rpcbind、nfs服务
 service rpcbind start
 service nfs start

6.设置开机自启:
  chkconfig rpcbind on
  chkconfig nfs on
  chkconfig nfslock on
  
 
7.查看端口状态
 ss -tln 或   netstat -ntulp
  #rpcbind 启动在UDP,TCP的111端口
  #NFS本身的服务启动在port2049上
  #其他rpc.*服务启动的端口则是随机的,需要向port 111 注册。
  
8.查看 RPC 服务的注册状况
 rpcinfo -p localhost
   

9. 测试:
[root@node1 ~]# showmount -e localhost
Export list for localhost:
/nfs-data 192.168.193.0/24



服务端相关配置解释:

1.相关进程:
    rpc.nfsd	管理客户端是否使用NFS
    rpc.mountd	管理客户端的权限
    rpc.lockd	管理文件的锁定(服务端与客户端都开启)
    rpc.statd	检查文件的一致性(服务端与客户端都开启)

    /etc/init.d/nfs       与服务器相关
    /etc/init.d/nfslock	  与客户端相关


2.主要文件:
    /etc/exports           主配置文件
    /usr/sbin/exportfs     维护NFS共享资源的指令,一般用于NFS服务器端
    /usr/sbin/showmount    查看NFS共享出来的目录资源,一般用于NFS客户端
    /var/lib/nfs/*tab      NFS的日志文件
        etab               记录NFS所共享的目录的完整权限设置值
        xtab               主要记录曾经连入NFS服务器端的客户端信息


3./etc/exports详解
  /etc/exports文件是NFS主要的配置文件,该文件用于设置服务器的共享目录,以及目录允许访问的主机,访问权限,和其他选项,NFS安装后会在/etc/目录下创建一个空文件,用户需要自定编辑.
	
共享目录 [客户端1(选项1,选项2…)] [客户端2(选项1,选项2…)]

举例:
/tmp    192.168.209.129(rw,no_root_squash)
/root   192.168.209.130(rw,no_root_squash)

共享目录:即提供了NFS客户端使用的目录
客户端:可以访问共享目录的计算机,可以通过IP地址和主机名进行指定,也可以使用子网掩码指定网段
选项:指定该共享目录的访问权限


一些常见权限参数:
ro	        该主机对该共享目录有只读权限
rw	        该主机对该共享目录有读写权限,要注意是针对nfs之外还有目录自己权限
root_squash	客户机用root用户访问该共享文件夹时,将root用户映射成匿名用户
no_root_squash	客户机用root访问该共享文件夹时,不压制root用户身份
all_squash	客户机上的任何用户访问该共享目录时都映射成匿名用户
anonuid	        将客户机上的用户映射成指定的本地用户ID的用户
anongid	        将客户机上的用户映射成属于指定的本地用户组ID
sync		资料同步写入到内存与硬盘中
async	        资料会先暂存于内存中,而非直接写入硬盘
insecure	允许从这台机器过来的非授权访问

#rw  ro  ——该目录分享的权限是可读写(read-write) 或只读 (read-only),但最终能不能读写,还是与文件系统的 rwx 及身份有关。

#sync  async ——sync 代表数据会同步写入到内存与硬盘中,async 则代表数据会先暂存于内存当中,而非直接写入硬盘。

#no_root_squash  root_squash ——客户端使用 NFS 文件系统的账号若为 root 时,系统该如何判断这个账号的身份?预设的情况下,客户端 root 的身份会由 root_squash 的设定压缩成 nfsnobody, 如此对服务器的系统会较有保障。但如果你想要开放客户端使用 root 身份来操作服务器的文件系统,那么这里就得要开 no_root_squash 才行!
all_squash  ——不论登入 NFS 的使用者身份为何, 他的身份都会被压缩成为匿名用户,通常也就是 nobody(nfsnobody) 。


4.修改/etc/exports配置文件后,需要使用exportfs命令。
   exportfs [-aruv]
	-a 全部文件系统挂载(或者卸载)/etc/exports 文件中的设置
	-r  重新挂载/etc/exports 文件中的设置		
	-u  卸载某一目录
	-v  显示详细信息
 
  

4.客户端配置
 
  
1.查询软件是否安装
rpm -qa | grep nfs

2.安装nfs-utils客户端
yum -y install nfs-utils

3.创建挂载目录
mkdir    /nfsdata

4.查看服务器端挂载信息:
[root@node2 /]# showmount -e 192.168.193.128
Export list for 192.168.193.128:
/nfs-data 192.168.193.0/24

5.进行挂载 #为了提高NFS的稳定性,使用TCP协议挂载,NFS默认用UDP协议
mount -t nfs 192.168.101.128:/nfs-data /nfsdata -o tcp,nolock

6.进行查看
[root@node2 /]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_node2-lv_root
                       18G  790M   16G   5% /
tmpfs                 743M     0  743M   0% /dev/shm
/dev/sda1             477M   39M  413M   9% /boot
/dev/sr1              3.7G  3.7G     0 100% /mnt
/dev/sr0              2.1G  2.1G     0 100% /media
192.168.193.128:/nfs-data
                       18G  1.4G   15G   9% /nfsdata
                       
#挂载成功!
 
  

5.固定nfs服务端口(为了方便配置防火墙,若防火墙关闭,则忽略该步骤)
 
  
NFS启动时会随机启动多个端口并向RPC注册,这样如果使用iptables对NFS端口进行限制就会有点麻烦,可以更改配置文件固定NFS服务相关端口。
#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  59175  status
    100024    1   tcp  36247  status
    100005    1   udp  20048  mountd
    100005    1   tcp  20048  mountd
    100005    2   udp  20048  mountd
    100005    2   tcp  20048  mountd
    100005    3   udp  20048  mountd
    100005    3   tcp  20048  mountd
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    100021    1   udp  43725  nlockmgr
    100021    3   udp  43725  nlockmgr
    100021    4   udp  43725  nlockmgr
    100021    1   tcp  45552  nlockmgr
    100021    3   tcp  45552  nlockmgr
    100021    4   tcp  45552  nlockmgr
    
    
   
   
编辑配置文件:
   vim /etc/sysconfig/nfs
    RQUOTAD_PORT=30001
    LOCKD_TCPPORT=30002
    LOCKD_UDPPORT=30002
    MOUNTD_PORT=30003
    STATD_PORT=30004 
    
 重启服务:
     systemctl start  nfs.service
 再次查看,端口已固定:    
     rpcinfo -p localhost
 
  

6.mount常见挂载参数
 
  
linux系统:
mount -t nfs -o hard,intr,nolock,nfsvers=3,tcp,rsize=1048600,wsize=1048600,bg 192.168.1.1:/data/     /XXX



-t:指定文件系统的类型,通常不必指定,mount 会自动选择正确的类型。

        光盘或光盘镜像:iso9660 
        DOS fat16文件系统:msdos 
        Windows 9x fat32文件系统:vfat 
        Windows NT ntfs文件系统:ntfs 
        Mount Windows文件网络共享:smbfs 
        UNIX(LINUX) 文件网络共享:nfs


-o:主要用来描述设备或档案的挂接方式
      hard:两者有一台主机脱机,则RPC会持续的呼叫,直到恢复连接。(默认hard)
      soft:RPC会在timeout后重复呼叫。使用软挂载的方式挂载系统,若Client的请求得不到回应,则重新请求并传回错误信息
      
      
      intr:如果是hard方式挂载,加上intr,则当RPC持续呼叫时,该次呼叫是可以被中断的。(interrupted)
            允许NFS中断文件操作和向调用它的程序返回值,默认不允许文件操作被中断。
      
      
      rsize:在NFS服务器读取文件时NFS使用的字节数,默认值是1024个字节。
      wsize:向NFS服务器写文件时NFS使用的字节数,默认值是1024个字节。
      
      fg:前台执行,mount会持续的尝试挂载,直到成功或time out   (默认fg)
      bg:后台执行,mount会在后台持续多次进行mount,不会影响到前台的程序的运行。
      
      tcp:对文件系统的挂载使用TCP,而不是默认的UDP。
      

solaris系统:
mount -F nfs -o hard,intr,llock,vers=3,proto=tcp,timeo=1200,sec=sys,rsize=1048600,wsize=1048600 192.168.1.1:/data/ /XXX/


    -F:指定文件类型。    
    vers:3  由于默认情况下Linux下挂载nfs使用的是nfs version3,而solaris10下挂载nfs使用的是nfs version4。所以改成3
    timeo:暂停时间:一秒的十分之1200
 
  

7.客户端nfs实现自动挂载
 
  
方式1:添加进fstab中实现开机自动挂载
    vim /etc/fstab
    添加:
    192.168.193.128:/nfs-data  /data   nfs  defaults      0 0
    chkconfig netfs on
    #网络文件系统由netfs服务来挂载,所以必须保证netfs为开机启动
方式2:添加进/etc/rc.d/rc.local
mount -t nfs -o nosuid,noexec,nodev,rw,bg,soft,rsize=32768,wsize=32768  192.168.193.128:/nfs-data       /data


#方式1与方式2的区别:
    理解为将磁盘挂载写进/etc/fstab,表示启动过程中就挂载上去。
    如果把mount.nfs命令写在/etc/rc.local里,就是表示在加载了shell之后(系统启动后)才挂载NFS

    
方式3:使用autofs服务,实现自动挂载,自动卸载  
                    ### cd 到挂载的目录,实现自动挂载
           
                    
1.安装必要软件包
yum install autofs   -y

2.编辑配置文件
vim /etc/auto.master          ##主配置文件,指定检测的特定目录
    /nfsdata	 /etc/auto.nfs
   [需要监控的目录,挂载的目录] 
vim /etc/auto.nfs    ##子配置文件      
  temp  -rw   192.168.44.128:/nfs-data      ###实际上nfs是挂载在这个目录下/nfsdata/temp
[挂载后的目录]      
	
	
3.启动服务autofs
/etc/init.d/autofs start

4.检查
df -h   #没有挂载

cd /nfsdata   #没有挂载
cd /nfsdata/temp    
df -h         #自动进行挂载


如果长时间不进入,就会自动断开,默认是300秒
在/etc/sysconfig/autofs配置.