高级文件系统实现者指南:第 10 部分

高级文件系统实现者指南:第 10 部分

部署 XFS
developerWorks
文档选项
将此页作为电子邮件发送
将此页作为电子邮件发送


级别: 初级
Daniel Robbins ( [email protected]), 总裁兼 CEO, Gentoo Technologies, Inc.
2002 年 4 月 01 日
列图标随着 Linux 发行版 2.4 的出现,带来了许多新的文件系统的可能性,包括 Reiserfs、XFS、GFS 等等。这些文件系统听上去很酷,但它们究竟能做什么、擅长哪些方面,以及您究竟如何在 Linux 生产环境中安全地使用它们?Daniel Robbins 通过向您展现如何在 Linux 2.4 下设置这些新的高级文件系统来解答这些问题。在这一部分中,Daniel 向您展现了如何在您的系统上安装 XFS 并使其运行,他也探讨了 XFS 的一些更高级特性。
在本文中,我将为您演示如何在您的系统上安装 XFS 并使其运行。首先,请确保您知道并已经浏览了 SGI XFS 项目页面(请参阅本文后面的 参考资料)。如果您点击“下载”链接,您将发现补丁程序、工具甚至 Red Hat 的支持 XFS 的内核。
但是,请等一等。虽然通过使用这些预先编译好的官方发行版来安装 XFS 可能的,但是我不推荐这种方法。在写本文时,最新官方 XFS 发行版是 1.0.2,它早在 2001 年 11 月就发布了。自那以后 XFS 经历了许多改进,为了从这些改进中获益,最好使用来自 XFS CVS 树的最新源代码。根据 Gentoo Linux 开发人员和用户的反馈,使用来自 CVS 的 XFS 的人比那些尝试过使用略微有些过时的官方发布版的人有好得多的 XFS 体验。
使用 CVS
如果您以前从没有使用过 CVS,那么您可能会对我的教程 CVS for the developer or amateur感兴趣(请参阅 参考资料)。如果您只想随意试试,那么,也很好。只需确保在您的系统上安装了某种 CVS 软件包,以便您可以使用 cvs 命令。
我在这里提供的 CVS 指导信息也可以在 SGI 的站点(请参阅 参考资料)上找到。当您通过使用 cvs 获取源代码之后,您将有一个新的目录树,它含有最新的支持 XFS 的内核源代码以及最新的 XFS 工具。要从 XFS CVS 获取源代码,请首先将 CVSROOT 环境变量设置成您要从中获取源代码的资源库。在 bash 提示符下,输入:
$ export CVSROOT=':pserver:[email protected]:/cvs'

现在,将目录改为您希望创建新 XFS 目录树的位置,然后输入:
$ cvs login

当提示输入密码时,输入 cvs 。您现在登录到了公共 CVS 资源库;要获取最新 XFS 源代码,请输入:
$ cvs -z3 checkout linux-2.4-xfs

检出过程将启动。这可能会花一段时间,因为您正在获取的文件包含完整的 Linux 源代码树。过一会儿, cvs checkout 命令将完成,在您的当前工作目录下将有一个新的 linux-2.4-xfs 目录。为了将来的引用,如果您任何时候需要更新您的新源代码树,只需进入 linux-2.4-xfs 目录并输入:
$ cvs -z3q update -dP





回页首


使用树
有两个重要的目录位于新的 linux-2.4-xfs 目录中。第一个名为 linux ,它含有支持 XFS 的内核源代码树,而第二个称为 cmd ,它包含各种 XFS 用户空间程序源代码。要使用内核源代码,您可以将 linux 目录复制到 /usr/src ,或者在当前位置简单地编译一个新内核。
下面是如何安装该内核并运行它。进入 linux 目录并将 Makefile 装入您最喜欢的编辑器。在文件的顶部,您将看到类似下面的几行:
VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 17
EXTRAVERSION = -xfs

这几行告诉 Makefile 构建一个官方名称为 2.4.17-xfs 的内核。有些人更愿意有一个官方的 uname -a 内核名中不含有 -xfs 的内核;如果您属于他们中的一员,那么就请将最后一行改成:
EXTRAVERSION =

现在进行内核配置。要启用 XFS,请输入 make menuconfig 并进入 File systems 节。向下滚动一点,您将会看到下列选项:
< > SGI XFS filesystem support

启用它(推荐将它直接编译进您的内核)。键入 y ,将出现下列三个子选项:
[ ]   Enable XFS Realtime support  
[ ]   Enable XFS Quota 
< >   Enable XFS DMAPI

“XFS Realtime”选项将启用 XFS 中的实时子卷支持,它让您配置可以为实时应用程序提供更确定性的性能的存储区域。“XFS Quota”选项将 �D 您猜得到的 �D 启用对将磁盘使用限制与确定的用户和组关联的支持。“XFS DMAPI”选项(如果选中的话)将启用一个特殊的 API,这个 API 将打算供存储管理应用程序使用。目前,还没有生产级 Linux 工具利用 DMAPI(这包括 Sistina 的 LVM 和 SGI XFS 实用程序本身)的优点;然而,SGI 和 IBM 目前正在开发一些支持 DMAPI 的应用程序。
一旦您选中了“SGI XFS filesystem support”,并且按照您希望的方式配置了内核的剩余部分,那么您就可以进行 make dep && make bzImage && make modules && make modules_install ,安装您的内核并且重新引导。




回页首


安装工具
既然已经安装并且运行了支持 XFS 的内核,您就可以安装各种 XFS 工具。XFS 的一个优点是它带有一套十分完备的工具和实用程序。进入 linux-2.4-xfs/cmd 目录,然后以“root”用户在 bash 提示符下输入下面的 shell 脚本:
# for x in attr acl xfsprogs dmapi xfsdump
do
cd $x
autoconf
/configure --prefix=/usr
make
make install
cd ..
done

输入最后一行 done 之后,我们特定的构建脚本将开始执行,并且将开始安装所有不同的 XFS 工具。现在,您可以通过安装几个与开发人员有关的文件来结束这个过程,以前的 make install 命令不会安装这些文件:
# for x in attr dmapi xfsprogs
do
cd $x
make install-dev
cd ..
done





回页首


创建和挂装文件系统
一旦完成了这一最后的脚本,所有各种与 XFS 有关的程序都应该正确地安装,并且可以使用了。现在,您即将创建调整成最佳性能的 XFS 测试文件系统。
但是首先,如果您正在以前是 ReiserFS 文件系统之上创建一个 XFS 文件系统,那么您将需要使用一个小技巧。在 bash 提示符下,使用下面的命令将块设备的开始位置“置零”,该处本来用于存储 ReiserFS 文件系统,并将被初始化以包含您的新 XFS 文件系统:
# dd if=/dev/zero of=/dev/hdc9

为了擦除任何剩余的 ReiserFS 元数据,这一步是必需的;否则, mount 可能会混淆并且无意中将您的新 XFS 文件系统挂装成有缺陷的 ReiserFS 文件系统!您只需让 dd 运行大约 10 秒钟,之后,您可以使用 control-C 终止该命令。这时,以前存在的 ReiserFS 元数据的关键部分将被清除, mount 的文件系统类型自动检测代码将不会再混淆。
现在是创建新文件系统的时候了。要做到这一点,您 可以象下面那样使用 mkfs.xfs
# mkfs.xfs /dev/hdc9

虽然上述命令会起作用,但是要使用 mkfs.xfs 将您的新 XFS 文件系统配置成最佳性能,有两个选项。
第一个这样的选项是 -l size=32m ,它告诉 mkfs.xfs 配置您的文件系统使之拥有一个高达 32 MB 的元数据日志。这通过降低在文件系统处于繁忙使用期间元数据日志将“填满”的可能性而改善了性能。
第二个选项通过告诉 mkfs.xfs 将创建的分配组的数目 最小化,让您增强新文件系统的性能。通常, mkfs.xfs 自动选择分配组的数目,但是,根据我的经验,它通常会选择一个比大多数用于一般用途的 Linux 工作站和服务器过高一点的数目。正如您将从 我前一篇文章所回忆的一样,分配组让 XFS 并行执行多个元数据操作。这为高端服务器带来了便利,但是太多的分配组确实会增加一些开销。因此,不要让 mkfs.xfs 为您的文件系统选择分配组的数目,而是通过使用 -d agcount=x 选项指定一个数目。将 x 设置成一个小数目,如 4、6 或 8。您需要使得您的目标块设备中每 4 GB 容量至少有一个分配组。同时进行这两项调整,使用下面的命令创建“优化的”XFS 文件系统:
# mkfs.xfs -d agcount=4 -l size=32m /dev/hdc9

既然已经创建了文件系统,您就可以挂装它了。挂装时,您将使用一些性能增强 mount 选项来最大程度地发掘出(或发挥出)您的新文件系统的性能。
# mount /dev/hdc9 /mnt -o noatime,nodiratime,osyncisdsync

前面的两个 mount 选项关闭 atime 更新,几乎不需要 atime 更新,并且它除了降低文件系统性能之外几乎不起任何作用。 osyncisdsync 选项调整 XFS 的同步/异步行为,以便它同 ext3 更一致。多亏了我们的 mkfs.xfsmount 调整,您的新 XFS 文件系统比没这么调整时的性能要好得多。




回页首


好功能
XFS 的一个优点是它包含许多好功能。其中之一是一些名为“访问控制表”或 ACL 的特殊功能,现在在 XFS 文件系统上缺省启用这些功能。访问控制表让您定义细粒度的文件许可权。例如,您不再仅限于为用户、组及所有其它人定义“rwx”访问权限,您现在可以添加任意数目的额外用户或组并为它们指定“rwx”许可权。
全面讨论访问控制表超出了本文的范围,但是您可以在 bestbits 站点(请参阅 参考资料)上找到对 ACL 的极佳介绍。如果您浏览“Why you may want Access Control Lists (ACLs)”页面,尤其是如此。请注意,该站点上的大多数高深技术信息都同在 ext2 和 ext3 下启用 ACL 支持有关(但是不需要额外的步骤使 ACL 在 XFS 文件系统上工作)。
XFS 包含另外一个名为“扩展属性”的优秀功能特性。扩展属性让您将用户定义的数据同文件系统对象相关联。例如,如果您有一幅名为 mygraphic.png 的图像,您可以附加一个名为“thumbnail”的属性,它包含该图像的一个小版本。普通文件 IO 操作将看不到这个数据,但任何程序都可以使用一个特殊的扩展属性 API 来访问它。扩展属性在某些方面类似 MacOS 系统中的“资源分支”。
下面是如何使用 attr 可执行命令行来与扩展属性交互的示例。假定我想将 description 属性添加到我的主目录。我可以输入:
$ attr -s description -V "Home of Daniel Robbins" /home/drobbins
Attribute "description" set to a 22 byte value for /home/drobbins:
Home of Daniel Robbins

然后,要查看与 /home/drobbins 相关联的属性列表,我可以输入:
$ attr -l /home/drobbins
Attribute "description" has a 22 byte value for /home/drobbins/

要查看 description 属性的内容,我应输入:
$ attr -q -g description /home/drobbins/
Home of Daniel Robbins

扩展属性简单易用,并且使用起来也很有趣。您可以通过输入 man attr 来了解关于扩展属性的更多内容。XFS 还包含一个用于与扩展属性交互的 C API。如果您对使用扩展属性的 C++ IOStream 接口感兴趣,那么您可能要查看 SourceForge 上的 libferris(请参阅 参考资料)。
是的,扩展属性和 ACL 的确很有趣,但是,当心 �D 大多数备份程序目前仍然忽略 EA 和 ACL 数据。其中著名的例外就是随 XFS 分发包一起包含的 xfsdumpxfsrestore 命令。如果您正在使用任何其它备份程序,请确保无论在何处使用扩展属性和 ACL 之前都做一些研究。
希望您喜欢这篇对 XFS 文件系统的快速介绍。下篇文章见!


参考资料
  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文.

  • 请阅读 Daniel 的本系列中以前的文章,在那些文章里,他描述了:
    • 日志记录和 ReiserFS 的优点(第 1 部分)
    • 安装 ReiserFS 系统(第 2 部分)
    • 使用 tmpfs 虚拟内存文件系统和绑定挂装(第 3 部分)
    • devfs 设备管理文件系统的优点(第 4 部分)
    • 开始到 devfs 的转换(第 5 部分)
    • 使用 init 封装器完成到 devfs 的转换(第 6 部分)
    • ext3 文件系统的优点(第 7 部分)
    • 对 ext3 深入讨论和最新内核更新(第 8 部分)
    • XFS 后面的技术(第 9 部分)

  • 要快速了解 CVS,请查看 Daniel 的教程 开发者和爱好者的 CVS( developerWorks,2001 年 3 月)。


  • SGI 提供 安装 CVS 的指导信息。


  • 您可以在 SGI 的 XFS 项目页面上了解更多关于 XFS 的内容。加入到 邮递列表。下载该 软件。


  • 在 Extended attributes and access control lists 页面上使您自己熟悉访问控制表。您将在 Why you may want Access Control Lists (ACLs)页面上找到一个使用 ACL 的好示例。


  • 有关扩展属性的 C++ IOStream 接口,请查看 SourceForge 上的 libferris。


  • IBM 的 JFS 是一个具有经 GNU General Public License 许可的可选择的日志文件系统。有关更多信息,请访问 JFS for Linux主页。


  • 有关 JFS 的详细概述,请阅读 Daniel 的教程 JFS 基础( developerWorks,2001 年 1 月)。


  • 浏览 developerWorks上的 更多 Linux 资源。


  • 浏览 developerWorks上的 更多开放源码资源。


关于作者
作者
Daniel Robbins 居住在美国新墨西哥州的阿尔布克尔克(Albuquerque),他是 Gentoo Technologies, Inc. 的总裁兼 CEO、 Gentoo Linux(用于 PC 的高级 Linux)的创始人,以及 Portage系统(Linux 的下一代移植系统)的创始人。他还是 Macmillan 出版的几本书 Caldera OpenLinux UnleashedSuSE Linux UnleashedSamba Unleashed的投稿人。自小学二年级起就和计算机结下不解之缘,那时他第一次接触 Logo 编程语言,并沉溺于 Pac-Man 游戏中。这也许就是为什么至今他仍担任 SONY Electronic Publishing/Psygnosis的“首席图形设计师”的原因所在。Daniel 喜欢与妻子 Mary 和他们的女儿 Hadassah 一起共度时光。可以通过 [email protected]与 Daniel 联系。

你可能感兴趣的:(实现,文件系统,指南,高级,部分)