这是最后一个与相邻块相关的优化,即针对 ext4 的块分配器。在 ext3 中,块分配器的工作方式是每次分配一个块。当需要分配多个块时,非相邻块中可能存在相邻的数据。ext4 使用块分配器修复了这个问题,它能够在磁盘上一次分配多个块。与前面其他优化一样,这个优化在磁盘上收集相关的数据,以实现相邻读优化。
多个块分配的另一个方面是分配块时需要的处理量。记住,ext3 一次只分配一个块。在最简单的情况下,每个块的分配都要有一个调用。如果一次分配多个块,对块分配器的调用就会大大减少,从而加快分配并减少处理量。
可靠性
ext4 文件系统可能会扩展得比较大,这将导致可靠性问题。但 ext4 通过许多自主保护和自主修复机制来解决这个问题。
执行文件系统日志校验和
和 ext3 一样,ext4 也是一个日志文件系统。日志记录 就是通过日记(磁盘上相邻区域的专门循环记录)记录文件系统的变更的过程。因此,根据日志对物理存储执行实际变更更加可靠,并且能够确保一致性,即使在操作期间出现系统崩溃或电源中断。这样做可以减少文件系统损坏的几率。
但是即使进行日志记录,如果日志出现错误仍然会导致文件系统损坏。为了解决这个问题,ext4 对日志执行校验和,确保有效变更能够在底层文件系统上正确完成。在 参考资料 小节可以找到其他关于日志记录(ext4 的重要部分)的资料。
ext4 支持根据用户需求采用多种模式的日志记录。例如,ext4 支持 Writeback 模式,它仅记录元数据;或 Ordered 模式,它记录元数据,但写为元数据的数据是从日志中写入的;或 Journal 模式(最可靠的模式),它同时记录元数据和数据。注意,虽然 Journal 模式是确保文件系统一致的最佳选择,但它也是最慢的,因为所有数据都要经过日志。
在线磁盘碎片整理
尽管 ext4 添加一些特性来减少文件系统的碎片(比如将相邻块分配为区段),但随着系统使用时间的增加,碎片是难以完全避免的。因此出现了在线碎片整理工具,它们可以对文件系统和单个文件执行碎片整理,从而改善性能。在线碎片整理程序是一个简单的工具,它将文件复制到引用相邻区段的新 ext4 inode。
在线碎片整理还可以减少检查文件系统所需的时间(fsck)。ext4 将未使用的块组标记到 inode 表中,并让 fsck 进程忽略它们以加快检查速度。当操作系统因内部损坏(随着文件系统变大,这是不可避免的)而检查文件系统时,ext4 的设计方式将能够提高总体可靠性。
结束语
针对 Linux 的扩展文件系统有着漫长而丰富的历史 — 从 1992 年首次引入 ext1 到 2008 年引入 ext4。ext4 是首个专门为 Linux 设计的文件系统,并且事实证明它是高效、稳定、强大的文件系统。ext4 随着文件系统研究的深入而不断发展,并且借鉴其他新文件系统的先进思想(比如 XFS、JFS、Reiser 和 IRON 容错文件系统技术)。尽管目前预测 ext5 将会是什么样子还为时过早,但有一点是很明确的,它将主导企业级 Liunx 系统。