ext4作为Linux下的文件系统因其简单性、易管理性、兼容性强等特定,深受大多数用户喜欢,并且作为大多数Linux发行版中的默认文件系统。但是随着现在文件数目的增多以及文件数据的增大,ext4文件系统显得力不从心, 虽然ext4添加了很多的新的特性, 比如extent、bigalloc等,但是比不上XFS等文件系统,目前RedHat中的默认文件系统更改为了XFS,XFS在目前大数据环境下表现性能优于ext4,原始的XFS是针对于高端计算机用户,当然其他优秀的文件系统Btrfs、ZFS正在不断开发和完善中。

在当前情况下,ext还是主流文件系统,下面介绍ext4文件系统特性。

1、ext4文件系统磁盘布局(disk layout)flex_group特性

原始的ext4文件系统的布局如下:

  1. +++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  2. | sb | block group table | block bitmap | inode bitmap | inode table | data blocks |
  3. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  4. |<==================== group =====================>|
  5.  
  6. +++++++++++++++++++++++++++ +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  7. | sb | block group table | block bitmap | inode bitmap | inode table | data blocks |
  8. +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  9. |<==================== group (sb和块组描述符备份) =====================>|

其中上述的block bitmap 和inode bitmap开始的block位置为该组的block的开始位置之上增加。

下面是一个具体格式化后的原始的ext4的文件系统磁盘格式布局数据:

  1. Group : (Blocks -)
  2. Primary superblock at , Group descriptors at -
  3. Reserved GDT blocks at -
  4. Block bitmap at (+), Inode bitmap at (+)
  5. Inode table at - (+)
  6. free blocks, free inodes, directories
  7. Free blocks: -
  8. Free inodes: -
  9. Group : (Blocks -)
  10. Backup superblock at , Group descriptors at -
  11. Reserved GDT blocks at -
  12. Block bitmap at (+), Inode bitmap at (+)
  13. Inode table at - (+)
  14. free blocks, free inodes, directories
  15. Free blocks: -
  16. Free inodes: -
  17. Group : (Blocks -)
  18. Block bitmap at (+), Inode bitmap at (+)
  19. Inode table at - (+)
  20. free blocks, free inodes, directories
  21. Free blocks: -
  22. Free inodes: -
  23. Group : (Blocks -)
  24. Backup superblock at , Group descriptors at -
  25. Reserved GDT blocks at -
  26. Block bitmap at (+), Inode bitmap at (+)
  27. Inode table at - (+)
  28. free blocks, free inodes, directories
  29. Free blocks: -
  30. Free inodes: -

现在ext4引入了flex_group 特性, 也即是把多个块组合并,他们的inode bitmap和block bitmap、 inode table都放在第一个flex_group中的第一个group中,格式化后的数据如下:

  1. Group : (Blocks -) [ITABLE_ZEROED]
  2. Checksum 0xa9e7, unused inodes
  3. Primary superblock at , Group descriptors at -
  4. Reserved GDT blocks at -
  5. Block bitmap at (+), Inode bitmap at (+)
  6. Inode table at - (+)
  7. free blocks, free inodes, directories, unused inodes
  8. Free blocks: -
  9. Free inodes: -
  10. Group : (Blocks -) [INODE_UNINIT, ITABLE_ZEROED]
  11. Checksum 0xd93e, unused inodes
  12. Backup superblock at , Group descriptors at -
  13. Reserved GDT blocks at -
  14. Block bitmap at , Inode bitmap at
  15. Inode table at -
  16. free blocks, free inodes, directories, unused inodes
  17. Free blocks: -
  18. Free inodes: -
  19. Group : (Blocks -) [INODE_UNINIT, BLOCK_UNINIT, ITABLE_ZEROED]
  20. Checksum 0xcde2, unused inodes
  21. Block bitmap at , Inode bitmap at
  22. Inode table at -
  23. free blocks, free inodes, directories, unused inodes
  24. Free blocks: -
  25. Free inodes: -
  26. Group : (Blocks -) [INODE_UNINIT, ITABLE_ZEROED]
  27. Checksum 0xafe0, unused inodes
  28. Backup superblock at , Group descriptors at -
  29. Reserved GDT blocks at -
  30. Block bitmap at , Inode bitmap at
  31. Inode table at -
  32. free blocks, free inodes, directories, unused inodes
  33. Free blocks: -
  34. Free inodes: -

引入flex_group特性的作用是为了支持更大的文件, 这样有利于大文件的数据块的分配,结合extent特性。

2、Bigalloc特性

      传统的ext4分配的最大的单位只能为4KB,块大小控制在4KB~512B之间,具体块大小在格式化的时候确定。因为Linux内存管理的限制, ext4文件系统不能处理大于4KB的文件系统块。但是对于一个文件系统中大部分文件都是大文件的情况,希望能够同时处理多个文件系统Block,减少文件系统中用于管理Block的开销。ext4中的新添加的特性Bigalloc特性可以很好的满足这个条件,在Bigalloc中,文件系统管理的单位叫做cluster,每个cluster是由原来的多个block组成,在原来的block bitmap中管理的大小由block变成cluster。

当然这个特性在小文件很多的情况下容易造成磁盘碎片很多,最后性能会骤然下降

3、Extent特性

在原来的ext4文件系统中进行逻辑块到物理块的转换采用的是inode中的blocks数组进行转换。在这种情况下,对于小文件,比如小于40KB(假设文件系统块大小为4KB)的文件,采用的是直接映射,这时ext4系统可以很快的处理,因为进行磁盘的IO次数变为两次(一次为读取文件inode,另外一次为读取对应的数据Block);但当读取的文件的大小超过40KB时,这时需要采用间接块的处理,这时进行文件读取操作需要多次磁盘IO,因此在大文件,尤其是几个G以上的文件下ext4文件读取性能会下降很多。而且针对于文件的truncate操作和文件的删除操作,对于大文件而言需要进行的磁盘IO次数也明显增加,整个文件系统性能下降很多。

采用extent的特性,可以有效的减少对于文件块映射的开销。ext4中的管理extent的重要的数据结构如下:

  1. /*
  2. * Each block (leaves and indexes), even inode-stored has header.
  3. */
  4. struct ext4_extent_header {
  5. __le16 eh_magic; /* probably will support different formats */
  6. __le16 eh_entries; /* number of valid entries */
  7. __le16 eh_max; /* capacity of store in entries */
  8. __le16 eh_depth; /* has tree real underlying blocks? */
  9. __le32 eh_generation; /* generation of the tree */
  10. };
  1. /*
  2. * This is index on-disk structure.
  3. * It's used at all the levels except the bottom.
  4. */
  5. struct ext4_extent_idx {
  6. __le32 ei_block; /* index covers logical blocks from 'block' */
  7. __le32 ei_leaf_lo; /* pointer to the physical block of the next *
  8. * level. leaf or next index could be there */
  9. __le16 ei_leaf_hi; /* high 16 bits of physical block */
  10. __u16 ei_unused;
  11. };
  1. /*
  2. * This is the extent on-disk structure.
  3. * It's used at the bottom of the tree.
  4. */
  5. struct ext4_extent {
  6. __le32 ee_block; /* first logical block extent covers */
  7. __le16 ee_len; /* number of blocks covered by extent */
  8. __le16 ee_start_hi; /* high 16 bits of physical block */
  9. __le32 ee_start_lo; /* low 32 bits of physical block */
  10. };

如上述中的extent的数据结构描述,一个大的数据块只需要一个起始块,再加上一个长度,开销很小。而且对于删除而言,可以很快的删除。在ext4中整个extent的管理采用extent tree的方式,extent tree是采用B+-tree管理。

4、Inline data特性

    内联数据的特性,可以有效的减少磁盘次数,对于小文件的处理可以提高很大的性能。原始的ext4文件所有数据采用的都是blocks的map方式在逻辑块和物理块之间的转换,采用extent的方式进行处理对于小文件会造成很大的磁盘碎片,影响ext4整体的文件系统性能,这些小文件为包括字节数为几十个字节。

采用inline data的方式, 文件的数据放在inode的后面,此时的inode为扩的inode,需要进行扩大处理。

参考资料:

[1]  Ext4 disk layout.   https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Inline_Data

[2]  Ext4 (and Ext2/Ext3) Wiki.   https://ext4.wiki.kernel.org/index.php/Main_Page

ext4文件系统特性浅析的更多相关文章

  1. ext4文件系统的delalloc选项造成单次写延迟增加的分析

    最近我们的服务进程遇到kill -15后处于Z的状态,变为了僵尸进程,经过/proc/{thread_id}/stack查看其上线程的栈,发现是卡在了fwrite的过程中,而我们的系统中所有文件系统挂 ...

  2. Ext4文件系统架构分析(二)

    接着上一篇博文,继续分析Ext4磁盘布局中的元数据. 1.7 超级块 超级块记录整个文件系统的大量信息,如数据块个数.inode个数.支持的特性.管理信息,等待. 如果设置sparse_super特性 ...

  3. Ext4文件系统架构分析(一)

    本文描述Ext4文件系统磁盘布局和元数据的一些分析,同样适用于Ext3和Ext2文件系统,除了它们不支持的Ext4的特性外.整个分析分两篇博文,分别概述布局和详细介绍各个布局的数据结构及组织寻址方式等 ...

  4. Ext4文件系统架构分析(三)

    ioctl源码分析之交换两个文件的物理extents 1. 交换两个文件的extents Ext4 的EXT4_IOC_MOVE_EXT命令用于交换两个文件的extents,实际上是交换两个文件的对应 ...

  5. [转载]ext4文件系统的delalloc选项造成单次写延迟增加的分析

    转载http://www.cnblogs.com/cobbliu/p/5603472.html 最近我们的服务进程遇到kill -15后处于Z的状态,变为了僵尸进程,经过/proc/{thread_i ...

  6. linux操作系统故障处理-ext4文件系统超级块损坏修复

    linux操作系统故障处理-ext4文件系统超级块损坏修复   背景 前天外面出差大数据测试环境平台有7台服务器挂了,同事重启好了五台服务器,但是还有两台服务器启动不起来,第二天回来后我和同事再次去机 ...

  7. 恢复ext4文件系统superblock

    恢复ext4文件系统superblock 1. Create ext4 文件系统. [root@localhost ~]# mkfs.ext4 /dev/vdb1 [root@localhost ~] ...

  8. 使用hexdump工具追踪EXT4文件系统中的一个文件

    昨天追踪EXT4文件系统的过程中出了点问题,就是找不到文件,于是试了一下追踪FAT32文件系统的,成功之后有了点信心,今天继续嗑EXT4文件系统,终于找到啦,记录一下. 操作系统:linux(cent ...

  9. CentOS中对ext4文件系统做磁盘配额

    1.修改/etc/fstab文件,使ext4文件系统支持磁盘配额. UUID="9e6dc1e8-4fc1-4984-be38-524573572d41" /mnt/ext ext ...

随机推荐

  1. localStorage跟cookie的使用

    最近做了记住密码功能,用localStorage跟cookie都尝试用了一下,感觉都挺好哈,很方便,特此记录 html代码: <input type="text" id=&q ...

  2. 项目经验:GIS<MapWinGIS>建模第二天

    记录下GIS的进展情况

  3. 前端构建工具Gulp的学习和使用

    前几天刚鼓捣了Grunt的使用,结果文档还没捂热,老大说我们还是用gulp吧,搞得我又得来整gulp,眼泪流成河了,真是不晓得底层人民的辛苦啊.不过经过对gulp的学习,发现很好用,比grunt舒服! ...

  4. (Stanford CS224d) Deep Learning and NLP课程笔记(一):Deep NLP

    Stanford大学在2015年开设了一门Deep Learning for Natural Language Processing的课程,广受好评.并在2016年春季再次开课.我将开始这门课程的学习 ...

  5. IEC62304软件维护框架

    软件维护计划的任务 建立接收.记录.评估.解决和追踪医疗器械软件发行后的反馈 制定确认反馈是否是问题的标准 使用风险管理过程 使用配置管理过程 制定升级.补丁以及遗留问题修正计划 问题和修改分析的任务 ...

  6. 【Yii系列】错误处理和日志系统

    缘起 跟随上一章的脚步,上一章中,我们主要讲解了在用户发起请求,解析请求,服务器反馈请求以及session的一些知识点,这过程中,难免会遇到一些问题,比方说数据库查询失败,用户输入导致脚本出错,网络问 ...

  7. is invalid; nested exception is org.xml.sax.SAXParseException: cvc-complex-type.2.4.c:严格输入了匹配通配符,但还是找不到元素“jee:jndi-lookup”的声明。

    由于未添加xsd声明引起

  8. 关于webWorker的理解和简单例子

    一.理解 当在 HTML 页面中执行脚本时,页面的状态是不可响应的,直到脚本已完成. web worker 是运行在后台的 JavaScript,独立于其他脚本,不会影响页面的性能.您可以继续做任何愿 ...

  9. python3.6+GDAL-2.1.3环境配置

    1.下载地址:http://www.lfd.uci.edu/~gohlke/pythonlibs/#gdal 2.配置:见上图命令(跟以前相似) 3.测试:

  10. [T-ARA][한겨울의 숨바꼭질/숨바꼭질][深冬的捉迷藏/捉迷藏]

    歌词来源: 深冬的捉迷藏:http://music.163.com/#/song?id=28111190 捉迷藏:http://music.163.com/#/song?id=28111189 作曲 ...