Board logo

标题: Linux网络文件系统NFS [打印本页]

作者: yuyang911220    时间: 2017-6-15 17:06     标题: Linux网络文件系统NFS

NFS概述
    NFS 就是 Network FileSystem 的缩写,最早之前是由Sun所发展出来的。他最大的功能就是可以透过网络,让不同的机器、不同的操作系统、可以彼此分享自己的文件 ( share file ),所以也可以简单的将他看做是一个 file server。这个NFS Server可以让你的PC来将网络远程的 NFS主机分享的目录,挂载到本地端的机器当中,所以,在本地端的机器看起来,那个远程主机的目录就好象是自己的partition一样。这里远程的那台给你共享的机器就是server,而你的pc就是client。

    NFS协议从诞生到现在为止,已经有多个版本,如NFS V2(rfc1094),NFS V3(rfc1813),最新的版本是V4(rfc3010)。
    V3相对V2的增加了很多功能,其中一个重要的功能就是增加了异步写入特性功能,下面是它的介绍:
    NFS V3 能否使用异步写入,这是可选择的一种特性。NFS V3客户端发发送一个异步写入请求到服务器,在给客户端答复之前服务器并不是必须要将数据写入到存储器中(稳定的)。服务器能确定何时去写入数据或者将多个写入请求聚合到一起并加以处理,然后写入。客户端能保持一个数据的copy以防万一服务器不能完整的将数据写入。当客户端希望释放这个copy的时候,它会向服务器通过这个操作过程,以确保每个操作步骤的完整。异步写入能够使服务器去确定最好的同步数据的策略。使数据能尽可能的同步的提交何到达。与V2 比较来看,这样的机制能更好的实现数据缓冲和更多的平行(平衡)。而NFS V2的SERVER在将数据写入存储器之前不能再相应任何的写入请求。
    那么NFS到底是怎么实现的?

    RPC概述
    虽然 NFS 有属于自己的协议与使用的port number,但是在资料传送或者其它相关讯息传递的时候,NFS使用的则是一个称为远程过程调用(Remote Procedure Call, RPC)的协议来协助 NFS 本身的运作。
    当我们在使用某些服务来进行远程联机的时候,有些信息,例如主机的IP、服务的port number、与对应到的服务之PID等等,都需要管理与对应。这些管理 port的对应与服务相关性的工作,就是这个Remote Procedure Call, RPC的任务了。
    NFS 本身的服务并没有提供资料传递的协议,但是 NFS却能让我们进行档案的分享,这其中的原因,就是NFS使用到一些其它相关的传输协议。而这些传输的协议,就是使用到这个所谓的RPC的功能。这也就是说,NFS本身就是使用RPC的一个program而已,说的更白话一点, NFS 也可以视作是一个 RPC server。
    同时要注意到的是,在某些状况中,不但跑NFS的Server需要激活RPC的服务,连带的,要挂载NFS partition的Client机器,也需要同步激活RPC才行。原因就是这样做才能使Server端与Client端能藉由RPC的协议来进行program port的对应。NFS主要在管理分享出来的目录,而至于资料的传递,就直接将他丢给RPC的协议来运作就行了。
    那么要访问Server端的文件,需要哪些后台程序,也就是Server端要提供NFS的服务,需要有哪些daemon程序支持?由前面的讨论可以知道nfs server其实就是一个rpc server,因此提供nfs的daemon 就是rpc daemon。

    NFS Server的RPC daemons
    客户端要访问nfs server的文件,NFS Server端必须NFS的服务,NFS的服务是由以下两个后台进程来完成的。
2、              rpc.mountd:这个daemon主要的功能,就是是管理NFS的文件系统。
    当Client端顺利的通过rpc.nfsd而登入主机之后,在他可以使用NFS server提供的档案之前,还会经过档案使用权限(就是那个 -rwxrwxrwx 与 owner, group 那几个权限) 的认证程序。他会去读NFS的设置文件/etc/exports来比对 Client 的权限,当通过这一关之后, Client就可以取得使用NFS文件的权限。(注:这个也是我们用来管理 NFS 分享之目录的使用权限与安全设定的地方)。
    要让NFS运行起来,对外提供服务,一共需要两个套件的支持。分别是:
    1、              nfs-utils:就是提供rpc.nfsd及rpc.mountd这两个NFS daemons与其它相关documents与说明文件、执行档等的套件,这个就是NFS的主要套件。
    2、              portmap:提高端口映射的功能。
就如同刚刚提的到,我们的NFS其实可以被视为一个RPC server program,而要激活任何一个RPC server program之前,我们都需要做好port的对应(mapping)的工作才行,这个工作其实就是『portmap』这个服务所负责的。也就是说,在激活任何一个RPC server之前,我们都需要激活portmap才行。
    那么这个portmap到底在干嘛呢?就如同这个服务的名称,就是作port的mapping。举个例子来说:当Client端尝试来使用RPC server所提供的服务时,由于Client需要取得一个可以连接的port才能够使用RPC server所提供的服务,因此,Client首先就会去跟 portmap讲『可不可以通知一下,给我个port number,好让我可以跟RPC联络吧!』,这个时候portmap就自动的将自己管理的port mapping告知 Client ,好让他可以连接上server 来。
    所以:『激活 NFS 之前,请先激活portmap』

    NFS客户端的设定
    所谓客户端的设定,其实就是说客户端该如何挂载主机的目录,当然是使用mount目录,它的语法格式:
    #mount -t nfs hostname(orIP):/directory /mountpoint
    为了担心会不小心将NFS端挂进来的具有SUID权限档案的程序执行,root可以将NFS 所分享的目录以较为安全的情况挂载进来,可以
    #mount -t nfs -o nosuid,ro hostname:/directory /mountponit
    有关mount nfs的其它可选参数:
    1、HARD mount和SOFT MOUNT:
    HARD:NFS CLIENT会不断的尝试与SERVER的连接(在后台,不会给出任何提示信息,在LINUX下有的版本仍然会给出一些提示),直到MOUNT上。
    SOFT:会在前台尝试与SERVER的连接,是默认的连接方式。当收到错误信息后终止mount尝试,并给出相关信息。
    例如:mount -F nfs -o hard 192.168.0.10:/nfs /nfs
    对于到底是使用hard还是soft的问题,这主要取决于你访问什么信息有关。例如你是想通过NFS来运行X PROGRAM的话,你绝对不会希望由于一些意外的情况(如网络速度一下子变的很慢,插拔了一下网卡插头等)而使系统输出大量的错误信息,如果此时你用的是HARD方式的话,系统就会等待,直到能够重新与NFS SERVER建立连接传输信息。另外如果是非关键数据的话也可以使用SOFT方式,如FTP数据等,这样在远程机器暂时连接不上或关闭时就不会挂起你的会话过程。
    2、rsize和wsize:
    文件传输尺寸设定:V3没有限定传输尺寸,V2最多只能设定为8k,可以使用“-rsize”和“-wsize”来进行设定。这两个参数的设定对于NFS的执行效能有较大的影响
    3、bg:在执行mount时如果无法顺利mount上时,系统会将mount的操作转移到后台并继续尝试mount,直到mount成功为止。(通常在设定/etc/fstab文件时都应该使用bg,以避免可能的mount不上而影响启动速度)
    4、fg:和bg正好相反,是默认的参数
    5、nfsvers=n:设定要使用的NFS版本,默认是使用2,这个选项的设定还要取决于server端是否支持NFS VER 3
    6、mountport:设定mount的端口
    7、port:根据server端export出的端口设定,例如如果server使用5555端口输出NFS,那客户端就需要使用这个参数进行同样的设定
    8、timeo =n:设置超时时间,当数据传输遇到问题时,会根据这个参数尝试进行重新传输。默认值是7/10妙(0.7秒)。如果网络连接不是很稳定的话就要加大这个数值,并且推荐使用HARD MOUNT方式,同时最好也加上INTR参数,这样你就可以终止任何挂起的文件访问。
    9、intr 允许通知中断一个NFS调用。当服务器没有应答需要放弃的时候有用处。
    10、udp:使用udp作为nfs的传输协议(NFS V2只支持UDP)
    11、tcp:使用tcp作为nfs的传输协议
    12、namlen=n:设定远程服务器所允许的最长文件名。这个值的默认是255
    13、acregmin=n:设定最小的在文件更新之前cache时间,默认是3
    14、acregmax=n:设定最大的在文件更新之前cache时间,默认是60
    15、acdirmin=n:设定最小的在目录更新之前cache时间,默认是30
    16、acdirmax=n:设定最大的在目录更新之前cache时间,默认是60
    17、actimeo=n:将acregmin、acregmax、acdirmin、acdirmax设定为同一个数值,默认是没有启用。
    18、retry=n:设定当网络传输出现故障的时候,尝试重新连接多少时间后不再尝试。默认的数值是10000 minutes
    19、noac:关闭cache机制。
    同时使用多个参数的方法:mount -t nfs -o timeo=3,udp,hard 192.168.0.30:/tmp /nfs
    请注意,NFS客户机和服务器的选项并不一定完全相同,而且有的时候会有冲突。比如说服务器以只读的方式导出,客户端却以可写的方式mount,虽然可以成功mount上,但尝试写入的时候就会发生错误。一般服务器和客户端配置冲突的时候,会以服务器的配置为准。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0