EXT4是第四代扩展文件系统。单文件系统最大支持1EB,单个文件最大支持16TB。

一、兼容性

Ext4文件系统可以兼容之前的版本,如果用户通过Ext3格式化了磁盘,用户也可以在不损失数据的情况下升级到Ext4文件系统。向前兼容极大的方便了已有用户的升级,避免数据的导入导出可能引入的风险。向前兼容的原理很简单,就是数据在磁盘的布局与Ext3保持一致,并且数据结构也保持一致即可。

二、EXTENT

Extent是新一代文件系统支持的特性,其特点是通过其位置和长度表示文件内的数据,Ext4也支持该特性。在Ext2及Ext3中都是通过间接块的方式存储文件内的数据的,因此文件的大小和访问性能各方面都比较差。
如图,Ext3文件系统文件内数据存储的方式。在文件对应的inode节点中有一个15个元素的数组:

  • 0-11:存储的是文件数据在磁盘中的地址;
  • 12:存储的是地址,其指向磁盘地址存储的数据不是文件内数据,而是指向下一级的地址,该地址才是文件内的数据。也就是在该数组的元素和实际存储文件数据的磁盘块之间多出一个磁盘块,用于存储磁盘的地址,而这个磁盘块就是间接块;
  • 13:以此类推,第14个元素中间有2级间接块;
  • 14:第15个元素有3级间接块。
    从上可知,间接块的作用其实是在一定程度上优化了inode中存储地址的数量。

鉴于上述原理,由于文件系统中块的大小是确定的,而地址长度和数组元素也是确定的,因此就可以确定文件的最大大小。同时,由于每个地址指向的就是一个块,因此这种方式的特点是所有块大小是一样的。这样就有一个缺点,如果用户写入的是远大于文件系统块的数据,Ext3还是要切割为指定大小的块,而且还得计算地址,因此效率会非常不好。

Ext4文件系统对其进行了改进,实现了基于Extent的数据存储方式,其实现基于B+树。此时前文说的数组变成了B+树的树根,而B+树可以有多层,只有叶子节点存储指向文件数据的磁盘地址,中间层的节点只存储下一级的磁盘地址,由于B+树有很多叉(几百个),因此树的深度就会很浅。这样文件系统在查找文件的数据的时候就不需要过多的与磁盘交互,从而保证文件系统的性能。

前文提到,Ext4文件系统的关键之处在于Extent,也就是在叶子节点存储文件数据在磁盘的地址的数据结构。该数据结构存放着地址和数据的长度,因此,如果用户写一个很大块的数据,该数据结构就只需要记录起始位置和长度即可,并不需要进行切割,效率得到极大的提升。

三、延迟分配

延迟分配的意思是在写数据的情况下并不会马上为其分配磁盘空间,而是先写入页缓存,然后做个标记,标记其还没有分配空间。然后在某些特定的条件下才分配磁盘空间,并将数据写入磁盘中。

我们举一个例子,如果没有延迟分配,假设用户写入3个数据块,如图3左侧所示,其中数字代表先后顺序。此时文件系统为其分配磁盘空间,在地址上可能就不是连续的,而磁盘要写这些数据就会产生磁盘摆臂,从而对写入性能造成很大的影响。

而如果不马上分配空间,而是延迟分配空间,这样用户写入的数据就是连续的一块数据,此时文件系统只需要分配一块空间即可(如图3右侧所示),结合前面的Extent特性和多分配特性,就可以将该数据一次性写入,从而提升写入性能。简单的理解其实就是尽量的将随机IO转换为顺序IO。

四、日志校验

我们知道为了提高文件系统的可靠性,在Ext3的时候引入了日志系统。日志系统用于在更改元数据(其实更改数据也可以用日志系统,但性能影响比较大)的情况下,会先写入日志系统,然后再更改,这样如果中间出现故障(例如断电,系统崩溃等)时,就可以通过日志系统进行恢复。从而避免文件系统因为故障而导致整个文件系统数据的丢失。

所谓日志校验,就是在日志系统的数据结构中添加校验和,这样每次写入数据的时候,都会计算校验和,并一起写入。在读取数据的时候会重新进行计算,并与校验和对比,以确定数据的正确性。这种方式在数据库系统中用的非常广泛,比如Oracle和MySQL等,每个写入的数据库都有校验和。

五、在线碎片整理

所谓碎片就是在磁盘上的一些不连续的数据,及空洞。由于碎片的存在可能导致磁盘空间利用率的降低,因为一些小的空洞导致无法重新分配使用;还有就是性能的降低,因为在逻辑上连续的数据,在磁盘物理空间上可能是分散的,这样在访问时,对于普通机械硬盘将导致其频繁摆动磁头,降低访问性能。

虽然Ext4在数据布局和分配上做了很多优化,但数据的在磁盘上产生碎片仍然在所难免。因此Ext4额外实现了一个进行在线碎片整理的特性,并配合了一个用户工具。碎片整理的原理非常简单,就是分配一个临时的连续的大文件,然后将目标文件中的数据与该文件数据进行交换,这样就能把目标文件中不连续的数据转换为连续的。

(一)文件系统-ext4特性相关推荐

  1. Linux 文件系统 EXT4 的前世今生

    在先前关于Linux文件系统的文章中,我写了一份说明书去介绍Linux文件系统,里面有一些高级的概念,比如说,一切都是文件.我很想去深入地讨论更多EXT文件系统的特性的信息.所以,首先让我们来回答这个 ...

  2. Linux日志文件系统(EXT4、XFS、JFS)及性能分析

    Ext4 ReiserFS Btrfs 等七种文件系统性能比拼 自上一篇< Ext2 v.s. Ext3 v.s. Ext4 性能比拼> 发布以来,社会各界纷纷来电来函,给出了" ...

  3. ext4 文件系统新特性

    Ext4的名称来源于4th extended filesystem,它是广泛应用于Linux的Ext3文件系统的后继.同Ext3类似,Ext4也是日志文件系统.而与Ext3仅仅是将日志功能加入到Ext ...

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

    图: 大型文件系统 ext4文件系统可支持最高1 Exbibyte的分区与最大16 Tebibyte的文件. 1 EB = 1024 * 1024 TB block size: 4 bytes 向下兼 ...

  5. Linux文件系统ext3与ext4主要区别

    很长一段时间以来,ext3是很多linux发行版默认的文件系统,现在ext4已经发布,并且已经有发行版开始使用ext4作为默认的文件系统了(其实最初的时候ext4是作为ext3的扩展,但是为了保证ex ...

  6. Ext2, Ext3和Ext4是什么以及如何创建和转换Linux文件系统

    按照这里的指导,任何人能够转换它们的文件系统,但因为以下任务需要高级的管理规范,在做这之前,确保你必须做了重要的备份.如果遇到任何错误,至少你能够用备份数据恢复. 在计算机中,文件系统是命名并且逻辑放 ...

  7. 如何制作Ext4文件系统镜像

    如何制作Ext4文件系统镜像 Android中system.img的两种格式及其相互转换方法 搞Android的同学经常会接触到system.img.但是该文件经常以两种格式出现:raw和sparse ...

  8. ext4文件系统综述

    从本篇博客起,我们开始研究现代文件系统ext4,说其现代是因为其相比传统文件系统,有着更现代化的设计.这些先进的特性体现在本文所要叙述的以下方面. Ext4是Linux文件系统的一次革命.在很多方面, ...

  9. mysql ext3 ext4_Mysql如何选择文件系统?(ext4 vs ext3 vs jfs vs xfs vs reise

    如何提高mysql的性能?正确的选择文件系统,绝对是一个有效的方法之一.EXT4已经出现一段时间了,mysql在EXT4下的表现如何? 本文对当前linux几款常用的文件系统(ext4,jfs,rei ...

  10. Ext4 vs XFS——你应该使用哪个文件系统

    运行 Linux 系统的用户几乎不会关注底层文件系统.事实上,在安装 Linux 的过程中,通常倾向于使用列出的默认文件系统而不探索其他可用选项.对于 Windows,事情要容易得多,因为 NTFS ...

最新文章

  1. 什么是最佳适应算法?
  2. research proposal under dr. wang
  3. mysql服务器的HA集群之corosync+drbd+pacemaker实现 上
  4. LGB 的 .feature_importance() 函数
  5. el-drawer点击的时候为什么有边框_80%人都有的表格强迫症怎么破,一招教你自动添加表格边框...
  6. std::function和std::bind
  7. echarts我常用的参数总结
  8. CCIE-LAB-第七篇-IPV6 EIRGP+Passive
  9. UI设计素材|图标在UI设计界面当中起到什么作用
  10. CentOS7添加自定义系统服务
  11. 部署war包后,新增tomcat服务器,启动tomcat服务器报错解决方法
  12. jQuery性能优化指南(2)
  13. 画出清明上河图的代码_制作阴影立体动态图文图的代码【清明上河图】
  14. php数组的作业,PHP数组
  15. 2018年交通运行年报发布,深圳交通高质量发展取得新突破
  16. Mybatis出现Mapped Statements collection already contains value for
  17. HBase2.x(七)Master 架构
  18. dblp搜文献时各颜色含义
  19. 20200213ubuntu20.04下的笔记本USB摄像头的相关资料
  20. 4026.【函数】【测试】计算因子k的数量

热门文章

  1. 网络检测之(MTR WinMTR )网络链路追踪公路
  2. Zemax操作24--高斯光束的聚焦和传播
  3. python 网络调试助手
  4. 分布式数据库BLP安全模型介绍
  5. 2023年CFA一级notesbook1+quicksheet(高清)
  6. WORD宏VBA:标题应用样式+图表统一应用格式且居中
  7. 网页上使用按键代替鼠标点击按钮
  8. Xilinx平台SRIO介绍(五)示例工程Example Design介绍
  9. java saxreader 字符串_Java SAXReader.read方法代碼示例
  10. 华硕aura完全卸载_AURA神光同步是什么意思?AURA SYNC神光同步教程