学习笔记:EXT4文件系统特性

图:



大型文件系统

ext4文件系统可支持最高1 Exbibyte的分区与最大16 Tebibyte的文件。

 

  • 1 EB = 1024 * 1024 TB
  • block size: 4 bytes


向下兼容

ext4向下兼容于ext3与ext2,因此可以将ext3和ext2的文件系统挂载为ext4分区。由于某些ext4的新功能可以直接运用在ext3和ext2上,直接挂载即可提升少许性能。

ext3文件系统可以部分向上兼容于ext4(也就是说ext4文件系统可以被挂载为ext3分区)。然而若是使用到Extent技术的ext4将无法被挂载为ext3。


拓展子目录数量

在一个目录中

  • Ext3 支持 32000 个子目录
  • Ext4 支持 64000 个子目录


拓展块大小(Extents)

Ext3 为每个文件维护一个 block 表,用于保存这个文件在磁盘上的块号,因为一个 block 只有 4kb 的大小,所以对于一个大文件来说的话,需要维护的 block 表占用的空间就比较可观了,删除和截断等操作的效率也就比较低。

ext4引进了Extent文件存储方式,以取代ext2/3使用的block mapping方式。Extent指的是一连串的连续实体block,这种方式可以增加大型文件的效率并减少分裂文件。ext4支持的单一Extent,在单一block为4KB的系统中最高可达128MB。单一inode中可存储4笔Extent;超过四笔的Extent会以Htree(一种特殊的B树)方式被索引。该功能已经实现于Linux核心2.6.23版。


预留空间

ext4允许对一文件预先保留磁盘空间。目前大多数文件系统做到这点的方式是直接产生一个填满0的文件;ext4和XFS可以使用Linux核心中的一个新的系统调用“fallocate()”获取足够的预留空间。


延迟获取空间

ext4使用一种称为allocate-on-flush的方式,可以在数据将被写入磁盘(sync)前才开始获取空间;大多数文件系统会在之前便获取需要的空间。这种方式可以增加性能并减少文件分散程度。


日志校验和

Ext4使用校验和特性来提高文件系统可靠性,因为日志是磁盘上被读取最频繁的部分之一。这个特性还有一个好处就是可以安全地避免日志处理时磁盘I/O的等待,而稍微提高一些性能。


在线磁盘整理

这个特性正在开发中,会包含到之后的版本中。

通过使用延迟分配、extents 和 多块分配能够有效减少磁盘碎片,但是文件内容变动(可以需要另外的 block 来存放数据,这个 block 可能会离原来的地方比较远,从而引发一次额外的寻道)也会带来很多碎片,磁盘碎片整理可以将文件尽可能的重分配到连续的 block 中,从而减少磁盘碎片,提高访问效率。


快速文件系统检查

Ext4将未使用的区块标记在inode当中,这样可以使诸如e2fsck之类的工具在磁盘检查时将这些区块完全跳过,而节约大量的文件系统检查的时间。


Inode 相关特性

更大的 inodes:Ext3 支持配置inode 大小,默认为 128 bytes,Ext4 默认为 256 bytes。增加了一些额外的域(比如纳秒级的 timestamps 或 inode 版本),剩余的空间用来保存拓展属性。这种方式可以使访问这些属性的速度更快,从而提高应用程序的性能。

当创建目录时,直接为其创建几个保留的 inode 节点,当在这个目录中创建新文件时,就可以直接使用这些保留的 inode 节点,从而提高文件创建和删除的效率。

Ext3 的时间属性是秒级的,Ext4 的时间属性是纳秒级的。




https://zh.wikipedia.org/wiki/Ext4

https://github.com/c-rainstorm/blog/blob/master/os/FileSystem-Ext4.md


猜你喜欢

转载自blog.csdn.net/a912952381/article/details/81050672
今日推荐