快捷搜索:

Linux的NFS的详细中文说明

NFS,收集文件系统(network filesystem),或许是应用RPC最凸起的收集办事了。它容许你以造访任何本地文件一样的措施来造访远程主机上的文件。这是经由过程将客户真个内核功能(它应用远程文件系统)与办事器真个NFS办事器功能(它供给文件数据)相混杂而成为可能的。这种文件造访对客户来说是完全透明的,并且可在各类办事器和各类主机布局上事情。

NFS供给的许多优点:

l   被所有用户造访的数据可以寄放在一台中央主机上,由客户在向导启动时加载这个目录。例如,你可以将所有用户的帐目寄放在一台主机上,让你的收集上的所有用户从那台主机上加载/home目录。假如也安装了NIS的话,用户就可以登录进任何系统上,而始终在一组文件上事情。

l   必要消费大年夜量磁盘空间的数据可以被保存在一台主机上。例如,所有有关LaTeX和METAFONT的文件和法度榜样可以在一个地方保存和掩护。

l   治理用的数据可以寄放在单个主机上。不再必要应用rcp将相同的文件安装到20个不合的机械上。

NFS在很大年夜程度上是由Rick Sladkey做出的,[1] 他体例了NFS的内核代码和NFS办事器的大年夜部分。后者源自于由Mark Shand体例的unfsd user-space NFS办事器和Donald Becker体例的hnfs Harris NFS办事器。

现在让我们不雅看一下NFS是若何事情的:一个客户可以哀求将一台远程主机的目录加载到一个本地目录上,正如用加载一个物理设备同样的措施。然而,用于指定远程目录的句法是不合的。例如,为了主机vlager的/home加载到vale的/users上,治理员在vale上要发出以下的敕令:[2]

# mount –t nfs vlager:/home /users

此时,mount将试图经由过程RPC联系vlager上的mountd mount后台法度榜样。办事器将反省vale是否容许加载所斟酌的目录,假如行的话,就返回一个文件句柄(file handle)。这个文件句柄将被用于所有随后对/users下的文件的哀求。

当某人经由过程NFS造访一个文件时,内核就将一个RPC调用送至办事器机械上的nfsd(NFS后台法度榜样)。该调用将文件句柄、要造访的文件名以及用户的user和group id作为参数。这些用于确定对指定文件的造访权限。为了避免非授权用户读取或改动文件,user和group id在两台主机上必须相同。

在许多UN*X实现中,NFS的客户和办事器功能是作为内核层的后台法度榜样实现的,是在系统向导时从用户空间启动的。NFS后台法度榜样(nfsd)在办事器主机上,Block I/O后台法度榜样(biod)在客户主机上。为了前进吞吐率,biod应用预读(read-ahead)和后写(迟写)(write-behind)来履行同步I/O;同样,几个nfsd后台法度榜样平日是并发运行的。

NFS的Linux实现轻细有些不合,客户代码被慎密地集成到内核的虚拟文件系统中(VFS)并且不必要经由过程biod进行别的的节制。另一方面,办事器代码完全在用户空间运行,以是同时运行该办事器的几个拷贝险些是弗成能的—由于这将涉及到同步问题。今朝Linux的NFS还短缺预读和后写机制,但Rick Sladkey计划往后将添加进去。[3]

Linux的NFS代码的最大年夜问题是Linux的1.0版内核不能分配大年夜于4K的内存块;其结果是,收集代码不能处置惩罚撤除头大年夜小等数据后大年夜于3500阁下字节的数据报。这意味着对付应用默认的大年夜的UDP数据报的系统(例如,在SunOS上是8K),从其上运行的NFS后台法度榜样上传回的数据,必要人工地切成小块。在某些情况下这会严重地侵害系统机能。[4] 这个限定在近来的Linux-1.1内核中已不复存在,并且客户代码也已进行了改动以降服这个问题。

11.1 筹备NFS

在你能够应用NFS之前,不管是作为办事器照样客户,你必须确信你的内核已将NFS支持编译进去了。对此,较新的内核在proc文件系统上有一个简单的接口,即/proc/filesystems文件,你可以应用cat来显示它:

假如fstab中没有响应的条款,那么NFS的mount调用看上去就有点乱。例如,要是你从一台称为moonshot的机械上加载你的用户主目录,moonshot机械应用一个默认的4K大年夜小的块来进行读/写操作。你可以发出如下敕令将块的大年夜小减至2K以适应Linux的数据报大年夜小的限定

# mount moonshot:/home /home -o rsize=2048,wsize=2048

在随Rick Sladkey的基于NFS的mount对象(可以在Rik Faith的util-linux软件包中找到)而来的nfs(5)手书页中对所有有效选项的列表进行了完备的描述。下面是你可能要用到的这些选项的一个不完备的列表:

rsize=n and wsize=n

这分手指出了用于NFS客户读写哀求的数据报的大年夜小。因为上述的UDP数据报大年夜小的限定,它们今朝的缺省值是1024字节。

timeo=n      这用于设置NFS客户将等待一个哀求完成的等待光阴(以十分之一秒计)。缺省值是0.7秒。

hard      明确地标记出这个卷是硬加载的(hard-mounted)。缺省值是on。

soft      软加载(Soft-mount)驱动法度榜样(与硬加载相反)。

intr      容许看护中断一个NFS调用。对付办事器没有响适时的非常中止很有用。

除了rsize和wsize以外,所有这些选项利用于当办事器临时变得弗成造访时客户的响应动作。它们一路以如下的要领行事:每当一个客户想NFS办事器发送了一个哀求,它就期望操作在一给定的光阴距离内(由timeout选项指定)完成。假如在该光阴内没有收到确认,就会发生一个所谓的次超时(minor timeout),操作被重试并且超光阴隔光阴翻倍。在到达60秒钟的最大年夜超韶光阴时,就发生一个主超时(major timeout)。

缺省地,一个主超时将导致客户法度榜样在节制台上打印出一条消息并且再次从新开始,这一次,光阴值再次翻倍。潜在地,这将会不停继承下去。执拗地重复一个操作直到办事器再次可用时的卷称为硬加载(hard-mounted)。相反地,每当一个主超时发生时,软加载(soft-mounted)的卷就为调用进程天生一个I/O掉足信息。因为缓冲引入了后写,以是在进程下一次调用write(2)函数之前,这个掉足情形并没有传播到进程本身,是以一个法度榜样就完全不能确知对一个软加载卷的写操作是否已经完成了。

然而,在某些环境下它们并不匹配。你可以不用更新客户的uid和gid以与办事器上的匹配,你可以应用ugidd映射后台法度榜样来处置惩罚这事。应用下面描述的map_daemon选项,在客户ugidd的帮忙下你可以见告nfsd将办事器的uid/gid空间映射到客户的uid/gid空间上。

ugidd是一个基于RPC的办事器,并且假如nfsd和mountd一样是从rc.inet2中启动的。

if [ -x /usr/sbin/rpc.ugidd ]; then

/usr/sbin/rpc.ugidd; echo -n " ugidd"

fi

11.4 exports文件

上面的各个选项是用于客户的NFS设置设置设备摆设摆设的,在办事器一端有不合的选项集用于设置每一客户的行径。这些选项必须在/etc/exports中设置。

缺省地,mountd不容许任何人从本地主机加载目录,这是一种异常敏感的立场。为了许可一台或多台主机用NFS加载一个目录,这个目录必须exported(输出),也即,它必须在exports文件中被指定。一个样本文件看上去象这样:

# exports file for vlager

/home     vale(rw) vstout(rw) vlight(rw)

/usr/X386    vale(ro) vstout(ro) vlight(ro)

/usr/TeX    vale(ro) vstout(ro) vlight(ro)

/      vale(rw,no root squash)

/home/ftp    (ro)

每一行定义了一个目录,以及容许加载该目录的主机。主机名平日是一个全资域名,但又可以含有*和?通配符,它们的感化与在Bourne shell中的一样。例如,lab*.foo.com与lab01.foo.com匹配,也与laber.foo.com匹配。假如主机名没有给出,就象上列中的/home/ftp目录,那么任何主机都容许加载这个目录。

当应用exports文件反省一台客户主机时,mountd将应用gethostbyaddr(2)调用查找客户的主机名,以是你必须确信没有在exports中应用又名。当不应用DNS时,那么返回的名字是在hosts文件中找到的与客户地址匹配的第一个主机名。

您可能还会对下面的文章感兴趣: