IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Linux | AIX and UNIX | Open source  >

使用通用 NFS 装载工具进行统一装载

自动将许多不同的 NFS 版本合并成一个装载

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

英文原文

英文原文


级别: 初级

Abhidnya P. Chirmule, 系统软件工程师, IBM
Chinmay Soman, 助理软件工程师, IBM

2009 年 3 月 16 日

为了在同时出现多个 NFS 版本导出时有效地实现统一装载,您必须具备一个 NFS 装载工具。了解通用 NFS 装载工具如何帮助减少多个 NFS 版本的处理,并简化这些版本的管理。本文描述通用 NFS 装载的概念,并且概括地介绍这个系统的优势及其应用。此外,本文还给出一些总体设计细节。

网络文件系统(Network File System,NFS)是一个常用的分布式文件系统,它使远程客户机能够在服务器上执行文件操作。通过使用 export 操作,服务器就使外部机器能够访问它的目录和文件系统。为了访问这些目录,客户机将导出的目录或文件系统 mount(装载)到它的本地目录结构中。在已装载的目录内部,客户机能够像访问本地文件一样访问远程文件。到目前为止,NFS 在导出和装载目录或文件系统方面支持 3 个版本:版本 2、3 和 4。

在本文中,我们演示如何使用通用 NFS 装载工具将所有现有的 NFS 版本的导出和装载合并到一个无缝的机制中。让我们考虑这样一个场景:服务器为 3 个版本的 NFS 导出目录项。目前,如果客户机要访问所有这些项,它必须在不同的装载点分开装载每个项。尽管 NFS 版本 4 提供的伪树(pseudo-tree)机制能够一次装载所有 NFSv4 导出项,但它仅适用于由该版本生成的项。虽然版本 4 能够进行一次性装载(存在伪树时),但是客户机必须分开装载版本 2 和 3 的项。

通用 NFS 装载工具实际上是 mount 命令的包装器,它使用户能够通过一个命令从特定服务器装载所有导出项。因为改动 NFS 服务器不太好,所以这个包装器在客户机(对用户是透明的)内部分别执行不同的 mount

看看 NFS 服务器上的目录结构,如图 1 所示:


图 1. 服务器上的目录结构
服务器上的目录结构

在这个场景中,需要在客户机中执行以下 mount

  • 一个 NFSv4 mount:装载 NFSv4 伪树(Fileset1Fileset2)。NFSv4 伪树特性允许 NFSv4 客户机在伪树中对所有导出的项仅执行一个 mount 操作。
  • 两个 NFSv3 mount:装载 Tools 和 Docs。
  • 一个 NFSv3 mount:装载 Binaries。

使用 NFS 装载工具可以将这些装载合并为一个装载。使用命令:

gennfsmount <NFS server>         <mountpoint>

使用通用 NFS 装载工具有以下优点:

  • 用户仅需进行一次装载就能访问服务器上的所有信息;以前不支持这个功能。
  • 假如有这样一个服务器,它不仅导出版本 2 和 3 的旧文件集,还导出版本 4 的新文件集。客户机能够通过一个操作访问所有这些文件集并执行安装。
  • 使用这个通用工具改善了在特定服务器或特定导出目录/文件系统中的搜索。
  • 因为这个工具能够自动隔离基于版本的 NFS 导出,所以用户不再需要管理这些不同的装载点。
  • NFS 管理员能够在服务器上保留旧的 NFS 版本导出,因为仅需使用 mount 命令就可以像访问新版本数据项一样访问它们。

使用 automount 工具也能够获得类似的结果,但它需要管理员对 automount 进行许多配置才能获得所需的 NFS 装载。automounthostmap 特性声称能够从服务器 mount 所有导出项,并且不需要管理员进行任何配置,但使用 hostmap 装载 NFSv4 项时会出现问题。另外,它对 /etc/hosts 文件中列出的所有服务器都进行操作。它不能在单个装载点上装载特定服务器导出的所有项。

总体而言,通用 NFS 装载机制是最方便的。接下来,我们看看在实现通用 NFS 装载工具的过程中的一些设计决策。

设计实现细节

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


图 2. 通用 NFS 装载工具请求访问所有导出项
通用 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 所示:

UnionFS
UnionFS 是针对 Linux® 和 FreeBSD 的文件系统服务,它允许透明地覆盖独立的文件系统(即分支)的文件和目录以构成一个连贯的文件系统,从而实现统一装载文件系统。对于具有相同路径的目录的内容,将出现在生成的文件系统的一个合并目录中。针对 Linux 的 UnionFS 有两个版本:
  • Version 1.x 是独立的,可以作为模块构建。
  • Version 2.x 是最新的;它经过重新设计和实现,并且是 Andrew Morton 的 Linux -mm 树的一部分(因此它应该出现在主资源树中)。

清单 3. 使用 unionfs 进行合并
				
mount -t unionfs -o dirs=/tmp/NFSv4:/tmp/NFSv3:/tmp/NFSv2 none /mnt

这会生成以下目录结构:


图 3. unionfs 生成的目录结构
unionfs 生成的目录结构

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





回页首


使用这个系统

在这个场景中,NFS 服务器导出属于不同 NFS 版本的不同项。不过在客户机上仅执行一个装载:通用 NFS 装载。图 4 显示了服务器导出的项。


图 4. 在服务器上导出的项
在服务器上导出的项

在这里,服务器导出 5 个属于不同 NFS 版本的 NFS 项。nfs4_Anfs4_B 构成一个 NFSv4 伪树(/nfs4_A/nfs4_A/nfs4_B)。其余的是版本 2 和 3 的 NFS 导出项。

图 5 显示了服务器上的文件。


图 5. 服务器上的文件
服务器上的文件

在这个场景中,仅需使用一个装载操作,客户机就可以访问不同装载目录下的文件。不过,在这个系统中,用户使用一个装载操作就可以在一?目录结构中访问所有这些文件。

图 6 显示了使用通用 NFS 装载工具后的客户机输出:


图 6. 通用 NFS 装载工具的输出
通用 NFS 装载工具的输出

如您所见,图 6 显示了由通用 NFS 装载工具执行的多个内部装载。/mnt 目录合并了所有 NFS 装载。





回页首


结束语

至此,我们已经演示了通用 NFS 装载工具的架构和机制。这个工具不仅为 NFS 服务器上的文件提供更容易的单点访问,而且为 NFS 空间提供更加紧凑的视图,因此它是 NFS 客户机的好帮手。



参考资料

学习

获得产品和技术
  • 用可直接从 developerWorks 下载的 IBM 试用软件 构建您的下一个 Linux 开发项目。


讨论


作者简介

作者照片

Abhidnya Chirmule 是位于印度 Pune 的 IBM 软件实验室 Network File System 团队的系统软件工程师,从事 AIX 平台上的 RPC 和 NFS 等开放网络计算技术。Abhidnya 拥有位于印度 Pune 的 College of Engineering 的计算机科学学士学位。


作者照片

Chinmay Soman 是位于印度 Pune 的 IBM Systems and Technology Labs 的软件工程师。他目前参与研究 CTDB/Panache。他和 NFS 团队合作研究 AIX 系统上的 NFS 开发和管理。他拥有计算机科学学士学位。




对本文的评价










回页首


IBM、IBM 徽标、ibm.com、DB2、developerWorks、Lotus、Rational、Tivoli 和 WebSphere 是 International Business Machines Corporation 在美国和/或其他国家的商标或注册商标。这些和其他 IBM 商标术语第一次出现时,会用合适的符号(® 或 ™)进行标记,表示在美国注册的商标或普通法商标在发布此信息时归 IBM 所有。这些商标也可能是其他国家的注册商标或普通法商标。请查阅最新的 IBM 商标 列表。 Linux 是 Linus Torvalds 在美国和/或其他国家的商标。 其他公司、产品或服务的名称可能是其他公司的商标或服务标志。

IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款