Chinaunix首页 | 论坛 | 博客
  • 博客访问: 78521
  • 博文数量: 46
  • 博客积分: 985
  • 博客等级: 准尉
  • 技术积分: 450
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-20 22:56
文章分类

全部博文(46)

文章存档

2011年(46)

我的朋友

分类: LINUX

2011-01-24 21:36:16

Ext3看来要完成他的使命,走向终结了。这个曾经最流行的Linux文件系统现在越来越不适应现在高达1Gb的存储空间了,不能满足21世纪的存储要求,日前Linux的内核开发人员正在进行新版本的Ext4的研发工作。知名的Linux开发人员Andrew Morton在10的时候宣布,他们已经把Ext4的实验性质的文件系统引入Linux内核。

新的文件系统把支持高达1024 PB的容量(1p=2^50),如果空洞的数字没有办法想象,可以看看IBM为美国劳伦斯物理实验室构建的BlueGene/L超级计算机,它的总的存储空间也只有1PB,另外还有一些著名的存储网络有如此高的存储容量。

另外,在Ext4中,把支持文件连续写入,也就是说,在文件创建的时候,把为它创建一个连续的存储空间,这样,假如要再在该文件中写入东西,就可以在连续空间中写入,这样就意味着减少了文件的碎片和提高了驱动器的性能。

这个功能不仅仅出现在Ext4中,已经出现在Reiser4和 IBM的 JFS文件系统中,分别被用在Linux和AIX中。

就像许多其他的现代文件系统一样,Ext4也是一种日志文件系统,在性能、备份和灾难恢复中起到重要的作用。

Ext4兼容ext3标准,就是说,你可以把ext4的分区以ext3加载,但是你把失去它的连续写入功能。

 

为了更好的理解在线调整大小工作机制,我们首先需要理解 ext3 和 ext4 文件系统的磁盘布局,对于该功能的实现来说,这两个文件系统在磁盘上的结构是一致的,同时为了简化和突出重点,对于与在线调整大小功能不相关的内容我们将不会介绍。 

Ext3 文件系统将其所管理的磁盘或者分区(引导块除外)中的块划分到不同的块组中。每个块组大小相同,当然最后一个块组所管理的块可能会少一些,其大小在文件系统创建时决定,主要取决于文件系统的块大小,对于大小为4k的文件系统块来说,块组大小为 168M。每个块组都包含一些重要的元数据信息,见图1:

 

Ext3和Ext4文件系统磁盘布局

每个块组包含一个块位图块,一个 inode 位图块,一个或多个块用于描述 inode 表和用于存储文件数据的数据块,除此之外,还有可能包含超级块和所有块组描述符表(取决于块组号和文件系统创建时使用的参数)。下面将对这些元数据作一些简要介绍。 

 

块位图用于描述该块组所管理的块的分配状态。如果某个块对应的位未置位,那么代表该块未分配,可以用于存储数据;否则,代表该块已经用于存储数据或者该块不能够使用(譬如该块物理上不存在)。由于块位图仅占一个块,因此这也就决定了块组的大小。

Inode位图用于描述该块组所管理的inode的分配状态。我们知道inode是用于描述文件的元数据,每个inode对应文件系统中唯一的一个号,如果inode位图中相应位置位,那么代表该inode已经分配出去;否则可以使用。由于其仅占用一个块,因此这也限制了一个块组中所能够使用的最大inode数量。

Inode表用于存储inode信息。它占用一个或多个块(为了有效的利用空间,多个inode存储在一个块中),其大小取决于文件系统创建时的参数,由于inode位图的限制,决定了其最大所占用的空间。

超级块用于存储文件系统全局的配置参数(譬如:块大小,总的块数和inode数)和动态信息(譬如:当前空闲块数和inode数),其处于文件系统开始位置的1k处,所占大小为1k。为了系统的健壮性,最初每个块组都有超级块和组描述符表(以下将用GDT)的一个拷贝,但是当文件系统很大时,这样浪费了很多块(尤其是GDT占用的块多),后来采用了一种稀疏的方式来存储这些拷贝,只有块组号是3, 5 ,7的幂的块组(譬如说1,3,5,7,9,25,49…)才备份这个拷贝。通常情况下,只有主拷贝(第0块块组)的超级块信息被文件系统使用,其它拷贝只有在主拷贝被破坏的情况下才使用。

GDT用于存储块组描述符,其占用一个或者多个数据块,具体取决于文件系统的大小。它主要包含块位图,inode位图和inode表位置,当前空闲块数,inode数以及使用的目录数(用于平衡各个块组目录数),具体定义可以参见ext3_fs.h文件中struct ext3_group_desc。每个块组都对应这样一个描述符,目前该结构占用32个字节,因此对于块大小为4k的文件系统来说,每个块可以存储128个块组描述符。由于GDT对于定位文件系统的元数据非常重要,因此和超级块一样,也对其进行了备份。GDT在每个块组(如果有备份)中内容都是一样的,其所占块数也是相同的。从上面的介绍可以看出块组中的元数据譬如块位图,inode位图,inode表其位置不是固定的,当然默认情况下,文件系统在创建时其位置在每个块组中都是一样的,如图2所示(假设按照稀疏方式存储,且n不是3,5,7的幂):

 

以稀疏方式存储超级块和块组描述符表

 

从图我们可以看出,每个块组大小相同,除了最后一个块组可能包含的块少一些(用虚线和阴影表达)。

Ext4 是众多 Linux? 文件系统中的最新版本,它将像以前的版本一样重要和流行。作为 Linux 系统管理员,您应该知道迁移到 ext4 的优缺点和基本步骤。本文将介绍何时应采用 ext4、如何在 ext4 中使用传统的文件系统维护工具以及如何充分利用该文件系统。

Ext4 的功能

Linux 支持几个不同的文件系统。这些文件系统中,一些是专用的网络文件系统或为其他操作系统开发的文件系统,但绝大部分还是用作 Linux 本地文件系统 - 您可以将 Linux 根(/)和系统目录放在这种文件系统里。目前,这一类文件系统包括 ext2、ext3、ReiserFS、XFS 和 Journaled File System (JFS)。但是文件系统一直在不断设计和开发中,新的文件系统也将陆续问世。

目前正在开发的最重要的 Linux 文件系统是 ext4 - 它是专门为 Linux 开发的原始的扩展文件系统(ext 或 extfs)的第四版。由于继承了以前版本,ext4 在不久的将来很可能会成为一个重要的 Linux 标准文件系统(可能是 标准文件系统)。

Ext4 与 ext3 的对比

扩展文件系统(ext 或 extfs)第四版产生的原因是开发人员在 ext3 中并入了新的高级功能。但在实现的过程出现了几个问题:

一些新功能违背向后兼容性。
Ext3 代码变得更加复杂并难以维护。
这些更改使原本十分可靠的 ext3 变得不可靠。
由于这些原因,从 2006 年 6 月份开始,开发人员决定把 ext4 从 ext3 中分离出来进行独立开发。Ext4 的开发工作从那时起开始进行,但大部分 Linux 用户和管理员都不怎么注意这件事情。随着 2.6.19 内核在 2006 年 11 月的发布,ext4 第一次出现在主流内核里,但是它当时还处于试验阶段(现在还是),因此很多人都忽视了它。

由于还处于开发阶段,从 2.6.24.4 内核开始,ext4 的功能列表就一直在变动。 Ext4 的当前和预期功能包括从 ext3 发展而来的功能,见表 1。

表 1. Ext4 的当前功能和未来功能使它超越了 ext3
功能 优势
更大的文件系统 Ext3 最多只能容纳 32 TiB 的文件系统和 2 TiB 的文件,根据使用的具体架构和系统设置,实际容量上限可能比这个数字还要低 - 或许只能容纳 2 TiB 的文件系统和 16 gibibyte(GiB)的文件。相反,Ext4 的文件系统容量达到 1024 pebibyte(PiB), 或 1 exbibyte(EiB),而文件容量则达到 16 TiB。对一般的台式计算机和服务器而言,这可能并不重要,但对大磁盘阵列的用户而言,这就非常重要了。
extent extent 是一种提高磁盘文件描述符效率的方法,它能够减少删除大型文件所需的时间等等。
持久性预分配 如果一个应用程序需要在实际使用磁盘空间之前对它进行分配,大部分文件系统都是通过向未使用的磁盘空间写入 0 来实现分配。而 ext4 允许提前分配,无需进行上述操作,这能提高某些数据库和多媒体工具的性能。
延迟分配 Ext4 能够尽量延迟磁盘空间的分配,这能够提高性能。
更多的子目录 如果 ext3 中一个目录只能包含 32,000 个子目录还不能满足您的需求,那么不必担心,因为 ext4 取消了这一限制。
日志 checksum Ext4 给日志数据添加了检查和(checksum)功能,这能提高可靠性和性能。
在线磁盘整理 虽然 ext3 一般不会受到碎片的影响,但是存储在它里面的文件多少会产生一些碎片。Ext4 支持在线磁盘整理,这能够改善总体性能。
恢复删除文件 虽然这一功能尚未实现,但 ext4 将支持恢复删除文件。当文件被意外删除时,此功能将极为有用。
更快的文件系统检查 Ext4 添加了新的数据结构,允许 fsck 在检查中跳过磁盘中未使用的部分,因此加快了文件系统的检查。
纳秒级时间戳 大部分的文件系统(包括 ext3)都包含有精确到秒的时间戳数据,而 ext4 把精确度提高到了纳秒。一些资料还表明 ext4 的时间戳支持的日期达到 2514 年 4 月 25 日,而 ext3 只达到 2038 年 1 月 18 日。

由于 ext4 目前还处于开发阶段,这个功能表还会有所变动。功能列表的一些功能在实际使用中不具备与 ext3 的向后兼容性 - 即可能无法使用 ext3 文件系统类型的代码挂载 ext4 文件系统。但是 ext4 保留了向前兼容性 - 您可以像挂载 ext4 文件系统一样挂载 ext3 文件系统。

ext4 的使用对象

Ext4 最为显著的改进是文件和文件系统的大小。因此,最可能需要 ext4 的用户是那些磁盘空间大小为几个 TB 的用户。然而表 1 中的功能列表还展示了其他一些吸引人的改进。例如,如果您的目录带有大量子目录,或者要求时间戳的精确度小于一秒,您可能希望尝试使用 ext4。

因为 ext4 目前处于试验阶段,要使用它就必须重新编译内核,否则,使用 ext4 时将会出现麻烦。事实上,ext4 处于试验阶段意味着只有希望为 ext4 的开发做贡献,或者非常渴望它的某些功能,这些情况下才有必要使用它。如果想在稳定的 ext4 发布之前获得可靠的大磁盘支持,可以考虑使用 XFS 或 JFS。

当然,ext4 不可能永远处于试验阶段。它不久将成为一个稳定的文件系统。届时,ext4 将像 ext3 一样成为所有用户的最佳选择,但需要注意几个问题。首先,ext4 还存在一些独有的 bug,因此当首次发行 ext4 稳定版时要多加注意。其次,使用 ext4 可能导致一些老版本的工具无法访问磁盘。这将涉及到紧急恢复工具,因此在确定您使用的工具支持 ext4 之前不要进行更新。好的一面是,应该可以从 ext3 顺利迁移到 ext4,如果需要保存现有数据,这将实现轻松的转移。

阅读(1389) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~