nfs使用小结

一、NFS介绍

NFS是Network File System的缩写NFS在文件传送或信息传送的过过程中,依赖于RPC协议。RPC,远程过程调用(Remote Procedure Call),是使客户端能够执行其他系统中程序的一种机制。NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,就是因为NFS使用了RPC提供的传输协议,可以说NFS就是使用PRC的一个程序。

二、安装

检查是否安装有RPC和NFS的包

[root@centosclient ~]# rpm -qa |grep nfs
nfs4-acl-tools-0.3.3-13.el7.x86_64
nfs-utils-1.3.0-0.48.el7_4.x86_64
libnfsidmap-0.25-9.el7.x86_64
[root@centosclient ~]# rpm -qa |grep rpc
xmlrpc-c-1.32.5-1905.svn2451.el7.x86_64
xmlrpc-c-client-1.32.5-1905.svn2451.el7.x86_64
libtirpc-0.2.4-0.10.el7.x86_64
rpcbind-0.2.0-42.el7.x86_64

其中

nfs-utils-1.3.0-0.48.el7_4.x86_64
rpcbind-0.2.0-42.el7.x86_64

是必须的包
如果没有,yum安装即可

yum install rpcbind nfs-utils

三、相关服务

查看RPC的服务状态

[root@centosclient ~]# systemctl status rpcbind.service 
● rpcbind.service - RPC bind service
   Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
   Active: active (running) since Wed 2018-01-17 01:39:48 PST; 27min ago
  Process: 767 ExecStart=/sbin/rpcbind -w $RPCBIND_ARGS (code=exited, status=0/SUCCESS)
 Main PID: 775 (rpcbind)
   CGroup: /system.slice/rpcbind.service
           └─775 /sbin/rpcbind -w

Jan 17 01:39:45 centosclient systemd[1]: Starting RPC bind service...
Jan 17 01:39:48 centosclient systemd[1]: Started RPC bind service.

查看nfs服务的状态

[root@centosclient ~]# systemctl status nfs.service 
● nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
  Drop-In: /run/systemd/generator/nfs-server.service.d
           └─order-with-mounts.conf
   Active: active (exited) since Wed 2018-01-17 01:40:00 PST; 27min ago
  Process: 2103 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
  Process: 2077 ExecStartPre=/bin/sh -c /bin/kill -HUP `cat /run/gssproxy.pid` (code=exited, status=0/SUCCESS)
  Process: 1984 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=1/FAILURE)
 Main PID: 2103 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/nfs-server.service

Jan 17 01:39:59 centosclient systemd[1]: Starting NFS server and services...
Jan 17 01:39:59 centosclient exportfs[1984]: exportfs: No options for /nbuinstall *: suggest *(sync) to avoid warning
Jan 17 01:39:59 centosclient exportfs[1984]: exportfs: No host name given with /nbuinstall (rw,sync), suggest *(rw,sync) to avoid warning
Jan 17 01:39:59 centosclient exportfs[1984]: exportfs: incompatible duplicated export entries:
Jan 17 01:39:59 centosclient exportfs[1984]: exportfs:         *:/nbuinstall (0x424) [IGNORED]
Jan 17 01:39:59 centosclient exportfs[1984]: exportfs:         *:/nbuinstall (0x425)
Jan 17 01:40:00 centosclient systemd[1]: Started NFS server and services.
Hint: Some lines were ellipsized, use -l to show in full.

查看rpcbind服务的端口

[root@centosclient ~]#  netstat -antlp |grep rpc
tcp        0      0 0.0.0.0:33412           0.0.0.0:*               LISTEN      1874/rpc.statd      
tcp        0      0 0.0.0.0:20048           0.0.0.0:*               LISTEN      1905/rpc.mountd     
tcp6       0      0 :::58574                :::*                    LISTEN      1874/rpc.statd      
tcp6       0      0 :::20048                :::*                    LISTEN      1905/rpc.mountd     

查看此时RPC服务上是否有端口注册

[root@centosclient ~]# 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
    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
    100024    1   udp  42560  status
    100024    1   tcp  33412  status
    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  51802  nlockmgr
    100021    3   udp  51802  nlockmgr
    100021    4   udp  51802  nlockmgr
    100021    1   tcp  60935  nlockmgr
    100021    3   tcp  60935  nlockmgr
    100021    4   tcp  60935  nlockmgr

四、相关配置文件

NFS服务器的配置相对比较简单,只需要在相应的配置文件中进行设置,然后启动NFS服务器即可。

NFS的常用目录

文件目录 用途
/etc/exports NFS服务的主要配置文件
/usr/sbin/exportfs NFS服务的管理命令
/usr/sbin/showmount 客户端的查看命令
/var/lib/nfs/etab 记录NFS分享出来的目录的完整权限设定值
/var/lib/nfs/xtab 记录曾经登录过的客户端信息

NFS服务的配置文件为/etc/exports,这个文件是NFS的主要配置文件,不过系统并没有默认值,所以这个文件不一定会存在,可能要使用vim手动建立,然后在文件里面写入配置内容。
/etc/exports文件内容格式:

<输出目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)]
a. 输出目录:

输出目录是指NFS系统中需要共享给客户机使用的目录;

b. 客户端:

客户端是指网络中可以访问这个NFS输出目录的计算机

客户端常用的指定方式

    指定ip地址的主机:192.168.0.200
    指定子网中的所有主机:192.168.0.0/24 192.168.0.0/255.255.255.0
    指定域名的主机:david.bsmart.cn
    指定域中的所有主机:*.bsmart.cn
    所有主机:*

c. 选项:

选项用来设置输出目录的访问权限、用户映射等。

NFS主要有3类选项:

访问权限选项

    设置输出目录只读:ro
    设置输出目录读写:rw

用户映射选项

    all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);
    no_all_squash:与all_squash取反(默认设置);
    root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置);
    no_root_squash:与rootsquash取反;
    anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);
    anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);

其它选项

    secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
    insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
    sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
    async:将数据先保存在内存缓冲区中,必要时才写入磁盘;
    wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);
    no_wdelay:若有写操作则立即执行,应与sync配合使用;
    subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
    no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;
 / user01(rw) user02(rw,no_root_squash)

表示共享服务器上的根目录(/)只有user01和user02两台主机可以访问,且有读写权限;user01主机用root用户身份访问时,将客户机的root用户映射成服务器上的匿名用户(root_squash,该参数为缺省参数),相当于在服务器使用nobody用户访问目录;user02主机用root用户身份访问该共享目录时,不映射root用户(no_root_squash),即相当于在服务器上用root身份访问该目录

  /root/share/ 192.168.1.2(rw,insecure,sync,all_squash)

表示共享服务器上的/root/share/目录只有192.168.1.2主机可以访问,且有读写权限;此主机用任何身份访问时,将客户机的用户都映射成服务器上的匿名用户(all_squash),相当于在服务器上用nobody用户访问该目录(若客户机要在该共享目录上保存文件(即写操作),则服务器上的nobody用户对该目录必须有写的权限)

  /home/ylw/ *.test.com (rw,insecure,sync,all_squash)

表示共享/home/ylw/目录,*.test.com域中所有的主机都可以访问该目录,且有读写权限

  /home/share/ .test.com (ro,sync,all_squash,anonuid=zh3,anongid=wa4)

表示共享目录/home/share/,*.test.com域中的所有主机都可以访问,但只有只读的权限,所有用户都映射成服务器上的uid为zh3、gid为wa4的用户

五、相关命令

exportfs 命令用来管理当前NFS共享的文件系统列表。

参数: 
-a 打开或取消所有目录共享。
-o options,...指定一列共享选项,与 exports(5) 中讲到的类似。
-i 忽略 /etc/exports 文件,从而只使用默认的和命令行指定的选项。
-r 重新共享所有目录。它使 /var/lib/nfs/xtab 和 /etc/exports 同步。 它将 /etc/exports 中已删除的条目从 /var/lib/nfs/xtab 中删除,将内核共享表中任何不再有效的条目移除。
-u 取消一个或多个目录的共享。
-f 在“新”模式下,刷新内核共享表之外的任何东西。 任何活动的客户程序将在它们的下次请求中得到 mountd添加的新的共享条目。
-v 输出详细信息。当共享或者取消共享时,显示在做什么。 显示当前共享列表的时候,同时显示共享的选项。

showmount命令用于查询NFS服务器

 Usage: showmount [-adehv]
        [--all] [--directories] [--exports]
        [--no-headers] [--help] [--version] [host] 
-a--all
    以 host:dir 这样的格式来显示客户主机名和挂载点目录。
 -d或--directories
    仅显示被客户挂载的目录名。
 -e或--exports
    显示NFS服务器的输出清单。
 -h或--help
    显示帮助信息。
 -v或--version
    显示版本信。
 --no-headers
    禁止输出描述头部信息。

显示NFS客户端信息
 # showmount

显示指定NFS服务器连接NFS客户端的信息
 # showmount 192.168.1.1  #此ip为nfs服务器的

显示输出目录列表
 # showmount -e

显示指定NFS服务器输出目录列表(也称为共享目录列表)
 # showmount -e 192.168.1.1

显示被挂载的共享目录
 # showmount -d  

显示客户端信息和共享目录
 # showmount -a

显示指定NFS服务器的客户端信息和共享目录
# showmount -a 192.168.1.1

六、其他

如果RPC与NFS的启动顺序不对,可能会造成报错

[root@redhatclient /]# showmount -d
clnt_create: RPC: Program not registered

你可能感兴趣的:(Linux命令)