Linux1NFS概述

发布 2022-09-20 17:41:28 阅读 9364

samba是主要用于实现linux与windows操作系统之间文件共享的协议,而nfs则是实现unix与linux操作系统之间文件共享协议。nfs(network file system,网络文件系统)最早是由sun公司于2024年开发出来的,现在已经成为文件服务的一种标准。

nfs的主要目的就是让不同计算机不同操作系统之间可以彼此共享文件(share files),由于nfs使用起来非常方便,因此很快得到了大多数的unix/linux系统的广泛支持,而且还被iete(国际互联网工程组)制定为rfc1904、rfc1813和rfc3010标准。

nfs作为一种分布式文件系统,提供了一种在网络上的计算机间输出文件的方法,文件就如同位于用户计算机的本地磁盘上一样。nfs采用典型的客户端/服务器(c/s)工作模式,这意味着它可以将文件系统导出给其它系统,也可以挂载从其它计算机上导入的文件系统。red hat enterprise linux 5.

4系统既可以作为nfs服务器,把文件系统导出给其它系统使用,也可以是nfs客户端,挂载从其它主机上导入的文件系统。

例如,在nfs服务器上将/nfs/public目录设置为输出目录(即共享目录)后,其它客户端就可以将这个目录挂载到自己系统中的某个目录下,这个目录可以与服务器上的输出目录和其它客户端计算机中的目录不相同,如图3-1所示,客户端计算机1与计算机2的挂载目录就不相同。如果某用户登录到客户端计算机1并进入/mnt/nfs目录,那么他就可以看到nfs服务器内/nfs/public目录下的所有子目录及文件,只要具有相应的权限,就可以使用cp(复制)、cd(改变目录)、mv(移动)、rm(删除)和df(查看分区空间)等命令对磁盘或文件进行相应的操作。

图3-1 nfs服务器共享目录与客户端挂载示意图。

另外,数据传输需要使用端口,nfs也不例外,但nfs在传输数据时使用的端口是随机选择的(小于1024)。为了使客户端知道服务器使用哪一个端口传输数据,nfs就使用了一个被称为远程过程调用(remote procedure call,rpc)的协议来协助nfs服务器本身的运作。对于rpc是如何协议nfs进行工作的将在下一节中进行详细的介绍。

1.nfs协议版本。

nfs协议从诞生到现在为止,已经有多个版本,如nfs v2(rfc794)及nfs v3(rfc1813)(最新的版本是v4(rfc307))。最早,sun公司曾将nfs v2设计为只使用udp,主要原因是由于当时计算机硬件(如内存、cpu等),以及网络速度方面的影响,不得不选择对计算机负担较轻的方式。而到了nfs v3,sun公司选择了tcp作为默认的传输方式。

v3相对于v2的主要区别如下:

文件尺寸 v2最大只支持32位的文件大小(4gb),而v3新增加了支持64位文件大小的技术。

文件传输尺寸 v3没有限定传输尺寸,v2最多只能设定为8kb。

返回完整的信息 v3增加和完善了返回错误和成功信息,对于服务器的设置和管理能带来很大好处。

增加了对tcp传输协议的支持。

v2只提供了对udp的支持,在一些高要求的网络环境中有很大限制;v3增加了对tcp的支持。udp有着传输速度快且非连接传输的便捷特性,但是在传输上没有tcp稳定。当网络不稳定或者黑客入侵时很容易使nfs的性能大幅度降低,甚至使网络瘫痪。

所以对于不同情况,网络要有针对性地选择传输协议。nfs的默认传输协议是udp,然而rhel 5.0内核提供了对通过tcp的nfs的支持。

错误检测。

当tcp连接中断(由于服务器停止),客户端就会停止发送数据而开始重新连接。udp是无连接的,使用它的客户端就会继续给网络发送数据直到服务器重新上线为止。

改进了服务器的mount性能。

有更好的i/o写性能。

更强的网络运行效能,使得网络运行更为有效。

更强的灾难恢复功能。

2.nfs组件。

虚拟文件系统。

虚拟文件系统(virtual file system,vfs)为用户提供了一个统一的文件操作接口,它会将用户的任何文件请求转化为对具体文件系统的操作,是linux文件系统中对外的接口,任何要使用文件系统的程序都必须经由这层接口来使用它。

vfs包括本地文件系统和远程文件系统。为了构造虚拟文件系统,必须发生一个被称为“导出(exporting)”的事件,该事件是所有服务器节点让除自己之外的所有其它节点知道其全部共享文件系统的一种方法。通常,启动机器时会出现该进程;一个被称为“挂载”(mounting)的事件。

这是客户端从导出的可用文件系统中选择远程文件系统时用到的进程。接下来,所选的文件系统连接到客户端自己的本地文件系统上,这样就构造出了虚拟文件系统。客户端所需的远程文件系统通常都是不变的,因此,挂载同样也可以在启动的时候进行。

客户工作站上的某文件保存在系统启动期间加挂哪个文件系统等信息。服务器工作站上的另一个文件保存其它节点(导出的)可以挂载的文件系统信息。该文件还要保存哪些节点可以访问这些文件系统,哪些节点不可以,以及如果可以访问,该节点应使用多大的容量。

与挂载相反,nfs还有一个被称为“unmount”(卸载)的命令,客户端可以使用该命令断开与来自虚拟文件系统的远程文件系统的连接。

当提交挂载命令时,客户端将呼叫服务器,并告诉服务器它的意图。服务器查询访问权限,从而确定是否授权该权限,并向该客户机发送消息。如果授权访问,服务器就会为挂载的文件系统返回一个唯一标识符。

这个唯一标识符被称为文件句柄。网络范围内的系统文件维护所有已分配的和被使用的文件句柄列表。在选择新的文件句柄并将其分配给客户端计算机上新挂载的文件系统之前,要查询该列表。

在加挂过程结束之后,就会在客户机和服务器的vfs中为该文件句柄生成相应的条目。

因此,现在任何节点上的vfs都包括本地文件系统(lfs)的条目,以及远程文件系统的文件句柄。vfs通过一种方法可以知道特定请求是请求远程文件还是请求本地文件。显然,这需要提高los那种每次只能处理一个文件系统的能力。

因此,当任何用户/应用程序发送对虚拟文件系统中的文件或目录的请求时,vfs模块都可以检测该请求是针对lfs还是nfs的,然后再据此重定向该请求,如图3-2所示。

图3-2 nfs组件。

nfs接口进程。

在客户端节点和服务器节点上都需要nfs的接口进程。当服务器启动的时候,它会启动大量这样的被称为“端口监视进程”的接口进程。这些进程负责获取来自远程客户端对nfs的请求并逐个满足这些请求。

给出了作为客户端节点上的接口进程的nfs文件系统。这是服务器上端口监视进程的对应进程。该模块负责接收来自客户工作站上用户/应用程序对远程数据(nfs)的请求,然后将该请求发送给服务器的端口监视程序。

在服务器nfs满足请求之后,该模块还要负责接收来自端口监视进程的响应,并将其传送给客户工作站上的vfs。

rpc/xdr

rpc/xdr是一个运行在客户端节点和服务器节点上的软件进程。nfs能以一种特殊的方式发送和执行rpc。客户端和服务器要与rpc协议在格式、端口号等方面达成一致。

xdr是不同计算机采用不同方式表示数据的一种机制。因此,这等价于负责将包括参数在内的数据进行格式转换的表示层。xdr不仅可以传送数据,还可以将对数据类型的描述作为参数传送给rpc调用。

按照这种方式,具有不同字长和内部表示方式的系统之间可以通信。

一旦确定了rpc/xdr格式,客户端的nfs只能按照该格式发送和接收数据。然而,nfs使用tcp/ip和以太网作为底层软件传送这些消息。tcp/ip和以太网都有各自的数据包格式和帧格式。

因此,按照tcp/ip数据包格式将nfs的rpc/xdr消息分解成不同的数据块。这之后,通过给每个数据块添加控制信息而生成数据包,并再次用tcp/ip格式描述。控制信息以tcp/ip格式包含了源地址和目的地地址以及其它信息。

这些数据包被转换成以太网帧。在转换过程中,tcp/ip数据包中的数据和控制信息都被当作“数据”,然后根据以太网帧格式将它们分解成数据块。这之后,控制信息被添加到每个数据块上,从而根据以太网帧格式构成以太网帧。

其中,控制信息还包含了另外一些选项,如用于检测错误信息的crc。

最终,以太网电缆将这些数据逐位传送给服务器。在服务器端,再次收集以太网帧中的数据位,然后以tcp/ip数据包的格式处理这些数据位,最终将其转换成原始消息格式。所有这些活动包括错误/流量/顺序检查、确认以及数据包路由等都是由tcp/ip和以太网在服务器和客户机2端执行的。

因此,rpc/xdr、tcp/ip和以太网都要运行在2两端上。

3.nfs特点。

在单位或公司网络中,使用nfs服务器不仅能够使用户互不影响的快速使用共享资源,而且有利于管理员对整个文件系统的管理,减轻工作负担。通常,nfs包括以下特点:

本地工作站使用更少的磁盘空间,因为数据通常可以存放在一台计算机上而且可以通过网络进行访问。

用户不必在每个网络的计算机中都有一个home目录。home目录可以放在nfs服务器上并且网络中的每一个用户都可以拿来使用。

cdrom和zip等存储设备可以在网络上面被其它计算机使用。这可以减少整个网络上的可移动介质设备的数量。

提供透明文件访问及文件传送。

用户可以直接获取远程文件和数据,而不必了解其细节。

在网络上真正实现了分布式处理。

扩充新的资源或软件时不需要改变现有工作环境。

高性能,可灵活配置。

Linux1NFS排错

nfs故障主要集中在服务器端错误的共享设置以及客户端使用错误的挂载选项等,通常需要用户使用exports命令 mount命令,以及 etc exports文件进行故障分析与排错。在前面的小节中,已经部分介绍了错误现象及排错信息,下面在详细介绍几种。1 共享目录输出失败。用户在配置完成nfs服务器后,...

Linux1NFS工作原理

使用nfs,客户端可以透明地访问服务器中的文件系统,这不同于提供文件传输的ftp协议。ftp会产生文件的一个完整副本,而nfs只访问一个进程引用文件部分,并且一个目的就是使得这种访问透明化。这就意味着任何能够访问一个本地文件的客户端程序不需要做任何修改,就应该能够访问一个nfs文件。另外,nfs是一...

linux实验 1

北京 xx 大学 2014学年 2015学年第 1 学期 linux应用实验报告书。实验题目 实验三 gnu下编译器和调试器的使用初步 实验环境 linux环境。实验目的 通过调试一个有问题的程序,进一步熟练使用 vi 操作,而且熟练掌握 gcc 编译及 gdb 的调试命令,通过对有问题程序的跟踪调...