好学IT学院:IT信息技术分享交流平台
标签:Linux  来源:本站整理  作者:不详  发布时间:2007-11-01  ★★★加入收藏〗〖手机版
摘要:◎ What is NFS ?Network File SystemNFS是由SUN公司发展, 并於1984年推出, NFS是一个RPC service ,它使我们能够达到档案的共享, 它的设计是为了在不同的系统间使用, 所以它的通讯协定设……

◎ How NFS Work ?

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

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

XDR : (eXternal Data Representation)  外部资料表示法

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

RPC : (Remote Procedure Calls) 远端程序呼叫

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

(一般 local machine : client  remote machine : server )

□ NFS 如何运用 RPC 传送资料

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

(1) client 送出讯息,请求服务

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

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

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

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

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

   □ rc.local 启动守护程式

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

◆  当启动 NFS file server 时,the   /etc/rc.local script   会做如下的动作

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

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

◆  当启动 NFS client 时

rc.local  会做如下的动作

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

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

□ NFS daemons (守护程式) 的功用
  nfsd, biod, rpc.mountd, inetd, portmap  都可在/usr/etc 下找到

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

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

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

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

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

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