NFS 的由来与其功能.doc_第1页
NFS 的由来与其功能.doc_第2页
NFS 的由来与其功能.doc_第3页
NFS 的由来与其功能.doc_第4页
NFS 的由来与其功能.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

NFS 的由来与其功能 -什么是 NFS ( Network FileSystem ) 在开始进行 NFS 的设定之前,我们得先来了解一下,什么是 NFS 呢?不然讲了一堆也没有用,对吧! _!所谓的 NFS 就是 Network FileSystem 的缩写,最早之前是由 Sun 这家公司所发展出来的。他最大的功能就是可以透过网络,让不同的机器、不同的操作系统、可以彼此分享个别的档案 ( share file ),所以,您也可以简单的将他看做是一个 file server 呢!这个 NFS Server 可以让您的 PC 来将网络远程的 NFS 主机分享的目录,挂载到本地端的机器当中,所以,在本地端的机器看起来,那个远程主机的目录就好象是自己的一个磁盘分割槽一样 ( partition )!使用上面相当的便利! 图一、NFS 主机分享目录与 Client 挂载示意图 就如同上面的图标一般,当我们的 NFS Server 设定好了分享出来的 /home/sharefile 这个目录后,其它的 Client 端就可以将这个目录挂载到自己系统上面的某个挂载点(挂载点可以自订!),例如前面图标中的 Personal Computer 1 与 Personal Computer 2 挂载的目录就不相同。我只要在 Personal Computer 1 系统中进入 /home/data/sharefile 内,就可以看到 NFS Server 系统内的 /home/sharefile 目录下的所有资料了 (当然,权限要足够啊!_)!这个 /home/data/sharefile 就好象我自己 Personal Computer 1 里面的一个 partition 喔!只要权限对了,那么您可以使用 cp, cd, mv, rm. 等等磁盘或档案相关的指令!真是他X的方便吶! 那么您或许会问啦:咦!那么这个 NFS 是藉由什么样的协议来进行传输的呢?虽然 NFS 有属于自己的协议与使用的 port number ,但是在资料传送或者其它相关讯息传递的时候, NFS 使用的则是一个称为远程程序呼叫( Remote Procedure Call, RPC )的协议来协助 NFS 本身的运作! -什么是 RPC ( Remote Procedure Call ) 那么什么是 RPC 呢?由字面上的意思来看远程程序呼叫不就是一些程序( Program )在执行远程联机时,需要用到的程序吗?呵呵!是这样没错啦!简单的来说,当我们在使用某些服务来进行远程联机的时候,有些信息,例如主机的 IP、服务的 port number、与对应到的服务之 PID 等等,都需要管理与对应!这些管理 port 的对应与服务相关性的工作,就是这个 Remote Procedure Call, RPC 的任务了! 好了,如果我们将 NFS 与 RPC 两者的相关性连接起来的话,那么您应该就可以知道: NFS 本身的服务并没有提供资料传递的协议,但是 NFS 却能让我们进行档案的分享,这其中的原因,就是 NFS 使用到一些其它相关的传输协议!而这些传输的协议,就是使用到这个所谓的 RPC 的功能啰!这也就是说, NFS 本身就是使用 RPC 的一个 program 就是了!说的更白话一点, NFS 也可以视作是一个 RPC server 啦!同时要注意到的是,在某些状况中,不但跑 NFS 的 Server 需要激活 RPC 的服务,连带的,要挂载 NFS partition 的 Client 机器,也需要同步激活 RPC 才行!这样 Server 端与 Client 端才能藉由 RPC 的协议来进行 program port 的对应喔! OK!简单的说, NFS 也可以看做是 RPC server 的一种,因为他是使用这种协议的 program 呀! _ !那么为什么 NFS 要使用 RPC 执行呢?这是因为 NFS 本身可以被看做是一个档案系统,那么一来的话,您的使用者联机常常变化,而且您的档案内容啦、分享的目录啦,还有其它档案相关的信息等等,也都会常常在变化,这个时候,使用类似这种可以对应 program number 与 port number 的 RPC 就相当的方便了!也就是说,NFS 主要在管理分享出来的目录,而至于资料的传递,就直接将他丢给 RPC 的协议来运作就是了! 更多关于 NFS 协议的信息您可以参考底下的网页: /rfcs/rfc1094.html /HOWTO/NFS-HOWTO/index.html -NFS 激活的 RPC daemons NFS server 总共需要启用到至少两个 daemons ,一个管理 Client 是否可以登入的问题,另一个管理登入主机后的 Client 能够使用的档案权限!如果您还要管理 quota 的话,那么 NFS 还会自动的再加载其它相关的 RPC program 呢!我们这里以最简单的方式来设定 NFS,说明如下:rpc.nfsd:这个 daemon 主要的功能就是在管理 Client 是否能够登入主机的权限啦,其中还包含这个登入者的 ID 的判别喔! rpc.mountd:这个 daemon 主要的功能,则是在管理 NFS 的档案系统哩!当 Client 端顺利的通过 rpc.nfsd 而登入主机之后,在他可以使用 NFS server 提供的档案之前,还会经过档案使用权限 ( 就是那个 -rwxrwxrwx 与 owner, group 那几个权限啦 ) 的认证程序!他会去读 NFS 的设定档 /etc/exports来比对 Client 的权限,当通过这一关之后, Client 就可以取得使用 NFS 档案的权限啦!(注:这个也是我们用来管理 NFS 分享之目录的使用权限与安全设定的地方哩!) -需要的套件 要激活 NFS 我们必须要有两个套件才行,分别是:nfs-utils 与 nfs-utils-clients (有时后仅有一个) portmap 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-utils: 就是提供 rpc.nfsd 及 rpc.mountd 这两个 NFS daemons 与其它相关 documents 与说明文件、执行档等的套件!这个就是 NFS 的主要套件啦!一定要有喔!好了,知道我们需要这两个套件之后,现在干嘛?!赶快去您的系统先用 RPM 看一下有没有这两个套件啦!没有的话赶快用 RPM 去安装喔!不然就玩不下去了! 例题: 请问我的主机是以 RPM 为套件管理的 Linux distribution ,例如 Red Hat, Mandrake 与 OpenLinux 等版本,那么我要如何知道我的主机里面是否已经安装了 portmap 与 nfs 相关的套件呢? 答: 简单的使用 rpm -qa | grep nfs 与 rpm -qa | grep portmap 即可知道啦! -Server 端的设定: -NFS 的套件结构 NFS 这个咚咚真的是很简单,上面我们提到的 NFS 套件中,设定档只有一个,执行文件也不多,记录文件也三三两两而已吶!赶紧先来看一看吧! _ /etc/exports:这个档案就是 NFS 的主要设定档了!不过,系统并没有默认值,所以这个档案不一定会存在,所以您必须要使用 vi 主动的建立起这个档案喔!我们等一下要谈的设定也仅只是这个档案而已吶! /usr/sbin/exportfs:这个是维护 NFS 分享资源的指令,我们可以利用这个指令重新分享 /etc/exports 变更的目录资源、将 NFS Server 分享的目录卸载或重新分享等等,这个指令是 NFS 系统里面相当重要的一个喔!至于指令的用法我们在底下会再介绍。 /usr/sbin/showmount:这是另一个重要的 NFS 指令。exportfs 是用在 NFS Server 端,而 showmount 则主要用在 Client 端。这个 showmount 可以用来察看 NFS 分享出来的目录资源喔! /var/lib/nfs/xtab:这个档案则是主要的 NFS 的纪录文件咯!当我们的 NFS 分享出目录资源后,到底有哪些 Client 端曾经连接上我们的 NFS 主机呢?呵呵!就是看这个档案的内容即可啰! _ 就说不难吧!主要就是这几个啰! -主机的规划技巧建议 如果您的工作环境中,具有多部的 Linux 主机,并且预计彼此分享出目录时,那么在安装 Linux distribution 的时候,最好可以规划出一块 partition 作为预留之用。因为 NFS 可以针对目录来分享,因此,您可以将预留的 partition 挂载在任何一个挂载点,再将该挂载点(就是目录啦!)由 /etc/exports 的设定中分享出去,那么整个工作环境中的其它 Linux 主机就可以使用该 NFS 主机的那块预留的 partition 了!所以,在主机的规划上面,主要需要留意的只有 partition 而已。此外,由于分享的 partition 可能较容易被入侵,最好可以针对该 partition 设定比较严格的参数在 /etc/fstab 当中喔! -设定流程(/etc/exports) 我们在原理的部分对于 NFS 稍微解释了一下,哇!怎么看起来好象粉难喔!其实一点也不!为什么呢?因为 portmap 只要一支 scripts 就可以激活, NFS 只要设定一个档案就可以顺利运作!那么怎么能说不简单呢!呵呵!这个 NFS 真是他 X 的太太太.简单了在开始 NFS 之前,让我们先以 Windows 的系统当中的资源共享来说明一下整个流程吧: 在 Windows Server 上面,开启档案总管,在某个目录上面按右键选择激活资源共享; 在资源共享的内容当中,需要设定使用者权限( 以 Windows 2000 为例 ); 在 Client 端需要登入 Windows server 时,需要激活网络上的芳邻来寻找可用的网络上面分享的目录,然后点选该目录,若可以登入该 Windows server 时,则可以依据步骤一的权限使用该目录下的档案! 呵呵!没错! NFS 的整个流程也差不多是这样: 首先,需要确认一下您的 Linux 主机是否可以支持 NFS 这项服务,然后再设定一下使用者的来源IP或主机名称以及分享出去的目录的权限,之后呢,激活 NFS 即可将刚刚设定的目录给他分享出去了! 那么在 Client 端怎么使用这个分享出来的目录?就是先以 showmount 这支程序检查 Linux Server 是否有可以使用的 NFS 目录,如果有的话,就将他 mount 在本机上面,如果可以 mount ,那么就可以使用 NFS 主机提供的资源了! 哈哈!果然很简单吧!所以底下我们就来一个一个步骤的说明一下 NFS 怎么设定啰: 系统需求 /etc/exports 关于权限问题 激活服务 portmap, nfsd exportfs 检验目录 /var/lib/nfs/xtab showmount 观察激活的 port number OK!每个咚咚的细部项目就来谈一谈吧:系统需求: 嗄!NFS 有最低硬件需求吗?呵呵!您误会了!这里的需求其实指的是软件需求啦!需要的是: 除了刚刚我们已经提到的两个套件 portmap 与 nfs-utils 必需要存在之外; 您的核心版本最好能够高于 2.2.xx 以后比较好! 此外,如果重新编译过核心,您必需一定要选择NFS 支持才行! 目前,如果您使用的是安装时候的 Linux distribution 预设核心时,那么您都不用太担心,因为系统已经预设有支持 NFS 啰!所以底下的咚咚您都可以玩!但是,如果您已经重新编译过核心,并且不知道您是怎么编译的 ( 例如道听途说啦、试试看新鲜玩意啦等等的来编译您的核心时,所以没有注意到这个项目的选择 ) ,这个时候请拿出鸟哥的 Linux 私房菜 - 基础学习篇好好的再次的读一遍核心编译!/etc/exports: 好了,已经确认一切OK之后,我们就真的要来玩弄 NFS 啦!这个东西真的很简单的啦,只要一个档案就可以搞定了!那就是编辑 /etc/exports 这个档案,请注意,这个档案如果不存在,请自行建立!并且,档名不要写错了喔!这个档案的内容很简单啦,我们列出他的规则: roottest root# vi /etc/exports 欲分享的目录 主机名称1或IP1(参数1,参数2) 主机名称2或IP2(参数3,参数4) 上面的规则是这样的:欲分享的目录主要是要分享给主机名称1及主机名称2,但是提供给这两者的权限并不一样,其中,给主机名称1的权限是参数1与参数2,至于给主机名称2的 Client 权限则是参数3与参数4。好了,那么那个权限也就是参数主要有哪些呢?rw:可擦写的权限; ro:只读的权限; no_root_squash:登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有 root 的权限!这个项目极不安全,不建议使用! root_squash:在登入 NFS 主机使用分享之目录的使用者如果是 root 时,那么这个使用者的权限将被压缩成为匿名使用者,通常他的 UID 与 GID 都会变成 nobody 那个系统帐号的身份; all_squash:不论登入 NFS 的使用者身份为何,他的身份都会被压缩成为匿名使用者,通常也就是 nobody 啦! anonuid:前面关于 *_squash 提到的匿名使用者的 UID 设定值,通常为 nobody,但是您可以自行设定这个 UID 的值!当然,这个 UID 必需要存在于您的 /etc/passwd 当中! anongid:同 anonuid ,但是变成 group ID 就是了! sync:资料同步写入到内存与硬盘当中; async:资料会先暂存于内存当中,而非直接写入硬盘! 大致的参数就是这几样啰!那么我们来假设几个例子好了:思考一:我要将 /tmp 分享出去给大家使用,由于这个目录本来就是大家都可以读写的,因此我要让所有的人都可以存取。此外,我要让 root 写入的档案还是具有 root 的权限!那么您可以这么写喔! roottest root# vi /etc/exports /tmp *(rw,no_root_squash) 这样一来,无论来自哪里(*万用字符!表示万事OK!)都可以使用我的 /tmp 这个目录。请注意,那个 *(rw,no_root_squash) 中间没有空格符喔!而 /tmp 与 *(rw,no_root_squash) 则是有空格符来隔开的!特别注意到那个 no_root_squash 的功能!在这个例子中,如果您是 client 端,而且您是以 root 的身份登入您的 Linux 主机,那么当您 mount 上我这部主机的 /tmp 之后,您在该 mount 的目录当中,将具有root 的权限! 思考二:我要将一个公共的目录 /home/public 公开出去,但是只有限定我的局域网络内 /24 这个网域可以读写,其它人则只能读取: roottest root# vi /etc/exports /tmp*(rw,no_root_squash) /home/public192.168.0.*(rw) *(ro) /home/public/24(rw)*(ro) 请注意,在上面的例子中,倒数两行的格式都可以适用!所以只要写一行即可!上面的例子说的是,当我的 IP 是在 /24 这个网段的时候,那么当我在 Client 端挂载了 Server 端的 /home/public 后,针对这个被我挂载的目录我就具有可以读写的权限至于如果我不是在这个网段之内,那么这个目录的资料我就仅能读取而已,亦即为只读的属性啦! 思考三:我要将一个私人的目录 /home/test 开放给 00 这个 Client 端的机器来使用,那么我就必需这么写: roottest root# vi /etc/exports /tmp*(rw,no_root_squash) /home/public192.168.0.*(rw) *(ro) /home/test00(rw) 这样就设定完成了!而且,只有 00 这部机器才能对 /home/test 这个目录进行存取喔! 思考四:我要让 *. 网域的主机,登入我的 NFS 主机时,可以存取 /home/linux ,但是他们存资料的时候,我希望他们的 UID 与 GID 都变成 40 这个身份的使用者: roottest root# vi /etc/exports /tmp*(rw,no_root_squash) /home/public192.168.0.*(rw) *(ro) /home/test00(rw) /home/linux *.(rw,all_squash,anonuid=40,anongid=40) 特别注意到那个 all_squash 与 anonuid, anongid 的功能!如此一来,当 登入这部 NFS 主机,并且在 /home/linux 写入档案时,该档案的所有人与所有群组,就会变成 /etc/passwd 里面对应的 UID 为 40 的那个身份的使用者了!关于权限问题: 无论任何时候,权限的问题都是需要考虑到的!让我们来看看刚刚建立的 /etc/exports 档案的内容: roottest root# vi /etc/exports /tmp*(rw,no_root_squash) /home/public192.168.0.*(rw) *(ro) /home/test00(rw) /home/linux *.(rw,all_squash,anonuid=40,anongid=40) 假设我在 00 登入这部 NFS ( IP 假设为 ) 主机,并且我在 00 的帐号为 test 这个身份,同时,在这部 NFS 上面也有 test 这个帐号,果真如此的话,那么: 由于 这部 NFS 主机的 /tmp 权限为 -rwxrwxrwt ,所以我 ( test 在 00 上面 ) 在 /tmp 底下具有存取的权限,并且写入的档案所有人为 test ; 在 /home/public 当中,由于我有读写的权限,所以如果在 /home/public 这个目录的权限对于 test 有开放写入的话,那么我就可以读写,并且我写入的档案所有人是 test 。但是万一 /home/public 对于 test 这个使用者并没有开放可以写入的权限时,那么我还是没有办法写入档案喔!这点请特别留意! 在 /home/test 当中,我的权限与 /home/public 相同的状态!还需要 NFS 主机的 /home/test 对于 test 有开放权限; 在 /home/linux 当中就比较麻烦!因为不论您是何种 user ,您的身份一定会被变成 UID=40 这个帐号!所以,这个目录就必需要针对 UID = 40 的那个帐号名称,修改他的权限才行! 那么假如我在 00 的身份为 test2 ,但是 这部 NFS 主机却没有 test2 这个帐号时,情况会变成怎样呢? 我在 /tmp 底下还是可以写入,但是写入的档案所有人变成 nobody 了; 我在 /home/public 里面是否可以写入,还需要视 /home/public 的权限而定,不过,反正我的身份就被变成 nobody 了就是; /home/test 的观点与 /home/public 相同! /home/linux 底下,我的身份就被变成 UID = 40 那个使用者就是了! 那么假如我在 00 的身份为 root 呢? root 这个帐号每个系统都会有呀!呵呵!权限变成怎样呢? 我在 /tmp 里面可以写入,并且由于 no_root_squash 的参数,改变了预设的 root_squash 设定值,所以在 /tmp 写入的档案所有人为 root 喔! 我在 /home/public 底下的身份还是被压缩成为 nobody 了!因为预设属性里面都具有 root_squash 呢!所以,如果 /home/public 有针对 nobody 开放写入权限时,那么我就可以写入,但是档案所有人变成 nobody 就是了! /home/test 与 /home/public 相同; /home/linux 的情况中,我 root 的身份也被压缩成为 UID = 40 的那个使用者了! 这样的权限讲解之后,您可以了解了吗?这里是最重要的地方,如果这一关通过了,底下的咚咚就没有问题啦! _激活服务 portmap, nfsd 好了,设定OK也没有权限的问题之后 ( 有问题也没关系,可以事后在好好的检视与修改一番!) ,再来自然就是激活他啰!如何激活呢?简单的很,直接给他OK下去! roottest root# /etc/rc.d/init.d/portmap start=激活 portmap ! roottest root# /etc/rc.d/init.d/nfs start =激活 NFS 那个 portmap 根本就不需要设定!只要直接激活他就可以啦!激活之后,会出现一个 port 111 的 sunrpc 的服务!那就是 portmap 啦!至于 nfs 则会激活至少两个以上的 daemon 出现!然后就开始在监听 Client 端的需求啦!激活之后,请赶快到 /var/log/messages 里面看看有没有被正确的激活呢? roottest root# vi /var/log/messages Nov 16 15:04:45 test portmap: portmap startup succeeded Nov 16 15:04:53 test nfs: Starting NFS services: succeeded Nov 16 15:04:54 test nfs: rpc.rquotad startup succeeded Nov 16 15:04:54 test nfs: rpc.mountd startup succeeded Nov 16 15:04:54 test nfs: rpc.nfsd startup succeeded 要正常的出现上面的字样之后,才算是正确的激活喔!exportfs: 好了,那么如果我们修改了 /etc/exports 这个档案之后,是否需要重新激活 nfs 呢?呵呵,并不需要,只要使用 exportfs 重新扫瞄一次 /etc/exports 这的档案,并且重新将设定加载即可!因此,就要来了解一下 exportfs 的用法了: 语法: roottest root# exportfs -aruv 参数说明: -a :全部挂载(或卸载) /etc/exports 档案内的设定 -r :重新挂载 /etc/exports 里面的设定,此外,亦同步更新 /etc/exports 及 /var/lib/nfs/xtab 的内容! -u :卸载某一目录 -v :在 export 的时候,将分享的目录显示到屏幕上! 范例: roottest root# exportfs -rv =全部重新 export 一次! exporting 00:/home/test exporting 192.168.0.*:/home/public exporting *.:/home/linux exporting *:/home/public exporting *:/tmp reexporting 00:/home/test to kernel roottest root# exportfs -au =全部都卸载了! 要熟悉一下这个指令的用法喔!这样一来,就可以直接重新 export 我们的记录在 /etc/exports 的目录资料啰!检验目录 /var/lib/nfs/xtab 好了,当您顺利的将您的目录都分享出去之后,您怎么知道每个目录的分享权限呢?不要忘记了,因为我们有相当多的预设属性呢!因此,这个时候就得需要检验一下您所分享的目录内容啰!看一下 /var/lib/nfs/xtab 这个档案吧!他有点像这样: roottest root# vi /var/lib/nfs/xtab /home/test 00(rw,sync,wdelay,hide,secure,root_squash, no_all_squash,subtree_check,secure_locks,mapping=identity,anonuid=-2, anongid=-2) 看到没?这个就是 /home/test 这个分享出去的目录的预设 NFS 里面的属性啦!这个属性状态里头有个比较奇怪的,那就是 anonuid=-2 这个,怎么有 uid=-2 的呢?呵呵!其实它说的是将 65536 - 2 的值,也就是 65534 的那个 UID 啦!对照一下 /etc/passwd ,您就会发现,哇!原来那就是 nobody 的啦!showmount: showmount 顾名思义,就是看看有没有可以 mount 的指令嘛!怎么用呢? 语法: roottest root# showmount -ae hostname -a :在屏幕上显示目前主机与 Client 所连上来的使用目录状态 -e :显示 hostname 这部机器的 /etc/exports 里面的分享目录! 范例: roottest root# showmount -e localhost Export list for localhost: /tmp * /home/linux *. /home/public (everyone) /home/test 00 很简单吧!所以,当您要扫瞄某一部主机他提供的 NFS 分享的目录时,就使用 showmount -e IP(或hostname)即可!非常的方便吧!观察激活的 port number: OK!来看看我们激活 NFS 之后,到底激活了多少的 port 呢?要注意的是,我们有激活 portmap 与 nfs 两支 scripts 喔! roottest root# netstat -utln Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 :111 :* LISTEN =来自 portmap tcp 0 0 :817 :* LISTEN =来自 rpc.xxxx tcp 0 0 :1266 :* LISTEN =来自 rpc.xxxx udp 0 0 :2049 :*=就是 nfs 的 port udp 0 0 :814 :*=来自 rpc.xxxx udp 0 0 :1327 :*=来自 rpc.xxxx udp 0 0 :111 :*=来自 portmap 注意看到上面喔!总共产生了好多的 port 喔!真是可怕!先注意到 nfs 自己所开启的 port ,就是那个 2049 的 port 啦!那个就是 NFS 主要产生的 port 啰。那么其它的 rpc.xxxx 的 port 又是从何而来? NFS server 在前面我们就提过了,他是 RPC server 的一种,而 NFS 由于提供了多个 program ( 例如 rpc.mountd, rpc.rquotad, rpc.nfsd. ) ,因此就需要激活多个 port 了!而且这些 port 是随机产生的,也就是那个 port number 不会是固定的啦!每次 restart nfs 都会得到不一样的 port number 呢!那么 Client 端怎么知道要连接上那个 port 来呼叫需要的 program 呢?呵呵!那就是 sunrpc ( port 111 ) 那个 portmap 服务所产生的 port number 的功用啦!Client 会先连接到 sunrpc 那个 port 去知道应该到那个 port 去呼叫所需要的程序!所以啰, rpc.xxxx 等之类的 daemon 自然就不需要有固定的 port number 啰!OK!这样一来, Server 端的设定就 OK 啦! -RPC server 的相关指令: 好了,既然我们知道这个 NFS 其实使用的是 RPC 这个咚咚,所以当然要知道 RPC 的每个 port 在干什么呀!这个时候,就不能不知道 rpcinfo 这个指令了!先来谈一谈这个指令的用法吧! 语法: roottest root# rpcinfo -p hostname(orIP) -p :显示所有的 port 与 program 的信息! 范例: roottest root# rpcinfo -p program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100011 1 udp 1014 rquotad 100011 2 udp 1014 rquotad 100011 1 tcp 1017 rquotad 100011 2 tcp 1017 rquotad 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100021 1 udp 1339 nlockmgr 100021 3 udp 1339 nlockmgr 100021 4 udp 1339 nlockmgr 100005 1 udp 1340 mountd 100005 1 tcp 1271 mountd 100005 2 udp 1340 mountd 100005 2 tcp 1271 mountd 100005 3 udp 1340 mountd 100005 3 tcp 1271 mountd 这样就可以知道每个 port number 所对应的 program 啰!您也就知道这个 RPC server 提供给您的 program 是什么了!当然了,要让这个 rpcinfo 可以正确的动作,您的 portmap 得真的动起来才行吶!加油啰!-Client 端的设定: 挂载远程主机: 好了, Server 端已经设定完毕,接着下来自然就是要使用 Client 端连接上 Server 端啰!那么连接上 Server 的步骤是怎样呢?扫瞄可以使用的 Server 目录; 在 Client 本地端建立 mount point; 使用 mount 将远程主机分享的目录挂载进来; 可能发生的问题解决(被防火墙挡掉了!?)。 OK啦!所以我们得先知道一下我们的主机里面有什么?假设我的主机名称是 ,那么我要知道里头有些什么藉由 NFS 分享出来的目录,就给他 showmount 一下啰! roottest root# showmount -e Export list for localhost: /tmp * /home/linux *. /home/public (everyone) /home/test 00 然后呢?假设我要将 /home/public 挂载在我的 /home/nfs/public 底下,那么我就得先有这个目录才行呀!然后再利用 mount 这个指令来挂载 /home/public 这个目录!有点像这样: roottest root# mkdir -p /home/nfs/public =建立 public 这个目录,加 -p 可以持续增加目录 roottest root# mount -t nfs :/home/public /home/nfs/public 挂载的格式: roottest root# mount -t nfs hostname(orIP):/directory /mount/point roottest root# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/hda1 1904920 1235380 572776 69% / /dev/hdb1 976344 115212 810736 13% /backup :/home/public 1904920 1235376 572776 69% /home/nfs/public =这个是远程主机的容量 先注意一下挂载 NFS 档案的格式范例喔!呵呵!这样就可以将资料挂载进来啦!请注意喔!以后,只要您进入您的目录 /home/nfs/public 就等于到了 那部远程主机的 /home/public 那个目录中啰!很不错吧!那么如何将挂载的 NFS 目录卸载呢?就使用 umount 啊! roottest root# umount /home/nfs/public 可能发生的问题: 通常无法挂载的原因有底下这几个: 使用者的权限不符:以上面的例子来说明,我的 /home/test 只能提供 /24 这个网域,所以,如果我在 这部机器中,以 localhost 来挂载时,就会无法挂载上,这个权限概念没问题吧!那么您可以试试看: root test root# mount -t nfs localhost:/home/test /home/nfs mount: localhost:/home/test failed, reason given by server: Permission denied 所以啰!如果您发现上面的显示的讯息时,就表示您的主机权限不能够进入该目录啰!如果确定您的 IP 没有错误,那么请回到 /etc/exports 这个档案中,针对您自己的 IP 来进行修正吧! 忘记激活 portmap : 这个最容易被忘记了!就是忘记了激活 portmap 这个服务啦!如果您发现您的 mount 的讯息是这样: roottest root# mount -t nfs localhost:/home/test /home/nfs mount: RPC: Port mapper failure - RPC: Unable to receive 或者是: roottest root# mount -t nfs localhost:/home/test /home/nfs mount: RPC: Program not registered 那么就赶紧将 portmap 激活吧!并且也需要将 nfs 重新激活喔! roottest root# /etc/rc.d/init.d/portmap start roottest root# /etc/rc.d/init.d/nfs restart 被防火墙挡掉了: 这个也很容易忘记了!那

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论