Ext4


Ext4

文章插图
Ext4EXT4是第四代扩展档案系统(英语:Fourth extended filesystem,缩写为 ext4)是Linux系统下的日誌档案系统,是ext3档案系统的后继版本 。
Ext4是由Ext3的维护者Theodore Tso领导的开发团队实现的,并引入到Linux2.6.19核心中 。
Ext4产生原因是开发人员在Ext3中加入了新的高级功能,但在实现的过程出现了几个重要问题:
(1)一些新功能违背向后兼容性
(2)新功能使Ext3代码变得更加複杂并难以维护
(3)新加入的更改使原来十分可靠的Ext3变得不可靠 。
由于这些原因,从2006年6月份开始,开发人员决定把Ext4从Ext3中分离出来进行独立开发 。Ext4的开发工作从那时起开始进行,但大部分Linux用户和管理员都没有太关注这件事情,直到2.6.19核心在2006年11月的发布 。Ext4第一次出现在主流核心里,但是它当时还处于试验阶段,因此很多人都忽视了它 。
【Ext4】2008年12月25日,Linux Kernel 2.6.28的正式版本发布 。随着这一新核心的发布,Ext4档案系统也结束实验期,成为稳定版 。
基本介绍中文名:Ext4
外文名:The fourth extended file system
类型:日誌式档案系统
Ext4档案系统的特点更大的档案系统和更大的档案Ext3档案系统最多只能支持32TB的档案系统和2TB的档案,根据使用的具体架构和系统设定,实际容量上限可能比这个数字还要低,即只能容纳2TB的档案系统和16GB的档案 。而Ext4的档案系统容量达到1EB,而档案容量则达到16TB,这是一个非常大的数字了 。对一般的台式机和伺服器而言,这可能并不重要,但对于大型磁碟阵列的用户而言,这就非常重要了 。更多的子目录数量Ext3目前只支持32000个子目录,而Ext4取消了这一限制,理论上支持无限数量的子目录 。更多的块和i-节点数量Ext3档案系统使用32位空间记录块数量和i-节点数量,而Ext4档案系统将它们扩充到64位 。多块分配当数据写入到Ext3档案系统中时,Ext3的数据块分配器每次只能分配一个4KB的块,如果写一个100MB的档案就要调用25600次数据块分配器,而Ext4的多块分配器“Multiblock Allocator(MBAlloc)”支持一次调用分配多个数据块 。持久性预分配如果一个应用程式需要在实际使用磁碟空间之前对它进行分配,大部分档案系统都是通过向未使用的磁碟空间写入0来实现分配,比如P2P软体 。为了保证下载档案有足够的空间存放,常常会预先创建一个与所下载档案大小相同的空档案,以免未来的数小时或数天之内磁碟空间不足导致下载失败 。而Ext4在档案系统层面实现了持久预分配并提供相应的API,比套用软体自己实现更有效率 。延迟分配Ext3的数据块分配策略是儘快分配,而Ext4的策略是儘可能地延迟分配,直到档案在缓冲中写完才开始分配数据块并写入磁碟,这样就能最佳化整个档案的数据块分配,显着提升性能 。盘区结构Ext3档案系统採用间接映射地址,当操作大档案时,效率极其低下 。例如,一个100MB大小的档案,在Ext3中要建立25600个数据块(以每个数据块大小为4KB为例)的映射表;而Ext4引入了盘区概念,每个盘区为一组连续的数据块,上述档案可以通过盘区的方式表示为“该档案数据保存在接下来的25600个数据块中”,提高了访问效率 。新的i-节点结构Ext4支持更大的i-节点 。之前的Ext3默认的i-节点大小128位元组,Ext4为了在i-节点中容纳更多的扩展属性,默认i-节点大小为256位元组 。另外,Ext4还支持快速扩展属性和i-节点保留 。日誌校验功能日誌是档案系统最常用的结构,日誌也很容易损坏,而从损坏的日誌中恢複数据会导致更多的数据损坏 。Ext4给日誌数据添加了校验功能,日誌校验功能可以很方便地判断日誌数据是否损坏 。而且Ext4将Ext3的两阶段日誌机制合併成一个阶段,在增加安全性的同时提高了性能 。支持“无日誌”模式日誌总归会占用一些开销 。Ext4允许关闭日誌,以便某些有特殊需求的用户可以藉此提升性能 。默认启用Barrier磁碟上配有内部快取,以便重新调整批量数据的写操作顺序,最佳化写入性能,因此档案系统必须在日誌数据写入磁碟之后才能写Commit记录 。若Commit记录写入在先,而日誌有可能损坏,那幺就会影响数据完整性 。Ext4档案系统默认启用Barrier,只有当Barrier之前的数据全部写入磁碟,才能写Barrier之后的数据 。线上碎片整理儘管延迟分配、多块分配和盘区功能可以有效减少档案的碎片,但碎片还是不可避免会产生 。Ext4支持线上碎片整理,并将提供e4defrag工具进行个别档案或整个档案系统的碎片整理 。支持快速fsck以前的档案系统版本执行fsck时很慢,因为它要检查所有的i-节点,而Ext4给每个块组的i-节点表中都添加了一份未使用i-节点的列表,所以Ext4档案系统做一致性检查时就可以跳过它们而只去检查哪些在使用的i-节点,从而提高了速度 。支持纳秒级时间戳Ext4之前的扩展档案系统的时间戳都是以秒为单位的,这已经能够应付大多数设定,但随着处理器的速度和集成程度(多核处理器)不断提升,以及Linux开始向其他套用领域发展,它将时间戳的单位提升到纳秒 。Ext4给时间範围增加了两个位,从而让时间寿命在延长500年,Ext4的时间戳支持的日期到2514年4月25日,而Ext3只达到2038年1月18日 。Ext4档案系统的向前和向后兼容Ext4档案系统在Ext3的基础之上做了很多改进,引入了大量新功能,这些改进主要是为了提高未来的Linux系统的性能 。虽然Ext4做了很多改进,但依然能够与Ext3实现向后和向前的兼容性,这一点的确很难得 。因为Ext3档案系统是Linux作业系统上最受欢迎的档案系统之一,所以Ext4的研发人员考虑到应该让Ext3用户能够轻鬆迁移到Ext4,为此,Ext4被设计为在盘区结构方面具有向后和向前的兼容性 。首先Ext4是可以向前兼容的,也就是说Ext3档案系统可以挂载为Ext4档案系统使用,不过为了充分利用Ext4的优势,必须实现档案系统的迁移,以转换和利用新的Ext4格式 。Ext3档案系统可以线上转换为Ext4,但这样并不能用到Ext4的全部新特性,只有将档案系统重新创建为Ext4才比较彻底 。Ext4的向后兼容,向后兼容就是指可以将Ext4档案系统挂载为Ext3档案系统使用,但是前提是Ext4档案系统不能使用盘区功能 。如何使用Ext4目前的Ext4档案系统是第一个稳定版本,整个的开发进度和发布计画都被放缓了,就是为了保证用户可以享受到“和使用Ext3同等级”的稳定 。一个非常重要的事情是,目前还没有Ext4 Grub 。更準确的说,就是目前没有grub支持ext4 。换句话说,就是你目前的发行版本的grub不支持ext4 。目前我们的Grub2正在开发之中,在ubuntu和debian发行版中已经有了grub2的grub-pc软体包了,但是目前官方仍没有宣布正式支持 。在Google SoC中也包含了一个开发版本,且发布了相关补丁 。你可以试用一下,你自己选择喽 。在你的发行版本的下一个新版本之中,可能会有相关的支持出现 。所以安全起见,儘量保持你的/boot目录为Ext3档案系统类型 。警告归警告,转换到Ext4其实是件很容易的事情,如下方法均可:1 建立Ext4档案系统 。这是最简单的方法,你只需要升级你的e2fsprogs到Ext4,并且使用mkfs.ext4命令创建档案系统即可 。2 从Ext3迁移到Ext4 。你需要使用tune2fs命令和fsck命令,并且当前档案系统需要被卸载才可以 。运行命令tune2fs -O extents,uninit_bg,dir_index /dev/yourfilesystem此后,你务必运行fsck命令,否则Ext4将无法挂载你的新档案系统 。在fsck过程中,可能会有一些error需要你的确认 。你可以考虑使用 -p选项,来告诉fsck你想要的是“automatic repair”,即fsck -pf /dev/yourfilesystem3 用Ext4挂载Ext3档案系统 。你可以使用mount -t ext4 /dev/yourpartition /mnt来将一个Ext3档案系统用Ext4来挂载,但你将享受不到那些需要改变磁碟格式才可以享受得到的特性,比如Extents 。你可以享受到的只有 那些不需要改变磁碟格式即可享受得到的特性,比如多块分配、延迟分配等 。我们当然不建议您这幺做,因为Ext4的优秀特性,您将无法体会 。