NFS的基本原理
NFS概述
网络文件系统支持在不同的文件系统之间共享文件,用户不必关心计算机的型号、使用的操作系统以及所在的位置。如果想使用远程计算机上的文件,只要用mount命令将远程的目录挂接在本地文件系统下,就可以如同使用本地文件一样使用相关资源。
NFS的优点
(1)节约磁盘空间
客户端经常使用的数据可以集中存放在一台机器上,并使用NFS发布,那么网络内部的所有计算机就可以通过网络进行访问,不必单独存储。
(2)节约硬件资源
NFS可以共享cdrom和Zip等存储设备,减少整个网络上的可移动设备的数量。
(3)用户主目录的设定
某些特殊用户,如管理员,为了管理的需求,需经常登录到网络中所有的计算机。如每个客户端均保存该用户的主目录则很繁琐,而且不能保证数据的一致性。实际上,经过NFS服务器的设定,然后在客户端指定主目录的位置,并自动挂载,就可以在任何计算机上使用用户主目录文件
NFS的版本
目前,NFS有以下常见三个版本。
(1)NFSv2:是较早的版本,并得到了广泛的支持
(2)NFSv3:提供更多的功能,包括64位文件的支持、异步写入以及错误处理
(3)NFSv4:功能强大,不再依赖portmapper,支持访问控制ACL以及状态处理
RHEL5支持NFSv2、NFSv3、NFSv4.使用NFS超载时,如果服务器支持,red hat企业版将使用NFSv3版本
所有的版本NFS都可以使用tcp协议,进行网络中的信息的传递。由于NFSv4支持状态处理,所以必须依靠tcp协议。NFSv2和NFSv3可以使用udp协议完后客户端与服务器的连接
RPC简介
NFS可以在网络中实现文件共享。由于在设计NFS时,没有提供数据传输的功能,因此,它必须借助其他协议来完成数据的传输,此协议为RPC(remote procedure call 远程过程调用)
RPC是建设客户机/服务器模式的优秀技术,定义了进程间通过网络进行交互通信的机制。它允许客户端的进程通过网络向远程服务器上的服务进程请求服务,而不需要了解服务器底层通信协议的详细信息,降低了网络程序的复杂性。
为了理解NFS和PRC的关系,这里举一个实例。图书馆保存了大量图书,种类繁多。假如图书馆只提供图书的保存、共享工作,读者如果想借阅某本书或者归还某本书,就必须知道各类图书的具体存放位置,这无疑加大了读者的借阅难度。实际上,在图书馆可以设立图书借阅处,保存一份详细的图书登记表,读者每次借阅或归还图书,只需在借阅处办理手续即可。NFS提供的文件共享类似于图书馆的功能,而RPC负责接受请求并返回信息,外部程序不需要了解内部的网络细节,其功能与图书馆借阅处有相同之处。
当RPC连接开始时,客户端建立过程调用(procedure call),将调用的参数发送至远程服务器进程,并且等待响应。当请求到达时,服务器通过客户端请求的服务,调用指定的程序,并将结果返回给客户端。当RPC调用结束时,客户端程序将继续进行余下的通信操作
NFSv2、NFSv3依赖RPC与外部进行通信,为了保证NFS服务的正常工作,需要RPC注册相应的服务端口信息,如同图书馆的图书登记表一样,构成服务信息的记录。这样,客户端向服务器的RPC提交访问某个服务器的请求时,服务器才能够正常响应。
说明:注册NFS服务器时,需要首先开启RPC,才能保证NFS注册成功。并且,如果RPC服务重启,其保存的信息将会丢失,这时需要重新启动NFS的服务进程,以注册端口信息,否则客户端将无法访问NFS服务器。
NFS的工作原理
1.NFS的工作过程
下面介绍NFS需要的守护进程。
(1)3个必须的进程
rpc.nfsd:基本的NFS守护进程,管理客户端是否能够登入服务器
rpc.monutd:rpc的安装守护进程,管理NFS的文件系统。客户端通过rpc.nfsd登陆后,还必须通过文件使用权限的验证,rpc.mountd会读取/etc/exports文件,检验客户端的权限
portmap:进行端口映射工作,记录服务对应的端口信息并提供给客户端,使客户端能够正确请求服务。如果portmap没有运行,NFS客户端就无法查找NFS服务器*享的目录。
(2)NFS服务器可能启动的其它进程
对于NFS服务器而言,为了特殊的需要,还可能启动以下进程(非必需)
rpc.lockd:多用户对共享目录的同一文件写入时,rpc.lockd进行锁定,以保证文件数据的一致性。使用该功能,在NFS客户端和服务器均要开启rpc.lockd进程
rpc.statd:维护共享目录中文件的一致性,特别是当多用户对文件进行操作的时候。该进程和rpc.lockd有关,在NFS客户端和服务器均要开启rpc.statd进程
2.nfs的工作流程
nfs服务器开启rpc、nfs服务后,nfs的相关进程会向rpc提交注册信息,根据服务进程以及对应的端口号,形成端口映射表。然后,nfs服务器通过rpc的111端口与外部的客户端进行通信。
(1)客户端程序向nfs服务器提交rpc请求,并明确访问nfs服务,告知其具体的读写操作
(2)rpc查找端口映射表,并根据客户端的请求,返回相应的结果
(3)客户端获取指定的nfs服务器端口后,将直接与nfs进程进行读写操作
我们还是先来看一下NFS所需要的rpm包是否安装
对应的rpm包
NFS相关文档
在NFS相关文档中,有两个值得重点关注
(1)/etc/exports:NFS服务的主配置文件。和其它服务的主配置文件一样,绝大部分配置都是通过编辑该文件完成的。
(2)/var/lib/nfs/xtab:主要用来记录客户端与NFS服务器的连接记录。想查看哪些客户端曾经连接过NFS服务器,查看该文件即可。
nfs的搭建流程
除安装软件外,一个简易nfs服务器的配置主要分为以下三步:
(1)建立主配置文件exports。该文件的主要目的是发布共享目录,并为共享目录限制权限。该文件位于/etc目录下,如果没有则需要自行建立此文件。而且,exports文件没有语句和注释,需要管理员进行填写
(2)发布共享目录。如,可以将/tmp目录共享,并设置共享权限
(3)重新加载配置文件或重新启动nfs服务,使配置生效
配置方案
nfs服务的主配置文件不是nfs.conf,而是exports,此文件位于/etc目录下。它的作用是定义需要共享的目录及对访问对象的控制,例如只允许192.168.1.0/24网段的客户端访问。和其他服务的主配置文件不同的是,出于安全考虑,nfs服务在默认情况下不共享任何目录,所以当需要共享目录的时候,需要管理员进行设置
发布共享目录的格式如下:
共享目录 【客户端1参数】【客户端2参数】
下面介绍各参数的作用
1.共享目录
共享目录是指在nfs服务器上允许客户端共享的目录,在设置共享目录的时候要使用绝对路径
2.客户端
客户端是指所有可以访问nfs服务器共享目录的计算机。客户端可以是某台主机,也可以是某个网段或者某个域。在指定客户端的时候,可以使用通配符,如“*”等。常用的客户端指定方式有以下几种
客户端指定方式 示例
使用ip地址指定单一主机 192.168.1.20
使用ip地址指定主机范围 172.26.0.0/16
使用ip地址指定主机范围 192.168.1.*
使用域名指定单一主机 asu.edu.cn
使用域名指定主机范围 *.edu.cn
使用通配符指定所有主机 *
3.参数
在可以附带的参数中,使用最多的就是设置权限的参数,如设置共享目录只读权限或读写权限。
参数 说明
ro 设置共享权限为只读
rw 设置共享权限为读写
no_root_squash 当使用nfs服务器共享目录的使用者是root时,将不被映射成匿名账号
root_squash 当使用nfs服务器共享目录的使用者是root时,将被映射成为匿名账号
all_squash 将所有使用nfs服务器共享目录的使用者都映射为匿名用户
anonuid 设置匿名账号的UID
anongid 设置匿名账号的gid
sync 保持数据同步,也就是将数据同步写入内存和硬盘,可能导致效率降低
async 将数据保存在内存中,而不是直接保存在硬盘中
说明:在发布共享目录的格式中除了共享目录是必须的参数外,其他参数都是可选的;而且共享目录和客户端1之间以及客户端1与客户端2之间都需要使用空格符号
nfs应用实例
公司先需要在nfs服务器上发布一系列共享目录,这次目录分别给不同的客户端使用,如下图
(1)/media目录
共享/media目录,允许所有客户端访问此目录,但只能读
(2)/NFS/public目录
共享/NFS/public目录,允许192.168.1.0/24和192.168.3.0/24网段的客户端访问,并且对此目录具有只读权限
(3)/NFS/teac1、/NFS/teac2、/NFS/teac3目录
共享/NFS/teac1、/NFS/teac2、/NFS/teac3目录,并且/NFS/teac1目录只有来自.computer.school.org域的成员可以访问并且具有读写权限,/NFS/teac2和/NFS/teac3目录分别来自.english.school.org和.count.school.org域的成员具有读写权限
(4)/NFS/works目录
共享/NFS/works目录,192.168.1.0/24网络的客户端具有只读权限,并将root用户映射成匿名用户
(5)/NFS/test目录
共享/NFS/test目录,所有人都具有读写权限。当用户使用此共享目录的时候讲账号映射为匿名用户,并且指定匿名用户的UID为65535和GID为65555
(6)/NFS/security目录
共享/NFS/security目录,仅允许192.168.1.200的客户端访问,并且有读写权限
然后我们开启服务的时候发现了报错
因为这是小编按照书上的要求指定的,因为我们指定的主机或域名以及目录不存在导致的,下面,就来一个个排除
哈哈,成功启动了!!!
下面小编就把排错过程贴出来
1.确认指定的每个文件或目录都要存在(不存在就用mkdir命令创建)
2.空格问题(该有的一定要有,不该有的一定不要有)
3.多个条件限制中间要用逗号而不是点(小编参考书上的是用“.”,害小编废了好大劲)
对于域名存在不存在不影响,ip地址也是一样,小编测试过,这里只是为了方便测试就全部用的本机拥有网段和域名。
(大家可以参考前后的不同来进行比较,那么错误就一目了然了)
然后我们将它设置成开机自启动(ntsysv也可以)
由于小编以前讲过设置开机自启动的方法,这里就不再介绍
后面补充将在下一节讲解