ReiserFS,是一种文件系统格式,作者是汉斯·瑞塞尔(Hans Reiser)及其团队Namesys,1997年7月23日他将ReiserFS文件系统在互联网上公布。Linux内核从2.4.1版本开始支持ReiserFS。

ReiserFS
开发者Namesys
全称ReiserFS
发布2001 (Linux 2.4.1)
分区标识Apple_UNIX_SVR2Apple Partition Map
0x83MBR
EBD0A0A2-B9E5-4433-87C0-68B6B72699C7GPT
结构
目录内容B+ tree
文件分配Bitmap
限制
最大文件尺寸8 TiB
最大文件数量232(~4 billion)
最长文件名4032 bytes, limited to 255 by Linux VFS
最大卷容量16 TiB
文件名字符集All bytes except NUL and '/'
功能
日期记录modification (mtime), metadata change (ctime), access (atime)
日期范围December 14, 1901年12月14日 - 2038年1月18日
日期分辨率1s
岔流Extended attributes
文件系统权限Unix permissions, ACLs and arbitrary security attributes
透明压缩No
透明加密No
操作系统支持Linux

ReiserFS的命名是源自作者Hans Reiser的姓氏,这个日志型文件系统发展比ext2/3晚近许多。在技术上使用的是B*-tree为基础的文件系统,其特色为能很高效率地处理大型文件到众多小文件;实务上ReiserFS在处理文件小于1k小文件时,甚至效率可以比ext3快约10倍。

ReiserFS原先是Novell公司的SuSE Linux Enterprise采用的默认文件系统,直到2006年10月12日其宣称将在未来的版本改采ext3为默认[1]。Novell公司否认这与Hans Reiser被控杀妻案有任何关系[2]

功能特点

与本文撰写的同期文件系统相比,ReiserFS有着许多其它文件系统所没有的优点。举例来说:

  • Metadata-only journaling(also block journaling, since Linux 2.6.8), its most-publicized advantage over what was the stock Linux file system at the time, ext2.
  • 在线调整大小(只能变大,在线、离线代表的是挂载中或非挂载中),可以使用磁盘管理机制如LVM的方式来修改,也可以不用。因为这个缘故,所以Namsys公司有提供在离线时调整大小的工具(可以调整放大空间,也可以缩小空间)。
  • 后缀包装(Tail Packing)减少内部磁盘空间分布破碎的情况。这个功能与别的文件系统相比有着相当明显的进步,另外值得一提的是,在Reiser4的发展里头,这个功能有更强大的进展,将同时保留长处并且不会影响到性能。

性能表现

和同样在Linux Kernel 2.4版本下的ext2及ext3相比较,处理4KB以下的小文件时(tail packing enable),ReiserFS的速度快了10到15倍[3]。这对于网络新闻服务、HTTP缓存、及电子邮件系统等需要处理大量小文件的网络服务是相当重要的功能改进。

然而因为ReiserFS还在使用BKL(the Big Kernel Lock)这个global kernel-wide lock,在某些情况下,它无法良好的在某些多核心系统上面执行scale动作,这是因为某些核心的动作一次只能由一个核心进行动作。

批评

有些目录的操作在ReiserFS上面并不同步,(包括像unlink (2)),可能会导致一些重度依赖文件锁(file-based lock)机制的应用程序上面资料的毁损,这些应用程序像是MTA的qmail、postfix等等,如果这些应用程序在磁盘同步之前就有可能造成这样的损害。

目前还没有磁盘整理的应用程序是可以对ReiserFS这个文件系统进行动作,虽然已经有工具是在做自动复制文件内容以期获得更多连续性的区块,在Reiser4发布的文件系统会有一个repacker的工具可以对磁盘破碎的情况优化。

扇区检查

ReiserFS索引树重建的的过程曾经引发过不少的争议:如果文件系统被毁坏的很严重,那内部的索引树就失效了,再执行索引树重建的操作更可能会让让这个毁坏的情况变得更严重、像是把索引指向不可预期的内容(8)。不过这个操作并不是正常操作的一部分,也不是一个正常的文件系统检查,在这种操作执行之前,就应该会有明确提示出现,由管理员确认后才可能发生。

尽管如此,为避免错误引导文件系统的处理,我们并不建议在一个ReiserFS v3的分区上面存储一个原始未经加密或压缩改变形态的ReiserFS v3的影像档。在格式化一个现有的ReiserFS v3的分区也可能会留下资料困扰重建的操作并且让旧系统上的文件重现。这个漏洞让恶意的用户有机会困扰重建程序。在metadata经过文件系统检查之后还会维持旧有的状态,再破坏这个地方就会让文件内容以不可预期的方式结合包含着文件系统的metadata。

好消息是,它的下一代继承者,ReiserFS 4克服了这一点问题点。

较早的争议问题

ReiserFS在Linux kernel 2.4.16之前的版本被Namesys视作不稳定的版本,不被当成可以使用产品,特别是在NFS的应用上面。ReiserFS早先的应用(这里指的是Linux kernel 2.6.2之前)被看作是一堆地雷。像是,文件很容易就会在系统崩溃的时候意外的接上一堆没有用的垃圾,不过现在在ReiserFS里面的日志型文件系统的应用已经有一定的稳定。

架构设计

ReiserFS在一个单一复合B+树中存储文件的亚数据信息(stat item)、目录文件信息(directory items)、索引节点中的块列表(indirect items),这些信息都有唯一的标识号作为B+树的索引值。分配给B+树节点磁盘块称为“格式化的内部块”。分配给叶子节点的磁盘块称为“格式化的叶子块”(叶子节点中的信息是首尾相连,紧密存储的)。其他的块一概称为“未格式化块”,用来保存文件内容。如果一个节点带有太多目录项或者太大块列表的目录文件信息,就会被拆分到它右边的邻居节点中。所有的块分配过程会被跟踪记录到位于固定位置的空闲块位图中。

相对的,ext2和其它Berkeley FFS-like的文件系统则只简单的使用一个固定的方程式来计算节点的划分大小,这样的方式限制了文件系统可以包含的文件的数量。大多数这种类型的文件系统也简单地以线性表的方式存储目录项,在文件搜索及更新的时间随文件系统的规模增加而线性增加。在ReiserFS中的单一B+树设计避免了这些问题,而且更具有弹性。

注解引用

  1. ^ Shankland, Stephen. Novell makes file storage software shift. Business Tech (cnet News.com). 2006-10-12 [2009-01-09]. (原始内容存档于2013-01-19). 
  2. ^ Mahoney, Jeff. Announcement was unrelated to Reiser's legal troubles. 2006-10-04 [2010-05-16]. (原始内容存档于2006-10-24). 
  3. ^ Robbins, Daniel. Common threads: Advanced filesystem implementor's guide, Part 7. 2001-11-01 [2012-10-08]. (原始内容存档于2014-04-24). 

外部链接