日历

2019年十二月
« 11月    
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

最近评论

    linux/unix基础知识

    linux的ext4文件系统简介

        ext4是第四代扩展文件系统,是下一代的日志文件系统,向前向后兼容。尽管ext4目前还不是各操作系统的默认文件系统,但它将成为下一代Linux发行版的默认文件系统。ext4的伸缩性非常强大,最大支持磁盘空间将达到100万TB。

    扩展文件系统的简史

        Linux第一个支持的文件系统是Minix文件系统。这个文件系统有严重的性能问题,因此出现了另一个针对Linux的文件系统,即扩展文件系统。第1代扩展文件系统(ext1)由Remy Card 设计,1992年4月引入到Linux中。ext1文件系统是第一个使用虚拟文件系统(VFS)交换的文件系统。虚拟文件系统交换是在0.96c内核中实现的,文件系统最大支持2GB。

        第2代扩展文件系统(ext2)也是由Remy Card实现的,1993年1月引入到Linux中。它借鉴了当时文件系统(比如 Berkeley Fast File System [FFS])的先进想法。ext2支持的最大文件系统为2TB,2.6内核将该文件系统支持的最大容量提升到32TB。

         第3代扩展文件系统(ext3)是Linux文件系统的重大改进,尽管在性能方面逊色于某些竞争对手。ext3文件系统引入了日志概念,以在系统非正常关机时提高文件系统的可靠性。虽然某些文件系统的性能更好(比如 Silicon Graphics的XFS和IBM的Journaled File System [JFS]),但ext3支持从使用ext2的系统进行就地(in-place)升级。ext3由Stephen Tweedie实现,2001年11月引入。

        现在已经发展到第4代扩展文件系统(ext4)。ext4在性能、伸缩性和可靠性方面进行了大量改进。最值得一提的是,ext4支持1EB的文件系统。ext4是由Theodore Tso(ext3 的维护者)领导的开发团队实现的,并引入到2.6.19 内核中。目前,它在 2.6.28 内核中已经很稳定。
        ext4从竞争对手那里借鉴了许多有用的概念。例如,在JFS中已经实现了使用区段(extent)来管理块。另一个与块管理相关的特性(延迟分配)已经在XFS和Sun Microsystems的ZFS中实现。

    ext4的功能

        向后和向前兼容性
        由于ext3是Linux上最受欢迎的文件系统,因此ext3文件系统应该能够轻松迁移到ext4。为此ext4 在扩展(extent) 方面具有向后和向前兼容性。ext4与ext3是向前兼容的,这样就可以将ext3文件系统挂载为ext4文件系统。为了充分利用ext4的优势,必须实现文件系统的迁移,以转换和利用新的ext4 格式。可以将ext4挂载为ext3(向后兼容),但前提是ext4文件系统不能使用区段。

        除了兼容性特性之外,还可以逐步地将ext3文件系统迁移到ext4。这意味着没有移动的旧文件可以保留ext3 格式,但新的文件(或已被复制的旧文件)将采用新的ext4数据结构。您可以通过这种方式在线将ext3文件系统迁移到ext4文件系统。

        提高时间戳分辨率和扩展范围
       ext4之前的扩展文件系统的时间戳都是以秒为单位的,这已经能够应付大多数设置,但随着处理器的速度和集成程度(多核处理器)不断提升,以及Linux开始向其他应用领域发展(比如高性能计算),基于秒的时间戳已经不够用。ext4设计时间戳时考虑到未来的发展,将时间戳的单位提升到纳秒。ext4 给时间范围添加了两个位,从而让时间寿命再延长500年。

    ext4的伸缩性

        文件系统未来发展的一个重要方面就是伸缩性,即根据需求进行伸缩的能力。ext4以多种方式现实了强大的伸缩性,它的伸缩性超越了ext3,并且在文件系统元数据管理方面开辟了新领域。

        突破文件系统的限制
        ext4的一个明显差别就是它支持更大的文件系统、文件和子目录。ext4支持的最大文件系统为1EB(1000PB)。虽然根据今天的标准这个文件系统已经非常巨大,但存储空间会不断增长,因此ext4必须考虑到未来的发展。ext4支持最大16TB的文件(假设由 4KB 的块组成),这个容量是ext3的8倍。
        ext4也扩展了子目录的容量,将其从32KB扩展到无穷大。这是极端情况,我们还需要考虑文件系统的层次结构,因为它的最大存储容量为1EB。此外,目录索引也优化为类似于散列B树结构,因此尽管限制更多,但ext4查找更快。

    ext4引入的新概念 区段
        ext3分配空间的方式是其主要缺点之一。ext3使用空闲空间位映射来分配文件,这种方式不是很快,并且伸缩性不强。ext3的格式对小文件而言是很高效的,但对于大文件则恰恰相反。ext4使用区段取代ext3的机制,从而改善了空间的分配,并且支持更加高效的存储结构。区段是一种表示一组相邻块的方式。使用区段减少了元数据,因为区段维护关于一组相邻块的存储位置的信息(从而减少了总体元数据存储),而不是一个块的存储位置的信息。

        ext4的区段采用分层的方法高效地表示小文件,并且使用区段树高效地表示大文件。例如,单个ext4 inode有足够的空间来引用4个区段(每个区段表示一组相邻的块)。对于大文件(包括片段文件),一个inode能够引用一个索引节点,而每个索引节点能够引用一个叶节点(引用多个区段)。这种持续的区段树为大文件(尤其是分散的文件)提供丰富的表示方式。这些节点还包含自主检查机制,以阻止文件系统损坏带来威胁。

    ext4的性能

        衡量一个文件系统的最重要指标就是它的性能。当文件系统变得庞大并且要求实现高可靠性时,将会以损害性能为代价。但是,ext4不仅解决了伸缩性和可靠性,它还提供各种改善性能的方法。

        文件级预分配
        某些应用程序,比如数据库或内容流,要求将文件存储在相邻的块上(利用相邻块的读优化和最大化读的命令-块比率)。尽管区段能够将相邻块划分为片段,但另一种更强大的方法是按照所需的大小预分配比较大的相邻块(XFS 以前就是采用这种方法)。ext4 通过一个新的系统调用来实现这个目的,这个调用将按照特定的大小预分配并初始化文件。然后,就可以写入必要的数据,并为数据提供不错的读性能。

        延迟块分配
        另一个基于文件大小的优化是延迟分配。这种性能优化延迟磁盘上的物理块的分配,直到块被刷入到磁盘时才进行分配。这种优化的关键是延迟物理块的分配,直到需要在磁盘上写这些物理块时才对其进行分配并写到相邻的块。这类似于持久化预分配,惟一的区别是文件系统会自动执行这项任务。不过如果预先知道文件的大小时,持久化预分配是更好的选择。

        多个块分配
        这是最后一个与相邻块相关的优化,即针对ext4的块分配器。在ext3中,块分配器的工作方式是每次分配一个块。当需要分配多个块时,非相邻块中可能存在相邻的数据。ext4使用块分配器修复了这个问题,它能够在磁盘上一次分配多个块。与前面其他优化一样,这个优化在磁盘上收集相关的数据,以实现相邻读优化。
    多个块分配的另一个方面是分配块时需要的处理量。ext3一次只分配一个块,在最简单的情况下,每个块的分配都要有一个调用。如果一次分配多个块,对块分配器的调用就会大大减少,从而加快分配并减少处理量。

    ext4的可靠性

        ext4文件系统会扩展得比较大,这将导致可靠性问题。但ext4通过许多自主保护和自主修复机制解决了这个问题。
        执行文件系统日志校验和ext3一样,ext4也是一个日志文件系统。日志记录就是通过日记(磁盘上相邻区域的专门循环记录)记录文件系统的变更的过程。因此,根据日志对物理存储执行实际变更更加可靠,并且能够确保一致性,即使在操作期间出现系统崩溃或电源中断。这样做可以减少文件系统损坏的几率。

        但是即使进行日志记录,如果日志出现错误仍然会导致文件系统损坏。为了解决这个问题,ext4对日志执行校验和,确保有效变更能够在底层文件系统上正确完成。
        ext4支持根据用户需求采用多种模式的日志记录。例如,ext4支持Writeback模式,它仅记录元数据或Ordered模式,它记录元数据,但写为元数据的数据是从日志中写入的;或 Journal 模式(最可靠的模式),它同时记录元数据和数据。注意,虽然Journal模式是确保文件系统一致的最佳选择,但它也是最慢的,因为所有数据都要经过日志。

        在线磁盘碎片整理
        尽管ext4 添加一些特性来减少文件系统的碎片(比如将相邻块分配为区段),但随着系统使用时间的增加,碎片是难以完全避免的。因此出现了在线碎片整理工具,它们可以对文件系统和单个文件执行碎片整理,从而改善性能。在线碎片整理程序是一个简单的工具,它将文件复制到引用相邻区段的新ext4 inode。 在线碎片整理还可以减少检查文件系统所需的时间(fsck)。ext4 将未使用的块组标记到inode 表中,并让fsck进程忽略它们以加快检查速度。当操作系统因内部损坏(随着文件系统变大,这是不可避免的)而检查文件系统时,ext4的设计方式将能够提高总体可靠性。

        Linux的扩展文件系统已经发展了近20年— 从1992年首次引入ext1到2008年引入ext4。ext4是首个专门为Linux 设计的文件系统,并且事实证明它是高效、稳定、强大的文件系统。ext4随着文件系统研究的深入而不断发展,并且借鉴其他新文件系统的先进思想(比如 XFS、JFS、Reiser 和 IRON 容错文件系统技术)。尽管目前预测ext5是什么样子还为时过早,但有一点是很明确的,它将主导企业级Liunx系统。

    评论已关闭。