总的来说, 一般有两种方式的调整用户提升文件系统的性能
* 调整文件系统自身的参数
* 修改文件系统的挂载参数
ext3文件与ext2文件系统相比, 版本号的变化主要是日志功能的引入. 当在 ext2 上打开日志功能时, 实际上你已改变该分区类型为 ext3
打开ext2的日志功能 cax@ibm~# tune2fs -j /dev/sda1
需要说明的是这个调整是非常有效的, 也是非常安全的!
我们也可以利用 tune2fs 来调整文件系统的其他参数. 一个比较有用的调整是当查找文件时目录索引的使用方式. 它是由 dir_index 参数控制的. 默认这个参数是关闭的. 可通过以下命令打开该功能.
cax@ibm~# tune2fs -O dir_index /dev/sda1
执行命令后, 通过以下命令, 你将看到已经更新的文件系统状态:
cax@ibm~# tune2fs -l /dev/sda1 | grep features
Filesystem features: has_journal resize_inode dir_index filetype needs_recovery sparse_super large_file
打开该参数会让显示文件夹内大量的文件和在目录中find文件的速度有明显提高.需要注意的是 tune2fs 只是打开了这个功能,并不创建索引. 创建该索引可以先卸载分区, 执行 fsck -fD /dev/sda3; 或者在已挂载的系统上执行 ls 操作.
另两个参数是ext3文件系统的 noatime, nodiratime
当系统在启动时, 文件系统的挂载参数来自 /etc/fstab. (修改参数后迅速生效可用 mount -o remount)
fstab 的记录类似如下设置:
/dev/sda1 / ext3 defaults,errors=remount-ro 0 1
第四列指出了挂载时使用的参数, mount 命令将会使用这些参数. 在本例中我们使用了两个参数"defaults" (未指定附加参数) 和"errors=remount-ro"(告诉文件系统在错误情况下, 重新挂载分区为只读模式).
通过添加 noatime, nodiratime可以获得一定的速度提升, 在大量的小文件访问的应用环境中(比如基于磁盘的Web Cache环境中) 改选项较为常见. 该选项告诉文件系统不要更新已经访问的文件/文件夹的 access-time. 这样当你读文件时, 由于acces-time没有更新, 速度将会有改善; 对速度的提升虽然不可能明显感觉到, 但对大多数应用系统而言还是不可忽略的. 需要注意的是, 由于不更新文件的访问时间, 该参数会对 find 的 -atime -amin 参数的结果有一定影响.
ext2/ext3 支持在线的调整数据块大小, 需要打开 resize_inode 选项, 你也可以在创建分区的时候指定这些选项.
mkfs.ext3 -O dir_index,resize_inode /dev/hda3
在 ext3 下, 可以指定文件数据的日志形式, journal / ordered / writeback, 如果不想使用默认的 ordered 方式, 可以在启动的时候给内核添加以下参数, 比如: rootflags=data=journal 各种方式的含义如下:
journal 所有的数据在写入文件系统前先写入到日志中.
ordered 默认方式. 所有数据先写入文件系统, 然后写入日志中.
writeback 数据写入顺序不再受保护. 数据可能被提交到日志后再写入文件系统. 传说中该选项是吞吐率最高的选项. 它能保证内部文件系统的完整性, 也允许日志系统在崩溃后的恢复时, 文件中出现旧的数据.