ext4文件系统新特性 -- 转载

来源:佚名 浏览次数:13


本文转载自:http://linux.chinaunix.net/bbs/thread-1059437-1-1.html

Ext4是内核版本2.6.28的重要部分。

介绍

Ext4是Linux文件系统的一次革命。在很多方面,Ext4相对于Ext3的进步要远超过Ext3相对于Ext2的进步。Ext3相对于 Ext2的改进主要在于日志方面,但是Ext4相对于Ext3的的改进是更深层次的,是文件系统数据结构方面的优化。一个高效的、优秀的、可靠的和极具特点的文件系统就此诞生。

兼容性

任何Ext3文件系统都可以轻松的迁移到Ext4文件系统,你只需要在只读模式下运行几条命令即可。这就意味着你完全可以不格式化硬盘、不重装操作系统、不重装软件环境,就能够顺利的升级到Ext4文件系统。这种升级方法不会损害到你硬盘上的数据和资料,因为Ext4仅会在新的数据上使用,而基本不会改动原有数据。

更大的文件系统/文件大小

Ext3支持最大16TB的文件系统,2TB的文件大小。Ext4将支持最大1EB的文件系统,16TB的文件大小。

1EB=1024PB=1024*1024TB=1024*1024*1024GB

上述这个特性是由于Ext4采用了48位寻址。有人会问,为什么不是64位呢?因为就目前的开发进展来看,实现64位寻址存在一些技术限制,但是Ext4已经在考虑这个问题了,在不久的将来,Ext4将实现完全的64位支持。

目录可扩展性

目前的Ext3中,单个目录下的子目录数目的上限是32000个。而在Ext4中打破了这种限制,可以创建无限多个子目录。

Extents

传统的类UNIX文件系统,比如Ext3,都是使用一个间接数据块映射表来记录每一个数据块的分配情况的。但是这种机制对于超大文件的存储是有缺陷
的,特别是当对超大文件进行删除和截断操作时。映射表会对每一个数据块进行记录,而一个超大文件将占有很多的数据块,因此造成映射表将变得无比臃肿,难于
维护。Ext4引入了一个新的概念,叫做“Extents”。一个Extents是一个地址连续的数据块的集合。比如一个100MB的文件将被分配给一个
单独的Extents,这样就不用像Ext3那样新增25600个数据块的记录(一个数据块是4KB)。而超大型文件会被分解在多个extents里。

Extents的实现提高了文件系统的性能,减少了文件碎片。

多块分配

在Ext3中,“将新的数据写入磁盘的哪些空闲块”是由块分配器来控制的。但是Ext3的块分配器存在一定缺陷,那就是它一次只能够分配一个数据块
(4KB),这就意味着,如果系统需要向磁盘中写入100MB的数据,那么需要调用块分配器25600次,而且由于块分配器无法获知总的分配块数,所以也
无法对分配空间和分配位置进行优化。

在Ext4中,使用了“多块分配器”,即一次调用可以分配多个数据块,这种机制提高了系统的性能,而且使得分配器有了充足的优化空间。

延迟分配

延迟分配(Delayed allocation)是一项仅仅少数现代文件系统才具有的优秀特性,比如XFS、ZFS、btrfs(better
FS)以及Reiser4。它能够尽可能的积累更多的数据块再分配出去,相对比,传统的文件系统则会尽快的将数据块分配出去,如Ext3,reiser3
等。

这项特性会和Extents特性以及多块分配特性相结合,使得磁盘IO性能得到显著提高。

更快速的FSCK

在Ext3中,Fsck本身是个速度很慢的操作,因为它要检查文件系统里的每一个“i节点”。但是,Ext4会维护一个未使用的“i节点”表,在进行
fsck操作时,会跳过表中节点,只检查正在使用中的i节点。这种机制使得fsck的效率提高为原有Ext3文件系统的2到20倍。不过,你要注意到一
点,那就是这个未使用的i节点表是由fsck来维护的,而不是由Ext4,因此你必须要首先运行一次fsck来生成,这样,在下次再运行fsck时才可以
享受提速。(虽然表是由fsck来维护的,但你还是需要从Ext3升级到Ext4才能够享受这项功能)

日志校验

日志要算是磁盘中最常用的部分了,也是最容易使硬盘出问题的机制之一。如果你不幸使用一个已经崩溃的日志来恢复系统的话,将导致更大规模的系统崩溃。
Ext4提供校验日志数据的功能,可以查看其潜在错误。而且,Ext4还会将Ext3日志机制中的“两阶段提交”动作合并为一个步骤,这种改进将使文件系
统的操作性能提升20%。这就是Ext4在日志机制方面对可靠度和性能的双重提升。

在线磁盘整理

这个特性没有包括在内核版本2.6.28之中,但是它很有可能会在下一个版本中引入。

虽然Extents、多块分配和延迟分配都有助于减少磁盘碎片,但是磁盘碎片仍然会产生。举例来说:你在一个目录下建立了三个文件 (f1,f2,f3),它们被按序写入到连续的一段内存
中。然而几天之后,你想要更新文件f2,也就是位于这段连续内存的中间那一段的那个文件。我要向
这个文件中增加一些

第1页 / 总2页  
  • 首页
  •   上一页  
  •   
  •   下一页
  • 相关推荐

      课程试听
    全部课程