0

    Linux日志文件系统剖析

    2023.07.25 | admin | 147次围观

    1、近代历史上,日志文件系统被认为十分奇特,主要是处于研究阶段。而如今,日志文件系统(ext3) 己经成为linux的缺省文件系统。本文向大家揭示了 h志文件系统背后的一些思想,以及在电源故障或 系统崩溃时,如何提供更好的完整性。此外本文还介绍了现行的几种日志文件系统和下一代日志文件系统。定义日志文件系统的方法有很多种,但是让我们抓住要点。日志文件系统就是专为那些厌倦了一直盯 着启动时fsck (即文件系统一致性检查)的人而设计的(日志文件系统同样适用于希望文件系统具有故障 恢复能力的群体)。如果系统采用传统的未捉供日志功能的文件系统,那么操作系统在检测到系统为非正 常关机时,会使用fsck应用程

    2、序执行一致性检验。该应用程序会扫描文件系统(这耍花费很长的时间), 并修复任何可安全修复的问题。而在某些情况下,当文件系统损坏严重吋,操作系统会启动到单用户模式, 由用户进行进-步的修复。fsck问题更麻烦的是,为了确保文件系统元 数据的正确性(即使未检测到损坏), 操作系统会自动启动fsck进程。因此, 避免对文件系统进行致性检验正是需 要改进的地方。那么现在您应该清楚日志文件系统针对的是哪类人群了, 但是他们是如何取缔fsck的呢?笼统地说,日志文件系统就 是通过维护一份h志來防止文件系统刖溃。所谓h志就是一种 特殊的文件,它会在一个循环的缓冲区内记录文件系统的修改, 然后将其定期提交到文

    3、件系统。一旦系统发生崩溃,日志文件 就会起到一个检查点的作用,用于恢复未保存的信息,防止损 坏文件系统元数据。总之,fi志文件系统就是一种具冇故障恢复能力的文件系统,它利用fi志來记录尚未提交到文件系统 的修改,以防止元数据破坏(请参见图1)。但是如众多其他linux解决方案一样,日志文件系统有多 种方案供您选择。下而就让我们-起简短回顾一下日,忐文件系统的历史,然后再看一看现行的儿种文件系 统,看看它们之间有什么区别。什么是元数据?元数据指磁盘上的数据的管理结 构。它表示文件的创建与删除、h录的 创建与删除、扩充文件、截取文件等。图典型的日志文件系统fikp-vciem而 file syst

    4、em commit o° file system recoverydisk penitionlinux日志文件系统的历史最早的日志文件系统是ibm® journaled file system (jfs)。jfs于1990年首次发行,而当 前linux支持的版本是后期开发的jfs2。1994年,silicon graphics为irix操作系统引进了高性 能的xfs。xfs于2001年被植入linux系统中。1998年开发的智能文件系统(sfs)起初是为 amiga 开发的,但之后却在 gnu lesser general public license (lgpl)下发行,

    5、并于 2005 年获 得了 linux的支持。最常用的日志文件系统ext3fs (third extended file system)是ext2的扩展, 它增加了记录日志的功能。从2001年起,linux系统中就开始支持ext3fs。最终,reiserfs日志文 件系统在其被引入之后,力压群雄,被广泛使用。但由于其原开发者的一些法律纠纷,reiserfs日志文 件系统未能得到进一步的发展。日志的几种变体fl志文件系统是使用fl志来缓冲文件系统的修改(同 时也可以应用于紧急故障恢复)的,但可以根据记录的时 间与内容采取不同的策略。其中,三种常见的策略为:回 写(writeback)、预定(or

    6、dered)和数据(data)。民回写模式屮,仅有元数据被记录到日志,数据块则 被直接写入到磁盘位置上。这样可以保存文件系统结构, 防止崩溃,但却冇可能发生数据别溃(比如:在元数据记 录到日志后,数据块写入磁盘前,系统崩溃)。要想解决 这个问题,您可以使用预定模式。预定模式只将元数据记 录到日志,但是在此z前将数据写入到磁盘。这样就可以 保证系统恢复后数据和文件系统的一致性。最后一种模式 将数据也记录到了日志中。花-数据模式元数据和数据 都被记录到日志中。这种模式可以最人限度地防止文件系 统崩溃与数据丢失,但由于全部数据都写入了两次(先写 入日志,再写入磁盘),系统性能可能会降低。日志的提交也

    7、冇很多种不同的策略。比如,是在日志 将满时,还是在超时后?developerworks 上 tim 所著的 其他制旅.系列文章 linux flash文件系统剖析 securityenhanced linux (selinux)剖析 实时linux架构剖析 linux scsi子系统剖析 linux文件系统剖析 linux网络栈剖析 linux内核剖析 linux slab分配器剖析 linux同步方法剖析tim所著的删.系列文章日志文件系统的现状如今,有儿种日志文件系统应用非常广泛。每一种都有其白己的优缺点。下面介绍现存故普遍的四种 日志文件系统。jfs2jfs2 (乂称enhanced j

    8、ournaled file system)是最早期的日志文件系统,在植入linux z前己 被应用于ibmaix®操作系统多年。它是64位的文件系统,虽然它是在原来的jfs的基础上开发的, 但却较z有所改进,即:jfs2具有更优的扩展性能,而且支持多处理器架构。jfs2支持预定的日志记录方式,可以捉高较高的性能,并实现亚秒级文件系统恢复。jfs2同时为 提高性能提供了基于分区的文件分配(extentbased allocation)。基于分区的分配是指对-组连续的 块而非单一的块进行分配。宙于这些块在磁盘上是连续的,其读取和写入的性能就会更好。这种分配的另 外一个优势就是可以将元数据

    Linux日志文件系统剖析

    9、管理最小化。按块分配磁盘空间就意味看要逐块更新元数据。而使用分区, 元数据则仅需按照分区(可以代表多个块)更新。jfs2还使用了 b+树,以便更快地查找目录和管理分区描述符。jfs2没冇内部日志捉交策略,而 是在kupdate守护进程超时时提交。xfsxfs是silicon graphicsis于1995年为irix操作系统开发的其他早期日志文件系统之一。它 于2001年就已经被植入linux,因此,它已经成熟而且可靠。xfs支持64位全地址寻址,并以b+树为目录和文件分配捉供高性能。xfs同样使用了基于分 区的分配,支持可变的块大小(从512字节到64kb ) o除分区外,xfs还采用延时分

    10、配,即等到块 将被写入磁盘时,再为其分配磁盘空间。这样所需磁盘空间总数就一目了然,因此这个功能提高了分配连 续磁盘块的可能性。xfs还有一些英他的有趣特性,它可以保证rate输入输岀(i/o 通过为文件系统用户保留带宽) 和直接i/o。英中,数据是直接在磁盘和用户空间缓冲区间拷贝的(而不是从多个缓冲区进入)。xfs采 用回写fi志策略。第三扩展文件系统(ext3fs)第三扩展文件系统(third extended file system, ext3fs)是最流行的h志文件系统,是由ext2文 件系统演化而来。实际上,ext3fs可以与ext2fs兼容,这是因为ext3fs使用的结构与ext2f

    11、s相同, 仅仅多了一个日志而己。我们甚至可以把ext3fs的一部分当作ext2文件系统挂载,或者将ext2文件 系统转换成ext3文件系统(使用tune2fs实用程序)。ext3fs允许用三种方式记录日志(回写,预定和数据),但预定模式为默认模式。日志提交策略也是 可配置的,但是默认在日志填满1/4时或其中一个捉交计时器超时时,捉交日志。ext3fs主要的弊端之一就是它最初不是作为fl志文件系统而设计的。它是在ext2fs的基础上开发 的,因此缺少一些其他日志文件系统所具备的高级特性(例如分区)。它在性能方而较之reiserfs、jfs 以及xfs也尤为逊色,但它所需要的cpu和内存要比同类解

    12、决方案少。reiserfs什么是 tail packing?很多情况下,一些文件的大小小于 逻辑块。为了不把可以分配给一个逻辑 块的磁盘空间浪费给小文件(称z为 tail),于是把多个文件打包到一个单 - 的逻辑块中。结果发现这种方法可以 让磁盘空间的容戢比其他竞争文件系 统(有性能损失)高5%。reiserfs是从一开始就按照记录日志的童图而开发的日 志文件系统。reiserfs t 2001年被引进到主流2.4内核(linux采用的第一个日志文件系统)。其默认的日志记录方 法为预定,且支持以在线调整大小的方式扩展文件系统。reiserfs同时还具有tail packing功能,显著减少了磁

    13、盘碎 片。在处理较小文件方面,reiserfs的速度要比ext3f快(当 tail packing 可用时)。reiserfs (乂称reiserfs v3)具有很多先进的功能,如b+树。该文件系统的基础格式建立在单一的b+树的基础之上,这使得搜索的效率和可伸缩性增强。提交策略则取决于日志的大小,但是要以待提交的块的数量为基 础。reiserfs也遇到了几个问题一大多是最近出现的,这与其开发者遇到了一些法律纠纷冇直接原因 (详情请参阅参考资料)。日志文件系统的未来现在您已经了解了现行的(和过去的)日志文件系统,下面就让我们看一看它的发展趋势。reiser4在成功地将reiserfs合并到lin

    14、ux内核,并被很多的linux发行版采用之后,namesys (开发 reiserfs的公司)便开始致力于新的日志文件系统的开发。reiser4被设计成为全新的日,忐文件系统, 它拥有很多先进的功能。resier4拟定通过wandering日志和延迟分配块直至日志捉交(像在xfs中一样)的方式來实现 更优秀的h志记录。reiser4还设计冇灵活的插件架构(以支持诸如压缩和加密之类的功能),但是被 linux社区拒绝了,因为这些在虚拟文件系统(virtual file system, vfs)被当作是最好的功能。由于namesys的所有者的坚持,所有关于reiser4的商业活动都停止了。第四扩展

    15、文件系统第四扩展日志文件系统(fourth extended journaling file system, ext4fs)是由 ext3fs 演化而 来。ext4文件系统被设计为具冇向前和向后兼容性,但它具冇许多新的高级特性(其中的一些特性破坏 了兼容性)。这就意味着您可以将ext4fs的一部分作为ext3fs挂载,反之亦然。首先,ext4fs是64位文件系统,并被设计为可以支持很大的容量(1 exabyte)。它还可以使用 分区,但是这样做将失去与ext3fs的兼容性。像xfs和reiser4 一样,ext4fs还支持在必要时采取 延时分配方式分配块(这样可以减少磁盘碎片)。日志的内容也已

    16、经执行过检查和(checksum),使日 志更加可靠。ext4fs并没冇釆用标准的b+或者b*树,取而代之的是b树的一种变体linux日志切到最后,叫做h树, 它支持更人的子目录(ext3的上限为32kb ) 虽然延时分配的方法可以减少磁盘碎片,但时间久了,一个大的文件系统可能会成为碎片。为解决这 个问题,开发了在线磁盘碎片整理工具(e4defrag)。您可以使用这个工具来整理单个的文件或者整个文 件系统。ext3fs与ext4fs间的另一个有趣的区别就在于文件的日期分辨率。在ext3中,时间戳的故小分 辨率为1秒。而ext4fs是面向未來的:那时处理器和接口的速度会持续加快,需要更高的分辨率。因 此,ext4中时间戳的最小分辨率为1纳秒。ext4fs己被合并到自2.6.19以后的linux内核中,但它还是不够稳定。下-代系统的开发将继续 致力于此;辅之以上一代的优势linux日志切到最后,它就会是下一代的linux日志文件系统。

    版权声明

    本文仅代表作者观点。
    本文系作者授权发表,未经许可,不得转载。

    发表评论