EXT是什么

小白 2020-09-23 01:48:41
QA

EXT是延伸文件系统(Extended file system)也译为扩展文件系统,一种文件系统,是为linux核心所做的第一个文件系统。采用Unix文件系统(UFS)的元数据结构,以克服MINIX文件系统性能不佳的问题。

EXT是延伸文件系统(英语:Extended file system,缩写为 ext 或 ext1),也译为扩展文件系统,一种文件系统,于 1992 年 4 月发表,是为 linux 核心所做的第一个文件系统。采用 Unix 文件系统(UFS)的元数据结构,以克服 MINIX 文件系统性能不佳的问题。它是在 linux 上,第一个利用虚拟文件系统实现出的文件系统,在 linux 核心 0.96c 版中首次加入支持,最大可支持 2GB 的文件系统。

延伸文件系统 Extended file system

主要包括三个大的文件:ext-all.css,ext-base.js,ext-all.js(包括所有的类库,您可以根据需要进行删减。官方网站提供这一接口),在引用 ext 类库的时候,这三个文件必不可少。

它提供了丰富的,非常漂亮的外观体验,成为众多界面层开发人员的追捧!其核心的组件基本覆盖了我们构建 client 的常用的组件。

从 Ext 2 开始,商业版(针对那些以盈利为目的的开发方)要收费了。这可能会影响一些他的应用前景 。

目前的最新版本为 5.0,于 2014 年 6 月 22 日发布。

系统分区

它是专门为 Linux 设计的,拥有最快的速度和最小的 CPU 占用率。

Linux 作为自由软件,赢得了许多用户,其磁盘分区格式一种是 Linux Native 主分区,另一种是 Linux Swap 交换分区,并且主分区和交换分区都采用同一种格式,既 Native 和 Swap 格式。

这两种分区格式的安全和稳定性相当好,使用 Linux 操作系统死机的机会将大大减少。但是,目前支持这类分区格式的操作系统也有 Linux 和 Android。

EXT 的数据存储

虽然从 Ext2 到 Ext4,找数据的方式发生了变化,但是,磁盘的布局还是非常相似的。其实这个东西也不需要变化,因为现在也没什么特别巧妙的方式,而且磁盘的吞吐量、效率的瓶颈也不在这里。当然,这里排除那些根据自身文件特点设计的数据库,毕竟还是为了支持通用文件。

Boot 在第一个块,放的应该是引导程序,超级块就放在了第二个块上,如果不是可以在 mount 的时候通过参数 sb 来设置。对于经常要访问(比较重要)的内容可以在每个块组中都存储(当然这是比较浪费空间的,所有有的只选择在部分),在不同的块组中访问这些内容的时候磁头移动的距离就小了。如果开启了 sparse block 功能,那么只会在 3、5、7 的幂级的块组上才冗余这些信息。

在超级块里面保存了这个文件系统的统计信息等,而且从中可以看出这个文件系统的特点。在内存中装载的时候也从超级块开始,知道了磁盘上的布局之后才能顺利的进行后面的操作,ext4_super_block 的内容大概如下:

(1)块、inode 等统计信息,访问时间等。

(2)块大小、以及每块数目等布局信息。

(3)uid、gid。

(4)特性相关。

(5)预先分配相关。

(6)日志支持相关。

(7)64 位的支持,其实保存了需要的高 16 位。

块组中其实没有保存什么有用的信息(例如超级块),ext4_group_desc 的存在就是为了把磁盘分成一个个的块组。那分成块组之后有什么好处呢?试想一下如果没有块组,那么是不是位图这个关键的数据是不是要集中放到磁盘上的一个固定的位置?访问当然是没有问题的,但是不管在磁盘上的什么地方访问的时候都要跑到一个相同的地方去再访问一次位图,这样的代价就比较大了。而且在分配的时候尽量把文件的数据块放在同一个组,那么能在分配阶段就一定程度地避免了碎片。下面是 ext4_group_desc 中大概的内容(和 Ext2 中的不同的是对更大范围的支持):

(1)块组中块位图、inode 位图、inode 表的位置

(2)空闲块(inode)、目录的数目

(3)校验

接下来就是块位图、inode 位图了。为什么需要 inode 位图呢?因为 ext4 文件系统在要分配一个新的 inode 的时候并不是像在内存中分配其他数据结构的时候需要的时候分配数据结构占用的空间,而是预先分配好一组放在位图后面,就像一个 inode 池的感觉。那么在需要 ext4_inode 的时候就需要知道哪些是空闲的,哪些是用过的,这就是位图的作用了。位图具体就没什么好介绍的了,下面看 ext4_inode 的内容:

(1)mode、uid、gid 等我们能看到的信息

(2)各种时间戳

(3)i_data 用来找到数据块

(4)file acl

EXT 的数据查找

在对 Ext 文件系统还什么都不知道的时候应该比较关心从路径名到 ino 的过程。这个过程的大部分工作量应该在 VFS 中吧,而且感觉没什么特别的地方。现在查找数据对这部分的内容就忽略不计了。我们关系的是,给定 ino&offset,怎么样知道在磁盘上的位置呢?在课本上学到的只是告诉我们这个地方应该是用 B 树的,但是从 Ext2 好像没看的 B 树的影子,反而看到了内存管理中见过的东西:间接块。

间接块管理磁盘上文件的数据块位置和内存中分页的效果有点像,当然细节还是不同的。不过这个地方的坏处就很明显了,如果是访问大文件中的两个顺寻的物理块,那么即使他们物理上也是相邻的(如果内存中没有其缓存的话),也要从第一层的间接块开始访问,直到最后一层才知道真正的块号。在内存中分页当然是问题不大的,但是磁盘上这样高出几倍的访问时间效率会很差。

日志

什么是日志以及日志的作用就不在这里说了。Ext3 与 Ext2 的管理数据块的方式都是差不多的,不同之处是加上了记录日志的功能,可以从 Ext2 平滑地过渡到 Ext3。Ext3 日志文件系统的思想就是对文件系统任何的高级操作都分两步进行,首先,把待写入的块的一个副本存放在日志中;其次,当发往日志的 I/O 数据传送完成时,块就写入文件系统。当发往文件系统的 I/O 数据传送终止时,日志的块副本就被丢弃。

Ext3 既可以只对元数据的修改做日志,也可以记录所有的日志。有下面的三种日志模式:

(1)journal,把所有数据块的改变都记入日志,最安全也最慢。

(2)ordered,只记录元数据的改动,Ext3 会把元数据和相关的数据块进行分组,以便把元数据写入磁盘之前写入数据块。

(3)writeback,只记录元数据改动,最快的一种模式。

0个人收藏 收藏

评论交流

泪雪默认头像 请「登录」后参与评论
  1. 加载中..

相关推荐