Ext3 和 ext4 文件系统在线调整大小内幕

豆豆网   技术应用频道   2008年04月15日  【字号: 收藏本文

内容摘要:在 Linux 平台下很多用户都在使用 ext3 文件系统,主要原因是其可靠性,健壮性和兼容性。在 Linux 2.6 内核中已经包括了适合在服务器环境中使用的很多特性,譬如目录索引,块预留,在线调整大小。为支持更大容量的文件系统,其下一个版本 ext4 也正处于开发中。本文主要介绍当前 ext3 和 ext4 文件系统中在线调整大小的工作机制,以及如何使用 meta block group 来扩展其大小。

  当我们在创建新的块组时,需要考虑该块组是否需要存储超级块和GDT的备份,如果需要备份,那么拷贝备份,同时将预留块添加到预留的组描述符inode中,然后增加超级块的块组数,空闲块数以及空闲inode数,为了保证文件系统的一致性,需要这些操作要么都完成,要么都不完成,它由JBD的事务机制来保证。

  meta block group工作机制

  由于预留的组描述符有限,当我们需要文件系统增加到很大时,预留块可能已经耗尽,此时文件系统不能够增加,除非卸载文件系统,采用ext2prepare或者类似工具来预留块,但是文件系统在这段时间内将不能够使用,对于生产系统来说是不可接受的。因此我提交了使用meta block group来进行在线增长文件系统的补丁,使得文件系统的增长不再受限于预留块的大小和块组大小。

  元块组的概念其实很早就出现在内核中了,但是直到linux 2.6.21内核Ext3和Ext4文件系统online resizing功能并未支持这种新的布局,在Ext4的实现计划中将进行支持。元块组实际上是可以用一个组描述符块来进行描述的块组集,简单的说,它由一系列块组组成,同时这些块组对应的组描述符存储在一个块中。它的出现使得Ext3和Ext4的磁盘布局有了一定的变化,以往超级块后紧跟的是变长的GDT块,现在超级块(决定于是否是3,5,7的幂)和一个组描述符块存储在元块组的第一个,第二个和最后一个块组的开始处(见图4)。

  图4 采用meta block group后文件系统的磁盘布局

Ext3 和 ext4 文件系统在线调整大小内幕

  在两种情况下我们可能会用到这种新布局:

  文件系统创建时。用户可以指定使用这种布局。

  当文件系统增长而且预留的组描述符块耗尽时。目前超级块中有一个域s_first_meta_bg用于描述第一个使用元块组的块组。

  该方法非常高效同时保留了足够的冗余以防止异常情况。这种布局中GDT仅占用一个块,由于组描述符占用32个字节,对于块大小为4k的文件系统来说,每个元块组包含128个块组,可以管理16GB的空间,而且每个元块组中对于组描述符表都有3个备份。

  对比图4与图3我们就能够发现,当增加新块组时,我们不需要给组描述符表预留空间,而是在当前文件系统后面直接添加新的元块组就可以了。

  结论

  由于我们在创建文件系统时无法很好的预测将来可能的容量,因此文件系统的在线增长功能是非常有必要的。特别是LVM的出现更大的刺激了该需求,请注意本文所谈到的文件系统的在线增长并未涉及到如何扩大分区或者磁盘的大小,读者可以自己先采用lvm或者类似的工具扩大分区或者卷的大小,然后再采用ext2resize或者类似工具来完成ext3或者ext4文件系统的在线增长,其在内核中的工作机制本文已经阐述,希望对读者能够有所帮助。

来源:ibm    作者:谢作贵    责编:豆豆技术应用

正在加载评论...