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 & 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 对档案系统的需求情况, 而启动
" file system request daemon "
应付client 的需求,而一般file system request daemon 的数目
是 " 8 ", 这也就是我们在rc.local 中写 " nfsd 8 & "的原因了
</pre>
<pre> biod : 此指令是在NFS client上用的 , 用来启动
" asynchronous block I/O daemon"
用来建立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 & 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 是 "nobody" 任何人都可以进入, 所以管理者
一定要做修改, 以保护资料的安全.
</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 : <enter password>
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 + -
显示快捷键?