【1】NFS简介:
1.NFS是Network File System的简称,即网络文件系统
2.NFS是一种分布式文件系统,可以在不同的操作系统间共享文件
3.NFS基于TCP/IP协议,可将远程计算机磁盘挂载到本地
4.NFS在文件或信息传送过程中依赖于RPC(Remote Procedure Call)协议,不论是服务端还是客户端,只要用到NFS的地方都要启动RPC服务
5.RPC协议可以在不同的系统间使用,此通信协议设计与主机及操作系统无关。
6.NFS本身可以认为是RPC的一个程序,NFS是一个文件系统,而RPC负责信息的传输
【2】配置NFS服务器
1.NFS的安装需要2个软件包[通常作为系统的默认包安装]:
nfs-utils-1.3.0-0.e17.x86_64.rpm //包含一些基本的nfs命令与控制脚本
rpcbind-0.2.0-23.e17.x86_74.rpm //是一个管理RPC连接的程序,类似的管理工具为portmap
2.检查系统中是否安装了对应的软件
rpm -qa|grep -i nfs
3.使用yum工具安装nfs、rpcbind软件包[如何配置yum源,请点击这里]
yum install -y nfs-utils rpcbind
4.查看安装的主要文件列表
rpm -qpl nfs-utils-1.3.0-0.e17.x86_64.rpm
【3】NFS的主要文件和进程:
1.nfs有的发行版名字叫做nfsserver,主要用来控制NFS服务的启动和停止,安装后位于/etc/init.d目录下
2.rpc.nfsd是基本的NFS守护进程,主要功能是控制客户端是否可以登录服务器,另外可以结合/etc/hosts.allow和/etc/hosts.deny做更精细的权限控制
3.rpc.mountd是RPC安装守护进程,主要功能是管理NFS的文件系统。通过配置文件共享指定的目录,同时根据配置文件做一些权限验证
4.rpcbind是一个管理RPC连接的程序,rpc服务对NFS是必需的,因为是NFS的动态端口分配守护进程,如果rpc不启动,NFS服务则无法启动,类似的管理工具为portmap
5.exportfs,如果修改了/etc/exports,无需重新激活NFS,只要重新扫描一次/etc/exports文件,并且重新将设定加载即可。exports命令常用参数如下:
exportfs -a //全部挂载/etc/exports文件内的设置
exportfs -r //重新挂载/etc/exports中的设置
exportfs -u //卸载某一目录
exportfs -v //在export时将共享的目录显示在屏幕上
6.showmount,显示指定NFS服务器连接NFS客户端的信息。showmount命令常用参数如下:
showmount -a //列出NFS服务共享的完整目录信息
showmount -d //仅列出客户机远程安装的目录
showmount -e //显示导出目录的列表
【4】配置/etc/exports
1.格式:
#<共享目录> [客户端1 选项] [客户端2 选项]
/nfsshare *(rw,all_squash,sync,anonuid=1001,anongid=1000)
2.客户端常用的指定方式:
指定ip地址的主机:192.168.3.101
指定子网中的所有主机:192.168.3.0/24 192.168.0.0/255.255.255.0
指定域名的主机:www.domain.com
指定域中的所有主机:*.domain.com
所有主机:*
3.NFS常用选项说明:
ro //该主机有只读权限
rw //该主机对该共享目录有可读可写的权限
all_squash //将远程访问的所有普通用户及所属组都映射为匿名用户或用户组,相当于使用nobody用户访问该共享目录,此参数为默认设置
no_all_squash //与all_squash取反,该选项默认设置
root_squash //将root用户及所属组都映射为匿名用户或用户组,为默认设置
anonuid //将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户
anongid //将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户
sync //将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性
async //将数据先保存在内存缓冲区中,必要时才写入磁盘
【5】/etc/exports文件配置实例说明
例子一:
/nfsshare *.*(rw)
解释:
1.共享/nfsshare目录,所有主机都可访问,且具有读写权限
2.客户端上的任何用户在访问时都映射成nobody用户
3.若客户端要在该共享目录上保存文件,则服务器上的nobody用户对/nfsshare目录必须要有写的权限
例子二:
/nfsshare2 192.168.19.0/255.255.255.0(rw,all_squash,anonuid=1001,anongid=100)
192.168.32.0/255.255.255.0 (ro)
解释:
1.共享/nfsshare2目录,192.168.19.0/24网段的所有主机都可以访问该目录,具有读写权限,且所有的用户在访问是都映射成服务器上的uid为1001、gid为100的用户
2.192.168.32.0/24网段的所有主机对该目录有只读访问权限,且访问是所有的用户都映射成nobody用户
【6】启动服务
cat /etc/exports
mkdir /nfsshare
systemctl restart rpcbind
systemctl start nfs-server
【7】NFS服务有5个后台进程组成
rpc.nfsd //负责主要的工作
rpc.lockd和rpc.statd //负责抓去文件锁
rpc.mountd //负责初始化客户端的mount请求
rpc.rquotad //负责对客户文件的磁盘配置限制
1.这些后台程序是nfs-util的一部分,如果使用的是rpm包,它们存放在/usr/sbin目录下
2.在CentOS7之前的版本中,要启动NFS服务,执行/etc/init.d/nfsstart即可;在CentOS7中由于系统框架的改变,可以使用systemctl启动,也可以使用service nfs-server start启动
【8】确认NFS是否已经启动
rpcinfo -p
showmount -e 127.0.0.1 //查看服务器的输出清单
【9】配置NFS客户端
确定要挂载的文件路径,且该路径中已经没有存在的数据
确定要挂载的服务器端的路径,使用mount挂载到本地磁盘
命令:
[root@CentOStest]mount -t nfs -o rw 192.168.12.102:/nfsshare /test
[root@CentOStest]touch s
cannot touch 's':Permission denied
解释:
1.以读写方式挂载了共享目录,但root用户并不可写,其原因在于/etc/exports中的文件设置
2.由于all_squash和root_squash为NFS的默认设置,会将远程访问的用户映射成为nobody用户,而/test目录nobody用户是不可写的。
3.通过修改共享设置/etc/exports可以解决这个问题:
/nfsshare *(rw,all_squash,sync,anonuid=1001,anongid=1000)
4.重启NFS服务,重新挂载即可正常读写
【10】将远程服务器192.168.3.101上的/nfsshare挂载到本地目录
mount 192.168.3.101:/nfsshare /nfsshare
当挂载成功后,本地上/nfsshare目录下如果有数据,则原有的数据都不可见,用户看到的是远程主机上面/nfsshare目录中的文件列表