nfs介绍.htm

来自「很好的参考书」· HTM 代码 · 共 534 行 · 第 1/2 页

HTM
534
字号
<pre>   ◎ How NFS Work ?
</pre>

<pre>        当我们启动 NFS file server 时,/etc/rc.local 会自动启动exportfs这
    一个程式,指定可以export的档案或目录,而我们所能mount的也只能是其所指定
    的目录.

</pre>

<pre>   □  NFS 架设在 XDR/RPC的协定之上
</pre>

<pre>     XDR : (eXternal Data Representation)  外部资料表示法</pre>

<pre>      XDR(eXternal Data Representation) 提供一种方法把资料从一种格式转换
      成另一种标准资料格式表示法,确保在不同的电脑,作业系统及电脑语言中,所
      有资料代表的意义都是相同的
</pre>

<pre>     RPC : (Remote Procedure Calls) 远端程序呼叫</pre>

<pre>      RPC(Remote Procedure Calls) 远端程序呼叫, 请求远端电脑给予服务. 委
      托器(client)就会透过网路传送RPC到远端电脑,请求服务.</pre>

<pre>      (一般 local machine : client     remote machine : server )


</pre>

<pre>   □ NFS 如何运用 RPC 传送资料

</pre>

<pre>                客户端process               主服务端process
                 ┌————┐               ┌—————┐
                 │ 客户端 │               │ 主服务站 │
                 │routines│               │ routines │
                 └—┬——┘               └┬————┘
     本地程序呼叫    │  《                   │      《
                 (1) │  │ (10)          (6) │      │ (5)
                     》  │                   》      │
                 ┌———┴┐               ┌————┴┐
                 │ 客户端 │               │ 主服务端 │
                 │  stub  │               │   stub   │
                 └—┬——┘               └┬————┘
     系统呼叫        │  《                   │      《
                (2)  │  │ (9)           (7) │      │ (4)
                     》  │                   》      │
                 ┌———┴┐       (8)     ┌————┴┐
                 │network │ <——————┤ network  │
                 │routines├——————> │ routines │
                 └————┘       (3)     └—————┘
               本地系统核心     网路通讯      远端系统核心
</pre>

<pre>     (1) client 送出讯息,请求服务</pre>

<pre>     (2) client stub (客户株) 把client 送出的参数转换成XDR---标准资料
         格式并用系统呼叫(system call) 把讯息送到网路上</pre>

<pre>     (3) 讯息经过网路送达远端主机系统</pre>

<pre>     (4) 远端主机将接受到的讯息传给server stub (服务站株)</pre>

<pre>     (5) 把XDR形式的资料,转换成符合主机端的格式,取出client发出的服务
         请求参数,送给server</pre>

<pre>     (6) -- (10) 则是逆向而行 , server 送出服务给 client


</pre>

<pre>   □ rc.local 启动守护程式
</pre>

<pre>      一个NFS server 要 inet , portmap , nfs , mount 此四个守护程式,保
   持在背景执行的状态下才能运作. (if running NIS must add ypbind daemon)
</pre>

<pre>   ◆  当启动 NFS file server 时,
</pre>

<pre>      the   /etc/rc.local script   会做如下的动作</pre>

<pre>          1. 执行exportfs , 读取server's /etc/exports 告诉kernel
             所要输出的file hierarchies 和 存取的权限
              ( exportfs -a )</pre>

<pre>          2. 启动 rpc.mountd daemon 和 nfsd daemon (通常是 8 个)
               ( rpc.mountd  -n      nfsd 8 &amp;   echo  -n 'nfsd' )

</pre>

<pre>    ◆  当启动 NFS client 时
</pre>

<pre>       rc.local  会做如下的动作</pre>

<pre>          1. 启动 boid daemons 处理读写的程序
                (biod 8   echo -n ' biod' )</pre>

<pre>          2. 执行 mount -vat nfs 读取client's /etc/fstab 并且 mount 所
             有属於 NFS-type 的files

</pre>

<pre>   □ NFS daemons (守护程式) 的功用
</pre>

<pre>    nfsd, biod, rpc.mountd, inetd, portmap  都可在/usr/etc 下找到
</pre>

<pre>    nfsd :   依client 对档案系统的需求情况, 而启动
                  &quot; file system request daemon &quot;
             应付client 的需求,而一般file system request daemon 的数目
             是 &quot; 8 &quot;, 这也就是我们在rc.local 中写 &quot; nfsd 8 &amp; &quot;的原因了
</pre>

<pre>    biod :   此指令是在NFS client上用的 , 用来启动
                 &quot; asynchronous block I/O daemon&quot;
             用来建立buffer cache , 处理在client上的读写
</pre>

<pre>    mountd : mountd 是一台 RPC server ,启动rpc.mountd daemon後 它会读取
            /etc/xtab 查看哪一台client正在mount 哪一个file system,并回
            应client 所要mount 的路径
            (mountd处理的过程可用 showmount 来看)
</pre>

<pre>    inetd : inetd (Internet services daemon) , 当系统启动时rc.local
            会启动inetd 读取 inetd.conf 这一个 configuration-file ,
            读取网路上所有 server's address , 连结启动inetd.conf中所
            有的server , 当client 请求服务时, inetd 就会为clinet 启动
            相关的server daemon 负责任务, 如user 用 telnet 时 , 则
            inetd 启动telnetd 迎合user telnet 的需求, 其馀像 ftp ,
            finger , rlogin 之类的应用程式 , inetd 也都会启动相对应的
            daemons, ftpd, fingerd, rloingd</pre>

<pre>    portmap :  portmap 是一台server , 主要功能 转换 TCP/IP 通讯协定的
               port number 变成 RPC program number , 因为这样clinet才能
               做RPC calls
</pre>

<pre>               一般 RPC server 是被inetd 所启动的, 所以portmap 必须
               在inetd之前启动, 否则无法做 RPC call


</pre>

<pre>   □ NFS 的网路安全的
</pre>

<pre>          NFS 使server上的档案能被client所取用, 乍看之下好像server 上
      的档案任何人都可取用没什麽保护性, 其实不是如此的. 一开始server
      要 exportfs 之前在 /etc/exporrc 中就已经设定了档案的使用权限, 像</pre>

<pre>          /usr/src -access=engineering:accounting</pre>

<pre>      就是限定只有 rcgineering 和 accounting 这两台 client 才能 mount
      /usr/src</pre>

<pre>          /usr/src  -access=oak,root=oak</pre>

<pre>      这是说只有 oak 这台 cilent 能 mount这一个路径 且只有 oak client's
      superuser 才能行使 read &amp; write 的权力
</pre>

<pre>         另外管理者为了维护 exported 和 mounted 的安全, 一定要建
     立公共(public)和私人(secret)的 key(password), 然而这些安全性
     问题是要建立在 NIS (network infomation system) 上的, 有一个
     /etc/publickey档 ,里面记录了public and secret keys , 而这些key
     是依照 machine_name 和 user_name ,以16 进位码表示出来的, 管理
     者可在有NIS的机器上用</pre>

<pre>         newkey -u username     给予user login 权力</pre>

<pre>         newkey -h hostname     造出login 此机器时所需的password
</pre>

<pre>         在NFS刚安装时  user 是 &quot;nobody&quot; 任何人都可以进入, 所以管理者
     一定要做修改, 以保护资料的安全.
</pre>

<pre>     当使用者为 nobody 时 publickey 的内容</pre>

<pre>         netname   user's public key    : user's secret key</pre>

<pre>          nobody  3d91f44568fbbefada5a7:7675cd9b8753b5db09dabf12
</pre>

<pre>        在管理者给予user权力之後, user 就可使用 chkey 修改自己的
     secret key 创造自己的帐号路口,
</pre>

<pre>        willow% chkey
        Generating new key for username
        password  : &lt;enter password&gt;
        Sending key change request to server ...
        Done.
        willow%
</pre>

<pre>         所设定的password 是使用者位於 NIS 中的加密键 , 当我们login 时
     NIS 就会将此密码解开,(因为publickey中是以16进位码记录) , 存放到
     keyserv 里加以保管, 再将加密键传给client , 当client 发出请求时 ,
     此键会附在每个NFS 请求上一起送到 NFS server 上, 当加密键和server上
     所保存的keyserv核对无错後, 请求就会被接受




</pre>

<pre>    □ When fail to  mount server
</pre>

<pre>         1. 用 rpcinfo -p server_name 去查看此server是否存在</pre>

<pre>         2. 用 rpcinfo -u server_name mount 查看mountd daemon 是否有
            在server上执行</pre>

<pre>         3. 假如server 都没问题,检查 server 和 client 之间的
            Ethernet connetions</pre>

<pre>         4. 在client 上 用 ps ax 看portmap and several biod daemons
            running or not !</pre>

<pre>            (rpcinfo : 用来对 RPC server 做 RPC 呼叫,回传远端程序呼叫</pre>

<pre>                       过程中的讯息)
</pre>

<pre>       一些mount 失败的错误讯息
</pre>

<pre>       1.  /etc/mtab :  No such file or directory</pre>

<pre>               mtab 这一个路径或是档案必须存在,在mount之前</pre>

<pre>       2.  mount : ... Block device required</pre>

<pre>               远端的机器名称可能打错了</pre>

<pre>       3.  mount: ... not found in /etc/fstab</pre>

<pre>               fstab 一定要存在,client 上 /etc下</pre>

<pre>       4.  ... not in hosts database</pre>

<pre>               /etc/hosts 没有这一个 hosts database , 或是
               NIS 的daemon, ypbind 没有在执行</pre>

<pre>       5.  Must be root to use mount</pre>

<pre>                一般都只有 root 才能mount ,所以mount之前先成
                为superuser</pre>

<pre>       6.  Stale NFS file handle</pre>

<pre>                当我们已经mount 上的file or directory  ,在server
                上突然被remove or unexport ,就会出现此讯息
</pre>

<p><a href="../hkbx!.htm"><strong><big>返回“新客补习”</big></strong></a></p>
</body>
</html>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?