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的简单对比图
Features | Ext3 | Ext4 |
---|---|---|
Filesystem limit | 16TB | 1EB (1 EB = 1024 PB, 1 PB = 1024 TB) |
File limit | 2TB | 16TB |
Default inode size | 128 bytes | 256 bytes |
Block Mapping | Indirect | Extent |
Time Stamp | Second | Nanosecond |
Sub Directory Limit | 32,768 | Unlimited |
Preallocation | In-core reservation | For extent file |
Defragmentation | No | Yes |
Directory Indexing | Disabled | Enabled |
Delayed Allocation | No | Yes |
Multiple Block Allocation | Basic | Advanced |