使用全新的Linux ReiserFS文件系统
ChinaByte Linux专区授权转载
作者:俞良军(仙人掌工作室)
虽然Linux内核经过配置后能够读/写许多种文件系统,但很长时期以来,ext2(extended2)文件系统就是它的标准文件系统。
为了提高Linux文件系统的性能,人们一直致力于一些新的文件系统的开发,ext3和ReiserFS就是其中两种。ext3文件系统在ext2的基础上增加了日志(journaling)功能;而ReiserFS则是一个带有日志功能的全新文件系统。
//*
日志
日志功能即Journaling。日志是一个从数据库系统借用的概念,它是指每一个事务都被记录到日志文件(即Journal,或Log),从而使得发生故障时重新执行已经执行过的事务、恢复丢失的事务成为可能。当事务确实已经执行成功之后,日志将被定期地刷新。
另外,出于性能上的考虑,ReiserFS文件系统的作者采用了把文件名字和文件本身都保存到数据库的方式,而不是只保存文件名字和文件位置。为了优化磁盘空间的利用,ReiserFS文件系统把体积小于一个磁盘块的文件组合起来存放,而不是为这些文件分别分配一个磁盘块。这种安排进一步改善了ReiserFS的小文件存储。
*//
优点和缺点
ReiserFS有着许多优点:
对于任意大小的文件,一般都具有更好的性能。
空间浪费较少。不存在静态分配的inode空间;小文件组合在一起存放。
对于大型目录来说,ReiserFS的性能更是高出不少。即使和其他平衡树文件系统相比也不例外。
使用B*平衡树,而其他平衡树文件系统使用的是陈旧的B+树。
可以在使用期间改变分区的大小。
当系统非正常关闭时(如意外停电),文件系统的恢复极其快速。不象e2fsck需要许多秒甚至数分钟来检查文件系统,ReiserFSck只需要很少的几秒钟时间。
当然,ReiserFS也有自己的缺点:
这个软件相对较新。尽管到目前为止还没有出现不良记录,但可能你还是不想在正式运行的系统上使用它。
还不支持配额限制。
基于内核的NFS还不是非常稳定。
某些程序(如qmail就是其中一个)在ReiserFS下会出现问题。许多软件已经有相应的补丁。
不能将正在使用的文件系统在ext2和ReiserFS之间来回转换。要转换文件系统必须先备份数据,创建文件系统,再恢复数据。
偶尔会出现操作延迟的情形(Read Starve,读饥饿)。大规模的写操作都是整批调度执行的,读操作却有可能出现“饥饿”。该问题正在解决之中,越新的补丁对这个问题的解决就越完善一些。
注意事项
使用ReiserFS文件系统时,应注意下列事项:
使用Lilo时,如果你在根分区上使用ReiserFS文件系统,则必须为该分区设置notail选项。新版本的Lilo宣称不再需要notail,但却需要新版本的ReiserFS。
如果使用md(软件磁盘阵列)让ReiserFS文件系统跨越多个磁盘,请关闭REISERFS_READ_LOCK。为此,请在linux/include/linux/reiserfs_fs.h中注释掉下面这行代码:“#define REISERFS_READ_LOCK”。
如果你想用VMware在Linux下运行Windows 98,请在配置文件(~/vmware/win98/win98.cfg)中加入:“host.FSSupportLocking1 = 0x52654973”。
创建ReiserFS文件系统
工具
ReiserFS内核补丁包含几个实用工具:
mkreiserfs:在磁盘上创建ReiserFS文件系统。类似于mke2fs。
reiserfsck:对ReiserFS文件系统进行一致性检查。类似于ext2的e2fsck。
resize_reiserfs:用于在非联机状态下改变文件系统大小。据我所知ext2文件系统下没有等价的命令。
现在我在/home和/usr上运行ReiserFS,操作系统是SuSE 7.0 Linux,/分区仍使用ext2。SuSE 7.0本身带有ReiserFS,用专家模式安装时就可以选择这个选项。为进行测试,我用ext2创建了相似的分区/usr2和/home2。下面是mount的输出:
larry:~ # mount
/dev/hda2 on / type ext2 (rw)
proc on /proc type proc (rw)
/dev/hda1 on /boot type ext2 (rw)
/dev/hda5 on /usr type reiserfs (rw)
/dev/hda7 on /home type reiserfs (rw)
创建ReiserFS文件系统
要使用ReiserFS文件系统就必须在Linux内核源代码上添加补丁。你可以从ftp://ftp.lugoj.org/pub/reiserfs/devlinux.com/pub/namesys/下载合适的内核补丁,这些补丁适合的内核版本从2.2.14到2.2.17、2.3系列以及新的2.4.0。
假设内核为2.2.16,添加补丁的命令为:
cd /usr/src
zcat linux-2.2.16-reiserfs-3.5.24-patch.gz | patch -p0
配置内核时,请在ReiserFS支持选项上选择“y”或者“m”(module,参见定制Linux内核详解),然后按照通常的方式编译、安装内核和模块。ReiserFS的实用工具位于加上补丁后的内核源代码linux/fs/reiserfs/utils目录。这些工具可以用如下命令构造和安装:
cd /usr/src/linux/fs/reiserfs/utils
make
make install
用新构造的内核重新启动,在备用的分区上运行mkreiserfs并装配它。如果你想要用新分区替换现有的ext2分区,那么最好启动进入单用户模式。然后你可以或者将文件从现有的分区复制到新分区,或者从备份将文件复制到新分区。复制命令一般可以如下:
mount /dev/hdx /mnt/temp (新的reiserfs)
cd /home (原有的ext2)
tar -cf - . | (cd /mnt/temp;tar -xf -)
这些命令将把现有分区的一切复制到新的分区。然后你就可以卸下两个分区,适当地编辑/etc/fstab,再重新装配/home。下面是ReiserFS文件系统的一个/etc/fstab条目示例:
/dev/hda7 /home reiserfs defaults 1 2
下面是几个ReiserFS的文件系统装配/卸下选项:
notail:导致文件系统运行速度提高,代价是浪费的磁盘空间增多。
replayonly:强制文件系统驱动程序重新执行日志记录并退出,不再装配文件系统。该选项主要由fsck使用。
resize:让你在联机状态下扩展ReiserFS分区。为此你应该按照如下方式指定mount选项(当然,磁盘上应该有剩余的自由空间,否则该命令可能损毁邻近的分区):
mount -o remount,resize=< new blockcount > < reiserfs
mount point >
性能与应用
性能测试
Bonnie++是一个测试磁盘和文件系统性能的程序。正如Bonnie++的说明文档所指出的,文件系统的操作有许多种类型。Bonnie++测试其中的部分操作,对于每一种测试都给出每秒完成的工作总量以及CPU利用率的百分比。对于性能测试结果,数值越高越好;对于CPU利用率测试结果,数值越低越好。Bonnie++可以从http://www.coker.com.au/bonnie++/下载。
下面是Bonnie++在本人机器上的测试结果。测试时系统只有一个用户,X运行在登录模式下,同时系统上运行着常见的daemon。机器的硬件配置如下:
处理器:Pentium P166MMX
内存:80MB
硬盘:FUJITSU MPB3064ATU, 6187MB w/0kB Cache
Bonnie++以默认方式运行,首先读取和写入一个200 MB的文件,然后创建/读取/删除30个文件:请浏览源码。
另外我也在系统没有正常关闭的情况下多次切断了电源。当系统再次启动时,ReiserFS分区在一秒之内完成了检查并恢复运行;与此相对应,ext2分区需要20到40秒的时间来运行e2fsck。
应用实例
下面是ReiserFS网站列出的两个应用案例。SourceForge是一个支持开放源代码工程的开发者资源网站,该网站由VALinux维护。Mozilla是从商业Netscape浏览器发展而来的开放源代码产品。
“http://ftp.sourceforge.net/有850 GB的存储空间,其中一半是ReiserFS,一半是ext2。这两个文件系统的无故障正式运行时间都已经超过4个月(实际上更长,但以前不是ReiserFS)。服务器的输出流量在15 Mbit/秒到50 Mbit/秒之间,输入流量大约2-5 Mbit/秒,运行时间24x7。”
“ReiserFS同样也为cvs-mirror.mozilla.org(以及tokyojoe.sourceforge.net)的CVS树型文件系统提供了强有力的支持。该网站是唯一的Mozilla CVS检验点(Checkout Point),它的服务器自从诞生之日起就在非常繁重的负载下毫无故障地运行着。”
参考资源:
ReiserFS主页:http://www.reiserfs.org/
发布人:netbull 来自:Linux专区