EXT是延伸档案系统(英语Extended file system,缩写为 ext或 ext1),也译为扩展档案系统,一种档案系统,于1992年4月发表,是为linux核心所做的第一个档案系统。採用Unix档案系统(UFS)的元数据结构,以克服MINIX档案系统性能不佳的问题。它是在linux上,第一个利用虚拟档案系统实现出的档案系统,在linux核心0.96c版中加入支持,最大可支持2GB的档案系统
主要包括三个大的档案ext-all.css,ext-base.js,ext-all.js(包括所有的类库,您可以根据需要进行删减。官方网站提供这一接口),在引用ext类库的时候,这三个档案必不可少。
它提供了丰富的,非常漂亮的外观体验,成为众多界面层开发人员的追捧!其核心的组件基本覆盖了我们构建client的常用的组件。
从 Ext 2开始,商业版(针对那些以盈利为目的的开发方)要收费了。这可能会影响一些他的套用前景 。
目前的最新版本为5.0,于2014年6月22日发布。
基本介绍
- 中文名js类库
- 外文名Ext
- 类别资料库
- 特性构建client
系统分区
它是专门为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,只记录元数据改动,最快的一种模式。