NFS Service

1.1 NFS简介
 
Network File System(网络文件系统),由Sun公司研发,Unix-Like;nfs是基于RPC机制来实现的,它是内核级文件系统。网络文件系统,就是跨网络的文件系统,将远程主机上的文件系统或目录存放在本地主机上,就像它是本地文件系统一样,在Windows环境下有cifs协议实现的网络文件系统,在Unix环境下,是由NFS协议实现的NFS文件系统。
 
nfs版本:nfsv1、nfsv2、nfsv3、nfsv4
 
nfsd:监听在tcp/2049端口
 
1.2 RPC介绍
 
RPC:Remote Procedure Call(远程过程调用)
  • rpc.mountd:完成认证;
  • rpc.lockd
  • rpc.statd
 
1.2.1 RPC原理
 
 
1.3 安装NFS
 
由于nfs是使用RPC框架实现的,所以需要先安装好rpcbind。不过安装nfs-utils时会自动安装rpcbind。
# yum install -y nfs-utils
 
NFS是由很多进程组成,这些进程的启动程序都是由nfs-utils包提供
[root@CentOS7-171 ~]# rpm -ql nfs-utils | grep /usr/sbin/
/usr/sbin/blkmapd
/usr/sbin/exportfs
/usr/sbin/mountstats
/usr/sbin/nfsdcltrack
/usr/sbin/nfsidmap
/usr/sbin/nfsiostat
/usr/sbin/nfsstat
/usr/sbin/rpc.gssd
/usr/sbin/rpc.idmapd
/usr/sbin/rpc.mountd
/usr/sbin/rpc.nfsd
/usr/sbin/rpcdebug
/usr/sbin/showmount
/usr/sbin/sm-notify
/usr/sbin/start-statd
 
启动NFS
[root@CentOS7-171 ~]# systemctl start nfs.service
 
其中以"rpc."开头的程序都是rpc service,分别实现不同的功能,启动它们时每个都需要向rpcbind进行登记注册。
[root@CentOS7-171 ~]# 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  50397  status
    100024    1   tcp  40547  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  37789  nlockmgr
    100021    3   udp  37789  nlockmgr
    100021    4   udp  37789  nlockmgr
    100021    1   tcp  44165  nlockmgr
    100021    3   tcp  44165  nlockmgr
    100021    4   tcp  44165  nlockmgr
 
可以看到,每个program都启动了不同版本的功能。
program
说明
nfs program 
为rpc.nfsd对应的program,为nfs服务的主进程,端口号为2049。
mountd
对应的program为rpc.mountd,它为客户端的mount和umount命令提供服务,即挂载和卸载NFS文件系统时会联系mountd服务,由mountd维护相关挂载信息。
nlockmgr
对应的program为rpc.statd,用于维护文件锁和文件委托相关功能,在NFSv4以前,称之为NSM(network status manager)。
nfs_acl和status
是访问控制列表和状态信息维护的program。
查看NFS启动的相关进程信息
[root@CentOS7-171 ~]# ps aux | grep -E "[n]fs|[r]pc"
root        664  0.0  0.0      0     0 ?        S<   Jun13   0:00 [rpciod]
root       3687  0.0  0.2  42548  1188 ?        Ss   06:15   0:00 /usr/sbin/rpc.mountd
root       3688  0.0  0.0  21372   416 ?        Ss   06:15   0:00 /usr/sbin/rpc.idmapd
root       3698  0.0  0.0      0     0 ?        S<   06:15   0:00 [nfsd4]
root       3699  0.0  0.0      0     0 ?        S<   06:15   0:00 [nfsd4_callbacks]
root       3705  0.0  0.0      0     0 ?        S    06:15   0:00 [nfsd]
root       3706  0.0  0.0      0     0 ?        S    06:15   0:00 [nfsd]
root       3707  0.0  0.0      0     0 ?        S    06:15   0:00 [nfsd]
root       3708  0.0  0.0      0     0 ?        S    06:15   0:00 [nfsd]
root       3709  0.0  0.0      0     0 ?        S    06:15   0:00 [nfsd]
root       3710  0.0  0.0      0     0 ?        S    06:15   0:00 [nfsd]
root       3711  0.0  0.0      0     0 ?        S    06:15   0:00 [nfsd]
root       3712  0.0  0.0      0     0 ?        S    06:15   0:00 [nfsd]
rpcuser  122682  0.0  0.3  44452  1832 ?        Ss   01:42   0:00 /usr/sbin/rpc.statd
rpc      122683  0.0  0.3  69156  1468 ?        Ss   01:42   0:00 /sbin/rpcbind -w
 
 
1.4 NFS配置文件
 
1.4.1 NFS配置文件exports文件格式
 
NFS默认配置文件路径:/etc/exports
 
配置/etc/exports文件格式:
[root@CentOS7-171 ~]# cat /etc/exports
/data 192.168.5.0/24(rw,async)
NFS共享目录  客户端地址1(参数1,参数2 ...)  客户端地址2(参数1,参数2 ...)
 
1.4.2 配置nfs导出目录的几种方式
/data    192.168.5.171(rw,async)    # 仅导出单台主机192.168.5.171
/data     www.zhucke.com (rw,async)     # 仅导出单台主机www.zhucke.com,但必须能解析该主机名。
/data    192.168.5.0/24(rw,async) 192.168.4.180(rw,no_root_squash)    #导出192.168.5.0/24网段,和导出单台主机192.168.4.180,且导出选项各不相同。
/data      *.zhucke.com (rw,async)    # 主机名通配,导出zhucke.com下的所有主机,必须能解析对应的主机名。
/data     * (rw,async,no_root_squash)    # 导出所有主机,表示使用*号通配所有客户端;
 
1.4.3 NFS配置权限设置
 
NFS配置权限设置,即/etc/exports文件配置格式中小括号()里的参数集。
参数名称
用途
rw
read-write,读写权限;
ro
read-only,只读权限;
root_squash
压缩root用户权限;对于访问NFS Server共享目录的用户如果是root,则它的权限将被压缩成匿名用户,同时它的UID和GID都会变成nfsnobody账号身份。
no_root_squash
不压缩root用户权限; 访问 NFS Server 共享目录的用户如果是 root ,它对该共享具有 root 权限。这个配置原本为无盘客户端准备的,用户就避免使用!
all_squash
no_all_squash
压缩所有用户权限;不管访问NFS Server共享目录的用户身份如何,它的权限都将被压缩成匿名用户,同时它的UID和GID都会变成nfsnobody帐号身份。在多个NFS客户端同时读写NFS Server数据时,这个参数很有用。
anonuid and anongid
映射至何用户。以anon开头指anonymous匿名用户,这个用户的UID设置值通常为nobody或nfsnobody的UID值,可以自行设置这个UID值。但是,UID必须存在于/etc/passwd中。在多个NFS Clients时,如多台web server共享一个NFS目录时,通过这个参数可以使得不同的NFS Clients写入的数据对所有NFS Clients保持同样的用户权限,即为配置的匿名UID对应用户权限,这个参数很有用。
sync
请求或写入数据时,数据同步写入到 NFS Server 的硬盘后才会返回。
async
请求或写入数据时,先返回请求,再将数据写入到内存缓存和硬盘中,此参数可以提升NFS性能,但是会降低数据的安全。因此,一般情况下不建议使用,如果NFS处于瓶颈状态,并且允许数据丢失,可以打开此参数提升NFS性能。
写入时会先放到内存缓冲区,等硬盘空闲再写入磁盘提升写入效率!风险为若服务器宕机或不正常关机,会损失磁盘的数据!
提示:通过执行man exports查阅更多exports参数说明。
 
在配置文件写好要导出的目录后,直接重启nfs服务,它会读取这些配置文件。随后就可以在客户端执行mount命令进行挂载。
 
# 创建需要导出的目录
[root@CentOS7-171 ~]# mkdir -p /data/{test1,test2}
[root@CentOS7-171 ~]# mkdir -p /backup/web
 
示例:exports文件内容如下:
[root@CentOS7-171 ~]# vim /etc/exports
/data/test1    *(rw,no_root_squash)
/data/test2     *(rw,no_root_squash)
/backup/web    *(rw,no_root_squash)
 
 
1.5 挂载NFS文件系统
 
在客户端上挂载它们
[root@localhost ~]# mount -t nfs 192.1.68.5.171:/data/test1 /web
[root@localhost ~]# mount 192.168.5.171:/data/test2 /web2
[root@localhost ~]# mount 192.168.5.171:/backup/web /web3
挂载时“-t nfs”可以省略,因为对于mount而言,只有挂载nfs文件系统才会写成host:/path格式。当然,除了mount命令,nfs-utils包还提供了独立的mount.nfs命令,它其实和"mount -t nfs"命令是一样的。
 
1.5.1 开机自动挂载NFS
 
开机自动挂载NFS文件系统有两种方式
 
1、写入/etc/fstab文件中
 
如果是将/etc/fstab中,那么在系统环境初始化(exec /etc/rc.d/rc.sysinit)的时候会加载fstab中的内容,如果挂载fstab中的文件系统出错,则会导致系统环境初始化失败,结果是系统开机失败。所以,要开机挂载nfs文件系统,则需要在/etc/fstab中加入一个挂载选项"_netdev",防止无法联系nfs服务端时导致开机启动失败。例如:
 
192.168.5.171:/data/test2               /web2                nfs     defaults,_netdev        0 0
注意:CentOS6在/etc/fstab文件中的挂载选项"_netdev"和"_rnetdev"都可以用,而CenOS7只能用"_netdev"。
 
2、在/etc/profile.d/目录下添加脚本
 
[root@localhost ~]# vim /etc/profile.d/mount.sh
#!/bin/sh
mount 192.168.5.171:/data/test1 /web
 
注意:CentOS7,不建议再将放至到/etc/rc.d/rc.local中,因为Centos7的/etc/rc.d/rc.local文件默认是没有执行权限,如果一定在放在此文件中,需要添加执行权限,系统才会执行此文件的中命令,才会自动挂载。
 
1.6 exportfs命令
 
exportfs - maintain table of exported NFS file systems,重新导出文件系统
  • -r 重新导出
  • -u 不导出
  • -a 导出所有的
 
示例:
(1)导出/data/test2目录给客户端192.168.5.172
服务端
[root@CentOS7-171 ~]# exportfs 192.168.5.172:/data/test2
 
客户端
[root@localhost ~]# showmount -e 192.168.5.171
Export list for 192.168.5.171:
/backup/web *
/data/test1 *
/data/test2 192.168.5.172
[root@localhost ~]# mount 192.168.5.171:/data/test2 /web2
 
(2)卸载导出的目录
卸载导出的目录前,首先要取消此目录的挂载。
客户端
[root@localhost ~]# showmount -e 192.168.5.171
Export list for 192.168.5.171:
/backup/web *
/data/test1 *
/data/test2 192.168.5.172
[root@localhost ~]# umount 192.168.5.171:/data/test2    #取消挂载
 
服务端
[root@CentOS7-171 ~]# exportfs -u 192.168.5.172:/data/test2    #卸载导出的目录
 
客户端
[root@localhost ~]# showmount -e 192.168.5.171
Export list for 192.168.5.171:
/data/test1 *
/backup/web *
 
(3)导出/data/test2目录给所有人,并指定导出选项
服务端
[root@CentOS7-171 ~]# exportfs :/data/test2 -o rw,no_root_squash
 
客户端
[root@localhost web2]# showmount -e 192.168.5.171
Export list for 192.168.5.171:
/data/test2 *
/backup/web *
/data/test1 *
 
(3)重新导出所有目录,包括exports文件中的内容和exportfs单独导出的内容。
 
服务端
[root@CentOS7-171 ~]# exportfs -ar
 
客户端
[root@localhost web2]# showmount -e 192.168.5.171
Export list for 192.168.5.171:
/backup/web *
/data/test1 *
#通过exportfs命令导出的目录已经不存在了,所以通过exportfs命令导出的目录是临时生效。
 
(4)卸载所有已导出的目录,包括exports文件中的内容和exportfs单独导出的内容,即其本质为清空内核维护的导出表。
服务端
[root@CentOS7-171 ~]# exportfs -au
 
客户端
[root@localhost web2]# showmount -e 192.168.5.171
Export list for 192.168.5.171:
 
1.7 showmount命令
 
showmount - show mount information for an NFS server
显示NFS服务的挂载信息
  • -e:显示NFS服务端所有导出列表
 
[root@localhost ~]# showmount -e 192.168.5.171
Export list for 192.168.5.171:
/data 192.168.5.0/24
 
 
 

猜你喜欢

转载自www.cnblogs.com/zhuck/p/9202775.html
nfs