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

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

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

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

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

  online resizing工作机制

  由上,文件系统所管理的块最终都是分派到块组中进行管理的。如果我们希望扩大文件系统的大小或者管理更多的物理块,那么需要将这些待添加的物理块分配到适当的块组中进行管理。很容易就能够想到,按照如下三个步骤一步步添加直到达到希望的文件系统大小为止:

  将物理块添加到最后一个块组中直到其满位置,如图2所示,我们可以将第n块块组中虚线部分填充满,然后增加文件系统可用的块数。

  如果GDT最后一个块还可以添加新的块组描述符,那么我们就添加一个新的块组。

  如果当前GDT中已经不能够添加新的块组了,那么我们需要新的块能够容纳块组描述符,对于该步骤,当前内核预留了一些块,用于存储块组描述符;当然这些预留块是有限的(始终小于一个块组的大小),如果文件系统很大,这些预留块最终会被耗尽,本文将采用一种新的方式meta block group来解决该问题。下面我们将先看看当前内核是如何处理的。见图3

  图3 当前Ext3和Ext4文件系统通过预留块来解决online resizing的问题

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

  当文件系统在创建时考虑到将来在线调整文件系统大小的需要,预留了一些块,并且使用一个inode(其对应的inode号为7)来管理这些预留块,以免这些块被分配给其它文件使用了。因此对于步骤3,当我们需要新块来存储块组描述符时,我们将从预留的组描述符块中分配一个块给GDT,由于GDT和预留的组描述符块在物理上是相邻的,因此很容易和原先的GDT块合并起来。

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

正在加载评论...