Linux 中的 ext3 和 ext4 文件系统有什么区别?

Ext3 被认为是最流行的文件系统之一,并在许多商业发行版中使用,但随着 IT 行业需求的增加,我们开始发现 ext3 中缺乏的许多功能,这导致了 ext4 文件系统的发展。
在本文中,我将尝试非常彻底地提及 ext3 所缺乏的特性的细节,而 ext4 帮助克服了它。

注意:Ext4 可从内核版本为 2.6.19 的机器上获得

支持范围

Ext3 文件系统被设计为使用间接块映射方案,这对小文件很有效,但在处理大文件时会导致高元数据开销和性能不佳,尤其是在执行删除或者截断操作时,因为映射为每个单独的块保留一个条目,并且大文件有许多块,这将导致处理缓慢的巨大映射。

ext4 文件系统中添加了一个名为 extent 的新功能。
范围是表示一系列连续块的单个描述符。
ext4 中的单个区最多可以表示 128 MB

计算:

xt3:

使用间接块映射方案,1块=4KB
所以对于 100MB 文件 100*1024/4 = 25600 块

Ext4:

1 个范围最多可表示 128MB,因此单个范围可用于映射

与 ext3 相比,extents 在大型顺序 I/O 工作负载中带来了 25% 的吞吐量增益,从而提高了文件系统的整体性能。

大文件系统支持

ext3 最重要的限制之一是 16TB 文件系统大小,因为它使用 32 位块号并具有默认的 4k 块大小。
ext4 文件系统理论上支持 1EB 的最大文件系统大小(例如 100 万 TB:1 EB = 1024 PB、1 PB = 1024 TB、1 TB = 1024 GB)克服了这一点。
使用 48 位物理块号的范围补丁的组合使此更改成为可能。
其他元数据更改,例如在超级块结构中,也进行了支持 48 位块编号。

Journaling日志记录功能

日志文件系统是一种文件系统,它维护一个称为日志的特殊文件,用于修复由于计算机不正确关闭而导致的任何不一致。

为了在日志块层 (JBD) 中支持超过 32 位的块号,在克隆 ext4 的同时从 JBD 分叉出 JBD2.

在 Ext4 中,我们可以获得禁用日志功能的另外优势,这可以帮助有特殊要求和较少工作负载的用户稍微提高机器的性能。

多块分配

块分配器决定使用哪些空闲块来写入数据。
Ext3 分配器一次为文件系统中的任何数据分配一个块,因此我们可以想象在写入 100MB 数据时占用的 CPU 数量和时间,如上述计算所示。

Ext4 使用多块分配器,它允许在单个操作中将多个块分配给一个文件,以显着减少在文件系统中搜索许多空闲块的 CPU 使用量。
此外,由于同时分配了许多文件块,因此可以做出更好的决定来找到适合所有块的空闲空间块。

延迟分配

与立即开始寻找空闲块并尽快分配的 ext3 文件系统相比,这是一个特性,在文件系统上写入新数据尽可能延迟。

结合多块分配,通过知道所需块的大小,可以同时分配大量块,可以寻找合适的空闲空间块并将其分配给它,而不是每次都选择一个空闲块。

这将减少用于块分配的 CPU 时间,从而提高性能。

在线碎片整理

Ext4 将支持在线分片,通过创建临时 inode,使用多块分配将连续块分配给 inode,将原始文件中的所有数据读取到页面缓存,然后将数据刷新到磁盘并迁移新分配的块来执行转到原始inode。

为什么我们需要碎片整理?

当文件系统中有多个文件时,会发生这种情况。
现在这些数据被存储为小块。
例如,我们有一个 1GB 的单个数据文件,因此内核会将这个单个文件的所有块放在一个位置,但最终随着文件系统大小变满,该 1GB 文件附近的块也将被占用。
但是,如果我们向 1GB 数据文件添加更多内容并将其大小增加到 3GB 呢?
在这种情况下,内核不会在该数据文件附近找到任何空闲块,并将在文件系统上分配随机空闲块,这会降低 I/O 性能。
因此,我们执行碎片整理以排列文件系统上每个可用数据的所有块。

inode 相关

在 ext3 中,默认 inode 大小为 128 字节,但在 ext4 中,默认 inode 大小可以是 256、512、1024 等。
最多文件系统块大小。
这将为计划功能、纳秒时间戳和 inode 版本控制所需的新字段提供空间。

索引功能

为了提高目录的可扩展性,ext3 中可用的目录索引功能将在 ext4 中默认打开。
目录索引使用专门的类似 Btree 的结构来存储目录条目,而不是具有线性访问时间的链表。
这显着提高了性能
某些具有非常大目录的应用程序。

更快的修复和恢复

在 ext4 中未分配的块组和 inode 表的部分被标记为这样。
这使 e2fsck 可以完全跳过它们,并大大减少检查文件系统所需的时间。
Linux 2.6.24 实现了这个特性。

无限子目录限制

利用 B 树索引功能,ext4 文件系统克服了子目录的最大限制,即 ext3 中的 32,768 个。
可以在 ext4 文件系统中创建无限的目录。

ext3和ext4的简单对比图

FeaturesExt3Ext4
Filesystem limit16TB1EB (1 EB = 1024 PB, 1 PB = 1024 TB)
File limit2TB16TB
Default inode size128 bytes256 bytes
Block MappingIndirectExtent
Time StampSecondNanosecond
Sub Directory Limit32,768Unlimited
PreallocationIn-core reservationFor extent file
DefragmentationNoYes
Directory IndexingDisabledEnabled
Delayed AllocationNoYes
Multiple Block AllocationBasicAdvanced
日期:2020-06-02 22:16:50 来源:oir作者:oir