Chinaunix首页 | 论坛 | 博客
  • 博客访问: 203276
  • 博文数量: 124
  • 博客积分: 7051
  • 博客等级: 少将
  • 技术积分: 1425
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-20 13:21
文章分类

全部博文(124)

文章存档

2008年(124)

我的朋友

分类: LINUX

2008-04-22 17:24:07

通用线程: 高级文件系统实现者指南,第 2 部分

Daniel Robbins (drobbins@gentoo.org), 总裁/首席执行官, Gentoo Technologies, Inc.

2001 年 8 月 01 日

    随着 Linux 2.4的发行,出现了使用很多新的文件系统的可能性,包括ReiserFS、XFS、GFS和另外一些文件系统。这些文件系统听起来很“酷”,但是它们到底能做些什么呢,它们擅长什么,还有您究竟怎样才能在一个产品Linux 环境中安全地使用它们呢?在本系列文章中,Daniel Robbins通过向您展示怎样在 Linux 2.4下安装这些新的高级文件系统,回答了这些问题。在他的 本系列前面的文章中,Daniel 介绍了日志和 ReiserFS 的好处。在本文中 Daniel将教您安装一个非常稳定的基于 Linux 2.4 的 ReiserFS系统。

在本文中,我会向您展示如何让 ReiserFS 运行在 2.4 系列的内核下。我还会和您分享很多关于不同主题的技术信息,包括使用 ReiserFS 最好的 2.4 内核,性能注意事项等等。因为我首先会谈到安装,所以我建议您先通读本文,然后再遵循安装指示。这样,您开始在自己的系统上运行 ReiserFS 的时候,脑子里就会有所有的技术注解,这样您就可以在各个步骤作必要的调整。

寻找好的内核

要在您的系统上使用 ReiserFS,您首先需要找到一个合适的内核。如果您已经熟悉 2.4 内核的发展,您就会知道这个过程比它听起来要复杂。本文完成时,最新的内核是 2.4.6-pre2;但是我建议您在自己的 ReiserFS 系统上还是使用 2.4.4(标准的 Linus 内核)或者 2.4.4-ac9(稍作改进的 Alan Cox 内核)。从我的测试看来,2.4.5 似乎很不稳定,所以我不推荐将这个内核作为产品使用;让我们希望 2.4.6 会比它好很多吧。

如果您想在自己的产品 ReiserFS 系统中使用除 2.4.4 或 2.4.4-ac9 以外的其它内核, 一定要作必要的检查以确保 ReiserFS(和内核大体上)是稳定的。当然,如果您是在一个测试服务器上安装 ReiserFS,只要不会丢失重要的数据,您就可以随意使用任一种内核。

总的来说,要注意内核稳定性问题,特别是 ReiserFS 的稳定性问题,这有两个原因。因为 ReiserFS 是一个“实验的”内核功能,您不能假定一个使用新内核的 ReiserFs 实现刚刚从 tarball 中解出就能够很好地运行。第二个原因(也许在目前是更重要的问题)在于大部分的 2.4 内核发行版和补丁都有一点不稳定,所以目前您行动时还是需要谨慎一点。理论上,所有的 2.4 发行版都应该是准产品化的,因为 2.4 版本应该是一个稳定的系列;但是,实际上它们(还)不是,所以强烈鼓励您小心使用新的、没有测试过的内核。

这段信息的意思不是要吓得您不敢使用 ReiserFS 或者 Linux 2.4,而是要给那些更敢于冒险的人一点理性。不要总是在重要的系统上使用各种还处于测试期的内核;如果这样,您 会吃到苦头的。当您使用一个不可靠的内核时,您不仅仅面临着系统锁定的危险;您还面临着丢失数据和文件系统崩溃的危险,这是您绝对不希望发生的。即便 ReiserFS 实现本身是稳定的,内核其他部分的主要错误也很可能引起文件系统崩溃的产生。

如果您没有最新的内核稳定性信息来源,我建议您定期地访问 Linux 每周新闻(请参阅本文后面的 参考资料),及时了解最新的可能出现的内核问题(信息每个星期四更新)。希望现在我已经说服了更多喜欢冒险的读者坚持使用 2.4.4 或 2.4.4-ac9 内核作为产品 ReiserFS 的配置,让我们继续吧。

标准内核

OK,我们现在可以谈谈安装和运行一个准产品化的 ReiserFS 系统的三种选择。第一种选择是只用标准 2.4.4 Linux 内核。第二种选择是使用 2.4.4 内核,同时使用 ReiserFS 大补丁,它包括了一些专门的补丁,使 ReiserFS 达到配额兼容,并与在本机运行的 NFS 服务器更加兼容。第三种选择是,我们可以使用 2.4.4 内核和 ac9 补丁(即 2.4.4-ac9),再加上或不加大补丁。通常我推荐使用 2.4.4-ac9 和大补丁,因为大补丁并没有任何负作用,而且您可能会需要它,而且 ac9 比标准内核执行得好多了。但是,如果您不愿意使用 ac 内核,标准 2.4.4 也不错了。我会简单地向您介绍设置 2.4.4-ac9 和大补丁的步骤,但是如果因为某些原因您不愿安装这两个补丁或其中之一,只要跳过这个步骤即可。现在,让我们开始吧。

首先,从 kernel.org 下载 2.4.4 内核源码并进入您的 /usr/src 目录。 移去该处的任何 linux 目录或者符号连接,如果是目录就将其改名,如果是符号连接就只需删除它。然后:

# cd /usr/src
# cat /path/to/linx-2.4.4.tar.bz2 | bzip2 -d | tar xvf -


ac9 补丁和大补丁

如果您计划只用标准 2.4.4 内核,您就已经拥有全部所需的资源了,可以跳过其余的补丁。然而,我推荐您继续使用下面的 ac 补丁和大补丁。

要使用 ac9 补丁,请从 kernel.org 下载 Alan Cox ac9 补丁。然后键入:

# cd /usr/src/linux
# bzip2 -dc /path/to/patch-2.4.4-ac9.bz2 | patch -p1


一旦标准内核安装完毕,就到 DiCE 网站去下载 DiCE 的 ReiserFS 大补丁。这个步骤还是可选的,不过也是推荐的,特别是如果您将在此系统上运行 NFS 服务器或者需要配额(如果不是这样,无论如何这个补丁也不会有什么坏处)。要使用大补丁请遵循以下步骤:

# cd /usr/src/linux
# bzip2 -dc /path/to/bigpatch-2.4.4.diff.bz2 | patch -p1


一旦所有可选的修正和大补丁安装完毕,您就可以为 ReiserFS 配置内核了。

注意:如果您需要更多关于如何编译 Linux 内核的指导,可参阅 developerWorks上的 编译 Linux 内核免费教程。下面是一个简单的摘要。

配置内核非常简单。首先,键入“make menuconfig”。在“Code maturity level options”部分,确保启用了“Prompt for development and/or incomplete code/drivers”选项。然后到“File systems”部分,启用“ReiserFS support”选项。 您将 ReiserFS 设置为直接编译到内核中(而不是作为一种模块);而且通常启用“Have reiserFS do extra internal checking”这个选项不是什么好主意。现在,保存您的设置,编译您的内核(“make dep;make bzImage;make modules;make modules_install”),然后配置您的引导装载器(boot loader)来装载新的配置了 ReiserFS 的内核。

重点:保存当前内核并配置引导装载器(boot loader)总是个好主意,这样万一您的新内核无法工作,您就可以用原来的内核启动。



使用 ReiserFS

安装工具

在重新启动之前,我们需要安装“reiserfsprogs”工具,它包括了“mkreiserfs”、“resize_reiserfs”(对 LVM 用户很有用),还有“fsck.reiserfs”。您可以从 Namesys.com 下载页下载最新版本的“reiserfsprogs”(目前是“3.x.0j”)。一旦这些工具下载完毕,您就可以按以下步骤编译和安装“reiserfsprogs”了:

# cd /tmp
# tar xzvf reiserfsprogs-3.x.0j.tar.gz
# cd reiserfsprogs-3.x.0j
# ./configure
./configure output will appear here
# make
make output will appear here
# make install
make install output will appear here


既然工具已经安装完毕,现在您可以按需要创建任何新的分区(使用“fdisk”或者“cfdisk”)或 LVM 逻辑卷(使用“lvcreate”)并重新启动您的系统。如果您正在创建标准分区,您可以简单地将此分区标记为一个“Linux native file system”(83)。

创建和安装文件系统

重新启动后,您就可以在一个空的分区上创建 ReiserFS 文件系统,如下所示:

# mkreiserfs /dev/
hdxy



在上面的示例中,/dev/hdxy 应该是对应于一个空闲分区的设备节点。象安装其它文件系统一样安装它:

# mount /dev/
hdxy
 /mnt/reiser


而且,如果您想在自己的 /etc/fstab 文件中添加一个 ReiserFS 文件系统,只需将“freq”和“passno”字段设置为“0”,如下所示:

/dev/hdc1       /home                   reiserfs        defaults       0 0


从这以后,您的 ReiserFS 文件系统应该不比它的对手 ext2 逊色了,而且您再也不必担心长时间的“fsck”,整体性能也会好得多 ― 特别是对于小文件来说。



ReiserFS 技术注解

文件系统稳定性

我已经在一个产品环境下使用了一个多月 2.4.4 版本内核的 ReiserFS(在 cvs.gentoo.org 开发服务器上),根本没有什么崩溃问题。2.4.4 和 2.4.4-ac9 已经非常稳定了。我们的服务器执行大量的磁盘 IO 任务,因为它是我们的 cvs 资料档案库、 gentoo.org 邮件服务器、基于邮差的邮件列表,还有很多其他东西的所在之处。

ReiserFS 的局限性

虽然 ReiserFS 在几乎每一种类型的应用程序上都比 ext2 文件系统表现得好,有些地方 ReiserFS 目前还是有点欠缺。令人欣慰的是,这些问题其实并不是 ReiserFS 无法克服的局限性,只是 Namesys 开发人员还没有来得及编码或优化的地方。

没有 dump/restore

是的,这是真的;ReiserFS 没有“dump”和“restore”实现。如果您想使用 ReiserFS 又碰巧是个喜欢使用“dump”的人,您就必须寻找备份数据的其他方法。实际上,事实证明这个根本就不是问题,因为 2.4 系列内核从一开始就不兼容“dump”和“restore”命令。要了解关于 dump 和 2.4 内核的不兼容性的更多信息,请阅读 Linus Torvalds 的帖子(请参阅 参考资料),他在帖子中说道“Dump 从一开始就是个愚蠢的程序。不要去碰它。”

性能问题

虽然 ReiserFS 通常抢尽了 ext2 的风头,但它在特定情况下确实有性能上的不足之处。第一个就是处理稀疏文件的能力。ReiserFS 处理稀疏文件的能力 会比 ext2 差很多。当 Namesys 开发人员一直设法为 ReiserFS 4 优化 ReiserFS 的这一部分时,这一点会有所改观。在这之前,ext2 是对处理稀疏文件有很高要求的应用程序的较好的解决方案。

在对大量文件执行多个 stat() 调用的代码中,可能也会碰到问题。一个可能触发这种性能缺陷的应用程序(它只存在于 2.4 系列内核的 ReiserFS 实现,在 2.2 内核中不存在)就是“mutt”邮件用户代理(请参阅 参考资料),它在被用于读取大型 maildir 形式的邮箱时会触发性能缺陷。显然,每个邮件文件 mutt 都要 stat 两次,这样就会比平常更加影响性能。ReiserFS 开发小组已经意识到了这个特殊的问题,并已经确定了它的起因,如果近期没有解决方案的话,您应该可以在 ReiserFS 4 中看到相应的解决方案。

性能调整

幸运的是,有几种简单通用的性能调整方法可以用来缓解这些问题。第一种是用“noatime”选项(一种对 ReiserFS 和其它文件系统都有用的安装选项)来安装您的 ReiserFS 文件系统。您可能知道,UNIX 系统为文件系统上的每一个对象记录一个 atime,或称为访问时间,每次读取文件时,atime 都会被更新。对于大部分人来说,atime 邮戳功能不是十分有用,而且几乎没有任何应用程序(我想不到一个)依靠 atime 处理什么重要的任务。出于这个原因,通常可以安全地关掉它,这样可以带来一个很好的全面性能提升。通常情况下,除非您确实知道自己需要 atime 支持,您还是应该用 noatime 选项来安装文件系统。使用如下所示的 /etc/fstab 条目:

/dev/hdc1       /home                   reiserfs        noatime       0 0


在 关于 ReiserFS 的第一篇文章中,我曾提到 ReiserFS 有一项特别的功能,称为“tail packing”。在 ReiserFS 术语中,“tail”是小于一个系统文件块(4k)的文件,或不能填满一个完整的文件系统块的文件末尾部分。ReiserFS 具有确实卓越的小文件处理性能是因为它能够将这些 tail 合并到它的 b*tree(它的主要数据组织结构)中去,这样它们就能真正地接近 stat-data(ReiserFS 中等同于索引节点的单元)。然而,因为这些 tail 不能填满一个完整的块,它们会浪费很多磁盘空间(当然是相对地说)。为了解决这个问题,ReiserFS 使用了它的“tail packing”功能来将这些 tail 压缩到占用尽可能小的空间。通常,这么做可以让 ReiserFS 文件系统比大小相等的 ext2 文件系统多容纳大约 5% 的数据。

更多关于 notail 的内容

然而,tail packing 也有它的缺点。首先,它的确给性能带来了一个小却不可忽视的冲击。幸运的是,ReiserFS 开发人员已经预计到有些人宁愿牺牲大约 5%的磁盘空间换取一点额外的性能,所以他们创建了“notail”安装选项。当文件系统用这个选项安装时,tail packing 将被关闭,使您的存储容量减小,却有更快的速度。通常,重视文件系统性能的狂热分子同时启用“notail”和“noatime”选项来安装他们的文件系统,从而带来显著的性能提升:

/dev/hdc1       /home                   reiserfs        noatime,notail       0 0


即便您想节省一点磁盘空间,有时候暂时用一下“notail”选项安装文件系统也是件好事。特别是,大多数引导装载器(boot loader)装载一个在启用 tail packing 的 ReiserFS 文件系统上创建的内核时,都会出现问题。如果您正在使用一个比版本 21.6 还低的 LILO,您就会碰到这种问题。在使用最新版本的 GRUB 时也会碰到问题,即不能装载它的 stage1 和 stage1_5 文件,尽管在装载实际内核的时候没有什么问题。如果您已经在经历这种问题了,您可以这样修正此问题-使用“notail”选项安装文件系统,将文件移到另一个文件系统中,然后再把它们移回来。当文件被重新创建时,就不会有 tail 了。另外,记住您还可以很轻易地 重新安装文件系统(用新选项),而不需要卸载它。这个特别的示例使用“notail”选项重新安装根目录文件系统。通常情况下,如果您想使用 tail packing,但也需要引导装载器(boot loader)从根目录文件系统装载辅助文件(如内核),这条命令就很有用了:

# mount / -o remount,notail


Qmail 注解

如果您正在 ReiserFS 中使用 qmail,您应该了解一些重要的参考资料。首先,您应该使用 qmail 1.03 源码的补丁。它修正了 qmail 非同步调用“link()”和“unlink()”时出现的问题,它不但是 ReiserFS 的问题,恰好也是 ext2 的问题。接下来您应该看看 Jedi 的 qmail 调优页面,它包含了很多关于怎样尽可能发挥 qmail 性能的很好的建议。最后,请务必查看 Jedi 的 ReiserSMTP 软件包。ReiserSMTP 包含一个 GPL 插件来代替 qmail 的 SMTP 部分;Jedi 的这种替换是特别为 ReiserFS 调整的


结论

我发现 ReiserFS 真是一个不可思议的文件系统,它提供了很好的小文件处理性能和非常好的(通常比 ext2 要好)的常规文件处理性能。因为有了 ReiserFS,我的开发人员可以在仅仅 15 秒内完成 Gentoo Linux “cvs” 更新,而使用 ext2 通常要花大约两分钟时间。ReiserFS 使我们开发人员的生活更加愉快,还使我们的 cvs 服务器处理大量的并发 IO 而不会引起硬盘狂转和对交互性能的负面影响。

然而除了所有这些,关于 ReiserFS 最激动人心的地方是它将来的发展方向。Hans Reiser 对 ReiserFS 有一个非常激进而创新的计划,包括计划扩展文件系统从而能够将其作为一个发展成熟的高性能数据库来使用,最后还包括事务支持和高级查询功能。这意味 ReiserFS 将不仅仅“只是另一个高性能文件系统”;相反,它将开拓新的可能和道路,使我们能够用创新方式去解决传统的存储问题。有了 Namesys 的合作,Linux 将来的发展一定会非常激动人心 -这绝对是一件好事情。
阅读(276) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~