项目 5 NFS 服务器 【学习目标】 本项目将系统介绍NFS 服务器的理论知识、安装、配置和使用。通过NFS,网络中的 计算机可以发布共享的信息,而远程用户能够像使用本地文件一样访问该共享资源。 通过本章的学习,读者应该完成以下学习目标: ● 理解NFS 服务器的理论知识; ● 掌握NFS 的常用设置; ● 掌握NFS 故障排除技巧。 5.项目背景 1 五桂山公司是一家视频网络公司,该公司每天都有大量的视频需要剪辑,并有各种图片 素材需要修改。由于存储量比较大,传输过程极为不便。为了让传输速度更快,更方便员工 查找各自所需的资源,公司决定在企业内网中部署一台NFS 服务器,使得企业内网的用户 可以更快地下载到所需资源。公司的网络管理部门将在原内网的基础上配置一台新的Red HaIP:10.65.网络拓扑如图5IP 地址分配如 t7 服务器(2.8/24)作为NFS 服务器, -1所示, 表5-1所示。 图5-1 网络拓扑图 表5- 1 网络拓扑描述 序号服务名称IP 地址操作系统 1 NFS 服务器10.2.65.8/24 Linux 2 客户机10.2.65.10/24 Windows 5.知识引入 2 5.1 文件服务器 2. 文件服务器是局域网中的重要服务器,用来提供网络文件共享、网络文件的权限保护及 网络服务配置与管理———Red Hat Linux 7 102 大容量的磁盘存储空间等服务。文件服务器可以是一台普通的个人计算机,它处理文件要 求并在网络中发送它们。在更复杂的网络中,文件服务器可以是一台专门的网络附加存储 (NAS)设备,可以作为其他计算机的远程硬盘驱动器运行,并允许用户像在自己的硬盘中 一样在服务器中存储文件。 5.2.2 网络文件系统 网络文件系统(NetworkFileSystem,NFS)是一种用于分布式文件系统的协议,由 SUN公司开发,于1984年对外公布。NFS与Windows系统中的“网上邻居”十分相似,它 允许用户连接到一个共享位置,然后像对待本地硬盘一样进行操作。NFS有属于自己的协 议与端口号,但是在传送数据或者其他相关信息时,NFS服务器使用一个称为远程过程调 用(RemoteProcedureCall,RPC)的协议协助NFS服务器本身的运行。 5.2.3 远程过程调用 远程过程调用是计算机通信协议,最初由SUN 公司提出。该协议允许运行于一台计 算机上的程序调用另一台计算机上的子程序,且程序员无须额外地为这个交互过程编写代 码。目前有多种RPC模式和执行方式。IETFONC宪章重新修订了SUN 公司的版本,使 得ONCRPC协议成为IETF标准协议。现在最普遍的模式和执行方式是以开放式软件为 基础的分布式计算环境。 RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个 服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答 消息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达时,服 务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息。最后,客户端调用 进程接收答复信息,获得进程结果,然后调用执行继续进行。 一个RPC调用过程包括以下几个阶段。 (1)当客户端程序调用一个远程函数时,它实际上只是调用了一个位于本机的RPC函 数,这个函数也称客户桩(stub),客户桩将函数的参数封装到一个网络数据包中,然后将这 个数据包发送给服务器。 (2)RPC服务器接收到了客户桩发送的这个数据包,解开封装后从中提取函数的参数, 然后调用RPC服务端函数,并把参数传递给它。 (3)RPC服务端函数执行完成后,就把结果返回给RPC服务器,服务器再把这个结果 封装到网络数据包中,然后返回给原来的客户桩。 (4)客户桩收到结果数据包后,从中取出返回值,将其交给原来的客户端程序。 以上过程是由RPC程序包实现的,RPC程序包一部分在客户端,另一部分在服务器, 它们之间可以使用套接口、TLI等方式进行通信,网络程序员不需要了解RPC通信的细节, 只需要了解RPC客户端函数的使用方法即可。这种网络编程方式有以下优点。 (1)网络程序设计变得更加简单。对程序员来说,使用RPC程序后不需要了解网络通 信过程,编写网络程序与编写本地程序基本上没有区别。 (2)由于RPC程序包本身具有可靠的传输机制,因此可以使用效率更高但不可靠的协 议,如UDP。 项目5 NFS 服务器 103 (3)在异构环境中,客户机和服务器主机如果数据存储格式不同,则需要进行编码转 换,RPC程序包为参数和返回值提供了所需的编码转换,程序员无须考虑这方面的问题。 对于工作在TCP或UDP协议上的RPC程序包来说,向客户端提供RPC服务的服务 端程序也要使用一个网络端口。这个端口的端口号是临时的,而不像大部分的服务有一个 默认的端口号,这就需要通过某种机制“注册”哪个RPC服务端程序使用了哪个临时端口, 承担这个“注册”任务的程序称为端口映射器。 端口映射器本身也是一个网络服务程序,要为客户端提供哪个RPC服务程序对应哪个 端口的信息,因此它自己必须有一个默认端口,以便客户端能与它联系。端口映射器的默认 端口号是TCP或UDP111号,它可以提供以下4种服务。 ● PMAPPROC_SET:RPC服务器启动时,调用该服务向端口映射器注册要使用的端 口号等内容。 ● PMAPPROC_UNSET:RPC服务器调用该服务,取消以前的注册。 ● PMAPPROC_GETPORT:RPC客户端调用该服务,查询某种RPC服务所注册的端 口号。 ● PMAPPROC_DUMP:调用该服务时,返回所有的RPC服务器及其注册的端口号等 内容。 端口映射器RPC服务的工作流程如下。 (1)一般情况下,当系统启动时,端口映射器会首先启动,监听TCP和UDP的111号 端口。 (2)当RPC服务器启动时,为其所支持的每个RPC服务程序各绑定一个TCP和UDP 端口,然后调用端口映射器的PMAPPROC_SET 服务,注册每个RPC服务程序的程序号、 版本号和端口号等内容。 (3)当RPC客户端程序启动时,通过111号端口调用端口映射器的PMAPPROC_ GETPORT服务,查询某个RPC服务程序所对应的端口号。 (4)RPC客户程序与查询到的端口号联系,调用对应的RPC服务。 5.2.4 NFS工作原理 1.4个必需的进程 (1)rpc.nfsd。NFS文件服务器进程。主要功能是检查客户端是否具备登录主机的权 限,其中还包含对这个登录者ID的判别。 (2)rpc.mountd。主要功能是管理NFS的文件系统。当客户端通过rpc.nfsd登录主 机后,在使用NFS服务器提供的文件之前,会经过文件使用权限的认证程序,根据NFS的 配置文件/etc/exports对比客户端的权限,通过验证后,客户端才可以取得使用NFS文件 的权限。 (3)nfs-utils。提供rpc.nfsd及rpc.mountd这两个NFSdaemons的套件。 (4)rpcbind。主要功能是做好端口映射工作。NFS可以看作是一个RPC 服务器程 序,当客户端尝试连接并使用RPC服务器提供的服务(如NFS服务)时,rpcbind会将所管 理的与服务对应的端口号提供给客户端,从而使客户端可以通过该端口向服务器请求服务。 网络服务配置与管理———Red Hat Linux 7 104 2.NFS服务器可能启动的其他进程 (1)rpc.locked。rpc.locked使用本进程处理崩溃系统的锁定恢复。分享的NFS文件 可以让多个客户端使用,当它们同时尝试写入某个文件时,就可能使该文件产生错误。使用 rpc.locked则可以解决这类问题,但rpc.locked必须要同时在客户端与服务器端开启。 注意:rpc.locked常与rpc.statd同时启用。 (2)rpc.statd。rpc.statd负责处理客户端与服务器之间的文件锁定问题,从确定文件 的一致性。与rpc.locked有关,若因客户端同时使用同一文件而造成文件有可能损毁时,此 进程可以检测并尝试恢复该文件。同样,这个功能必须在服务器端与客户端同时启动才能 生效。 5.3 任务过程 5.3.1 任务1 NFS的安装与配置文件 1.任务分析 五桂山公司希望文件传输速度更快,更方便查找各自所需的资源。管理员需要在企业 内网的一台LinuxRedHat7服务器上配置一台N 文件服务器,并在此服务器上安装配置 NFS服务器。 2.任务实施过程 (1)在虚拟机名称的标题右击,弹出“选项卡”对话框,然后选择“设置”选项,如图5-2 所示。 图5-2 效果图 (2)在弹出的“虚拟机设置”对话框中,在虚拟机硬件列表中选择CD/DVD(SATA)选 项,其中“设备状态”分别勾选“已连接”和“启动时连接”复选框,接着在“连接”框中勾选“使 用ISO 映像文件”复选框,选择存放镜像RedHat7.4镜像的路径,如图5-3所示。 (3)若虚拟机右下角的光盘图标出现绿点,则表示光盘已连接,如图5-4所示。 (4)以下分别使用rpm 和yum 安装NFS,读者可任选其一进行安装。 项目5 NFS 服务器 105 图5-3 虚拟机光盘设置 图5-4 效果图 方式一:使用rpm 安装。 [root@localhost /]#mkdir wgs //创建文件夹 [root@localhost /]#mount /dev/cdrom /wgs //把镜像挂载到wgs 文件夹 mount: /dev/sr0 is write-protected, mounting read-only [root@localhost /]#cd /wgs/Packages/ //进入wgs 文件夹的Packages 目录 [root@localhost Packages]#find nfs* //查看有关NFS 的文件 nfs-utils-1.3.0-0.48.el7.x86_64.rpm [root@localhost Packages]#rpm -ivh nfs-utils-1.3.0-0.48.el7.x86_64.rpm [root@localhost Packages]#rpm -qa|grep nfs libnfsidmap-0.25-17.el7.x86_64 nfs-utils-1.3.0-0.48.el7.x86_64 (5)以上软件包的用途如下: nfs-utils-1.3.0-0.48.el7.x86_64.rpm:包含一些基本的NFS命令与控制脚本。 方式二:使yum 安装。 首先新建配置源,然后清除缓存,最后用命令“yuminstall-y NFS”安装NFS服务器。 [root@localhost /]#vi /etc/yum.repos.d/wgs.repo [dvd] name=dvd baseurl=file:///wgs //3 个”/“代表路径使用本地源文件 gpgcheck=0 enable=1 网络服务配置与管理———Red Hat Linux 7 106 [root@localhost yum.repos.d]#yum clean all //清除缓存 [root@localhost /]#yum install nfs -y 注意:RedHat7系统中已经默认安装了NFS服务。 5.3.2 任务2 配置NFS服务 1.任务分析 本任务将在“/”根目录下新建company文件夹,并使用NFS服务器进行共享配置,计 算机可通过网络访问共享文件。在配置之前,需要先了解与NFS服务器相关的文件和参 数。与NFS服务器相关的文件如表5-2所示。 表5-2 与NFS服务器相关的文件 文 件 名在系统中的作用 /etc/rc.d/init.d/nfs 启动NFS服务程序的脚本文件 /usr/sbin/exportfs NFS文件系统共享输出管理程序 /usr/sbin/nfsstat NFS统计打印程序 /usr/sbin/rpc.rquotad 远程磁盘限额服务器 /usr/sbin/showmount 显示某个NFS服务器的挂载信息 语法中的选项用来设置输出目录的访问权限、用户映射等。NFS命令中的常用选项如 表5-3所示。 表5-3 NFS常用选项说明 参 数说 明 ro 该主机有只读的权限 rw 该主机对该共享目录有可读可写的权限 all_squash 将远程访问的所有普通用户及所属组都映射为匿名用户或用户组,相当于使用 nobody用户访问该共享目录。注意此参数为默认设置 no_all_squash 与all_squash取反,该选项默认设置 root_squash 将root用户及所属组都映射为匿名用户或用户组,为默认设置 no_root_squash 与rootsquash取反 anonuid 将远程访问的所有用户组都映射为匿名用户组账户,并指定该用户为本地用户 anongid 将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本 地用户组账户 syne 将数据同步写入内存缓冲区与磁盘,虽然效率低,但可以保证数据的一致性 async 将数据先保存在内存缓冲区中,必要时才写入磁盘 如果在启动了NFS服务器之后又修改了/etc/exports文件,则可以使用exportfs命令 使修改立刻生效。exportfs的语法格式如下,常用参数说明如表5-4所示。 项目5 NFS 服务器 107 exportfs [-aruv] 表5-4 exportfs命令常用参数说明 参 数说 明 -a 全部挂载/etc/exports文件中的设置 -r 重新挂载/etc/exports中的设置 -u 卸载某一目录 -v 在export时将共享的目录显示在屏幕上 客户端查询NFS服务器的命令是showmount,该命令对于NFS的操作和查错有很大 的帮助。showmount的语法格式如下,常用参数说明如表5-5所示。 showmount [- ade][hostname] 表5-5 showmount命令常用参数说明 参数说 明 -a 列出NFS服务共享的完整目录信息 -d 仅列出客户机远程安装的目录 -e 显示导出目录的列表 2.任务实施过程 (1)使用命令systemctlstartnfs启动NFS服务器。 [root@localhost /]#systemctl start nfs (2)在“/”根目录下新建共享文件夹company。 [root@localhost /]#mkdir company (3)使用vi编辑器修改NFS配置文件,直接添加/company10.2.65.*(rw),保存配置 后退出。在/etc/exports文件中每行定义一个共享目录,文件内容格式如下。 <输出目录> [客户端(选项)] 对添加的参数说明如下。 ①/company,输出目录,是指NFS系统中需要共享给客户机使用的目录。目录必须用 从根目录开始的绝对路径表示。 ②10.2.65.*,允许访问NFS共享的客户端,客户端的指定非常灵活,常用的指定方式 如下: ● 指定IP地址的主机10.2.65.10; ● 指定子网中的所有主机10.2.65.0/24或10.2.65.*; ● 指定域名的主机www.wgs.com; ● 指定域中的所有主机*.wgs.com; ● 指定所有主机*。 网络服务配置与管理———Red Hat Linux 7 108 ③ (rw),用来设置共享目录访问的权限、用户映射等,具体详细参数请参考表5-3。 [root@localhost /]#vi /etc/exports /company 10.2.65.*(rw) (4)使用命令systemctlrestartnfs重启NFS服务器,需要重启服务器的以下配置才能 生效。 [root@localhost /]#systemctl restart nfs (5)使用命令systemctlstopfirewall关闭防火墙(具体请参考第14章)。 [root@localhost /]#systemctl stop firewall (6)使用命令setenforce0关闭SELinux。 [root@localhost /]#setenforce 0 5.3.3 任务3 客户端配置 1.任务分析 本任务将在任务2的基础上实现使用client(LinuxRedHat8.1)对NFS服务器的文 件共享进行访问使用。 2.任务实施过程 (1)客户端首先需要安装NFS,yum 命令yuminstallnfs-utils.x86_64-y的详细步骤 参考任务1。 [root@localhost roo]#yum install nfs-utils.x86_64 -y (2)用ping命令进行测试客户机与服务器的连通性,结果如下。 [root@localhost roo]#ping 10.2.65.8 PING 10.2.65.8 (10.2.65.8) 56(84) bytes of data. 64 bytes from 10.2.65.8: icmp_seq=1 ttl=64 time=0.885 ms 64 bytes from 10.2.65.8: icmp_seq=2 ttl=64 time=0.962 ms 64 bytes from 10.2.65.8: icmp_seq=3 ttl=64 time=0.996 ms ^C //用快捷键Ctrl+C 停止ping 包 ---10.2.65.8 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 56ms rtt min/avg/max/mdev=0.885/0.947/0.996/0.058 ms (3)用命令showmount-e10.2.65.8显示NFS服务器的输出清单,结果如下。查看 NFS服务器上的共享资源所使用的命令为showmount,详细参数说明请参考表5-4,语法格 式如下。 showmount [- adehv][Servername] [root@localhost roo]#showmount -e 10.2.65.8 Export list for 10.2.65.8: /company 10.2.65.* 项目5 NFS 服务器 109 5.3.4 任务4 NFS故障排错 与其他网络服务一样,运行NFS的计算机同样可能出现问题。当NFS服务无法正常 工作时,需要根据NFS的相关错误消息选择适当的解决方案。 1.错误一:网络 关于网络故障,主要有以下两个方面的常见问题。 (1)网络无法连通。使用ping命令检测网络是否连通,如果出现异常,则检查物理线 路、交换机等网络设备或者计算机的防火墙设置。 (2)无法解析主机名。对于客户端而言,无法解析服务器的主机名可能会导致使用 mount命令挂载时失败,并且服务器如果无法解析客户端的主机名,则在进行特殊设置时 同样会出现错误,所以需要在/etc/hosts文件中添加相应的主机记录。 2.错误二:客户端 客户端在访问NFS服务器时大多使用mount命令,下面列出常见的错误信息以供 参考。 (1)服务器无响应。端口映射失败,RPC超时。NFS服务已经关机或者其RPC端口 映射进程(Portmap)已关闭。重新启动服务器的portmap程序即可更正该错误。 (2)服务器无响应。程序未注册。mount命令发送请求到达NFS服务器端口映射进 程,但是NFS相关守护进程没有注册。具体解决方法在服务器设定中有详细介绍。 (3)拒绝访问。客户端不具备访问NFS服务器共享文件的权限。 (4)不被允许。执行mount命令的用户权限过低,必须具有root身份或是系统组的成 员才可以运行mount命令,即只有root用户和系统组的成员才能进行NFS的安装和卸载 操作。 5.4 项目总结 在网络环境下,本章通过NFS实现了在不同操作系统的主机之间相互传输文件。但有 时用户还希望两台计算机之间的文件系统能够更加紧密地结合在一起,让一台主机上的用 户可以像使用本机的文件系统一样使用远程机的文件系统,这种功能可以通过共享文件系 统实现。 在Linux操作系统中实现文件共享有多种方式,网络文件系统(NFS)就是其中之一。 与Samba服务器类似,网络文件系统也可以提供不同操作系统之间的文件共享服务,但主 要用于在UNIX/Linux操作系统中挂载远程文件系统。本章在介绍NFS基本概念的基础, 讲述了NFS的软件结构和安装方法。要求掌握NFS服务器的配置方法以及客户端的访问 方法。 5.5 课后习题 一、选择题 1.文件服务器的主要功能是( )。 网络服务配置与管理———Red Hat Linux 7 110 A.收发邮件B.解析域名C.远程登录D.提供文件共享服务 2.NFS的必需进程中不包括( )。 A.rpc.locked B.rpc.mountd C.rpc.nfsd D.rpcbind 3.以下不属于exports常用参数的是( )。 A.-a B.-l C.-u D.-v 4.showmount命令中关于“-e”的参数说明是( )。 A.列出NFS服务共享的完整目录信息 B.仅显示被客户端挂载的目录名 C.显示帮助信息 D.显示导出目录的列表 5.重启NFS服务器的命令是( ) A.servicerestartnfs B.systemctlrestartnfsd C.systemctlrestartnfs D.systemctlrestartsmb 二、填空题 1.NFS的中文名称是,英文全称是。 2.RPC的中文名称是,英文全称是。 3.Linux下的NFS服务主要由6部分组成,分别是、、、 、、。 三、实训题 五桂山公司是一家自媒体公司,其网络拓扑如图5-5所示。该公司每天都需要处理大 量的图片及视频的素材和广告方案。由于文件过于庞大,公司决定部署一台NFS服务器以 提供文件共享功能,这样公司内网用户就可以更快地获取各自所需的资源。 图5-5 网络拓扑图