优化 CentOS 上的 EXT3 文件系统
Ext3 是一个非常能干的文件系统,它拥有卓越的容错功能及长久的稳定性纪录。虽然它的表现出色,它绝不是最快速的文件系统。你可以通过做一些东西来赋予 ext3 你所需的额外速度。
下面所列出的某些方法会借着减少存储关于文件系统的数据来换取速度。并非所有用户都会从这些方法得益,因为这视乎你的输入输出访问种类。请花些时间来辨认你的输入输出的需要,然后才试用下列优化方法 |
1. 挂载选项
1.1. noatime、nodiratime
这是最快捷及最简单的优化方法中的一个。这个挂载选项告诉系统不要更新 inode 的访问时间。这个选项适用于网络服务器、新闻服务器及其它高访问量的文件系统。样例:
/dev/VolGroup00/LogVol00 / ext3 defaults,noatime 1 1
我们留意到 man mount 提及另一个选项:nodiratime,但我们没有进行计时来测试加进它后能否为效率带来实质(可量度)的差别。
1.2. commit
这个选项控制一个文件系统应隔多久才将数据及中继数据同步。缺省值是 5 移,但你可以延长它来争取效率。负面的影响就是,假若你的系统因为电源中断或当机而未能写出数据,你所损失的数据可能会长达这个设置。你选择的设置值完全视乎你系统的效率而定。
/dev/VolGroup00/LogVol00 / ext3 defaults,commit=120 1 1
1.3. data
这个选项有三个模式可供你选择。当其它如 XFS 及 JFS 等日志纪录文件系统将中继数据写入硬盘时,他们不做别的。ext3 却为了保障你的文件,缺省会同时写入与中继数据相关的数据。这就是 'data=ordered' 模式背后的理念:先写入主文件系统,然后才写入日志。
要令 ext3 如 XFS 及其它案档系统般运作,在你的挂载选项中加入 'data=writeback'。writeback 模式在写入硬盘时并不保留数据的先后次序,因此日志可能会在文件系统之先被写入。这个模式较快,因为唯有中继数据拥有日志,而不会像缺省模式般坚持要保障你的数据。
最后一个数据模式,journal,可以说是 ordered 模式的反极。它会坚制地令日志先被写入,然后才写入文件系统。这个模式普遍是最慢的,但在你需要同时阅读及写入硬盘的特殊情况下,会较其它模式优胜。一如既往,其它人的需要与你的不会完全相同,因此他们的基准只可作参考,不能作准。请试用不同选项并看看哪个最适合你。
/dev/VolGroup00/LogVol00 /home ext3 defaults,data=writeback 1 1
|
注意: 要在主文件系统上使用 'data=ordered' 以外的模式,你必须在内核命令行加入 rootflags=data=writeback,通过引导参数将模式传给内核。 |
2. 硬盘提升器
CentOS4 拥有 4 个硬盘提升器,可以通过将硬盘的读写重组或合并到常用的位置,来减少磁头的寻找时间。这些选项改善效率,但在使用硬盘阵列的系统上,速度上的加增或许不明显,因为它们并不将转轴条纹列入考虑范围。
你可以在 2005 年 6 月版的 Redhat Magazine 内为各个提升器选项找到好的解释。
3. 硬盘阵列的数学
借着确保你的扇区与你的硬盘阵列条纹(又名「跨步」)尺寸对齐,你的硬盘阵列将会录得最高的速度增幅。通过将文件系统的写入调整至与硬盘阵列的布局相同,你可以避免对文件系统作出重叠的计算及对准,于是让系统能更容易写入硬盘内。最终的结果就是你的系统可以更快地写入数据,而你得到更高的效率。要理解跨步的计算法,你必须知道关于你的硬盘阵列的某些特性。
- 你所使用的硬盘阵列类型(RAID 1、5、6、10 等)
- 在数组里中存载数据硬盘的数量
- 硬盘阵列的数据块尺寸
- 最后,你须知道文件系统的块尺寸(例如:ext3 采用 4k 块)。
硬盘的计算是这样的:你为单一转轴/硬盘,将数据块尺寸除以文件系统的块尺寸。这会计算出跨步的尺寸。然后你将跨步尺寸乘以存载数据硬盘的数量。这样便得出你在格式化扇区时应使用的条纹宽度。这可能有点儿复杂,因此下面列了数个样例。
举个列说,假设你有四个硬盘在 RAID5 下运作,它采用 64K 的数据块尺寸,而你使用 4K 的文件系统块。单一硬盘跨步的计算是(数据块尺寸/文件系统块尺寸),于是(64K/4K)得出 16。由于 RAID5 的条纹宽度少了一个硬盘,因此我们在这个 4 碟的 RAID5 群组中,只有 3 个存载数据的硬盘。于是按照(存载数据硬盘数量*跨步尺寸),(3*16)得出条纹宽度是 48。
当你创建 ext3 分区时,你会如此将它格式化
mkfs.ext3 -b 4096 -E stride=16 -E stripe-width=48 -O dir_index /dev/XXXX
不幸地,'stripe-width=' 这个扩展选项由 CentOS 5.3 起在 man mkfs.ext3 里消失了 |
上面所包含的 dir_index 选项是这里要提及的最后一个微调。dir_index 这个选项让 ext3 使用散列 B 树来加快查阅大目录时的速度。虽然速度上的提升并不多,但却会有帮助。
如果这是一个 4 碟的 RAID10 数组,那么条纹宽度便是(16+16)= 32,因为每对硬盘的镜像实际上变为一个拥有冗余的硬盘,然后这两个 RAID1 群组再以条纹形式组成 RAID10。
Translation of revision 10