设计实现细节

我们先看一下通用NFS装载系统的基础架构.通用NFS装载工具从内部向服务器发送一个请求,要求访问所有导出项.

图 2. 通用NFS装载工具请求访问所有导出项

图 2. 通用NFS装载工具请求访问所有导出项

收到服务器的回复之后,将执行清单 1 中的算法:

清单 1. 通用NFS装载工具的算法

Start

Create temporary directories for all versions.

Initialize list of mount security flavors.

Embed this list in each internal mount operation.

For each item in the export-list

Do

Mount internally for every NFSv2 and NFSv3 export

Update internal log

End for

Mount internally only once for NFSv4 export.

Update internal log

Stop

security flavors 是一个由逗号分隔的安全方法列表sys、krb5 和 krb5i 等).在装载点的 read/write 操作期间将用到这些方法.这个列表用于匹配服务器支持的安全方法.此外,随后在该装载点下发生系统调用时也用到该列表.相应的导出项的NFS版本也可以使用类似的机制.

当所有内部装载完成时,将使用 UnionFS 合并所有内部目录,如清单 2 所示.

清单 2. 使用 UnionFS 合并所有内部目录

mount -t unionfs -o dirs=<temp_dir1>[:<temp_dir2>...] none <mount-point>

还记得 前一个场景吗?在前面的场景中,客户机上有一个针对 v4 伪树的 NFSv4 装载,两个针对 Tools and Docs 的 NFSv3 装载,一个针对 Binaries 的 NFSv3 装载,并且我们使用通用NFS装载工具 —gennfsmount <NFS server> <mountpoint>— 将它们合并到一个装载中.在这个例子中,将创建以下临时目录:

◆/tmp/NFSv4

◆/tmp/NFSv3/Tools

◆/tmp/NFSv3/Docs

◆/tmp/NFSv2/Binaries

然后使用 unionfs 合并它们,如清单 3 所示:

清单 3. 使用 unionfs 进行合并

mount -t unionfs -o dirs=/tmp/NFSv4:/tmp/NFSv3:/tmp/NFSv2 none /mnt

这会生成以下目录结构:

图 3. unionfs 生成的目录结构

图 3. unionfs 生成的目录结构

接下来,我们看看如何使用这个系统.


相关内容