本小节主要是介绍基于dataserver上的文件结构进行详解,在每个dataserver(一个磁盘运行一个ds,一台服务器可以运行多个ds实例)上都会维护着一份文件系统的元信息以及数据信息。下面我们先对dataserver中关于文件存放的整体结构进行简要描述,然后再对每个文件结构进行细讲。

dataserver整体文件结构如下:

一个dataserver有一个归属于它自身的磁盘,一个磁盘会划分为N个物理块(具体大小视配置而定,分主块和扩展块),dataserver用超级块文件来包括该dataserver的元信息(具体信息下面有讲)。在软件层面上划分为N个逻辑块来对物理块进行管理,一般来说一个逻辑块内包含如下信息:

(1) 块索引文件:

主要用于快速寻找文件在块(包括:主数据块和扩展数据块)里面的位置。

(2) 主数据块:

是主要用于存放文件数据的,主块基本上存在着该逻辑块上的大部分数据。

(3) 扩展数据块:

当主数据块被用光以后,就会开辟扩展数据块来存在新增的文件,当然扩展块的容量会远小于主块(不过也视配置而定),通常在逻辑块只有一个主块但是却可以有N个扩展块。

TFS分布式文件系统学习总结(2)-文件系统文件结构详解

 

dataserver的元文件信息分为superblock文件、IndexHandle块索引文件信息,下面我们来一一介绍。

1、superblock文件信息:

superblock文件的信息是在dataserver首次运行时进行初始化的,superblock保存运行的dataserver的运行相关信息,具体种类如下:

(1) 超级块信息,其中超级块信息内容包括如下:

1) 数据存放路径

2) 文件系统类型,ext3 or ext4

3) 超级块结构信息:

4) 文件相关信息,主要包括:主块/扩展块数、主块/逻辑块大小、平均文件大小(用于分配MetaInfo节点数量)、索引桶数等

(2) 块位图信息:

主要用于记录哪个块的使用情况

(3) 错误块位图信息:

主要用于记录哪个块出现了错误

具体的示意图如下:

TFS分布式文件系统学习总结(2)-文件系统文件结构详解

 

2、IndexHandle块索引文件信息:

IndexHandle块索引文件通过在块索引文件中维持着一个hash MetaInfo链表来快速定位到访问文件的MetaInfo,从MetaInfo的信息中定位到文件在物理块中的具体位置,而块索引文件中又维持着一个空闲MetaInfo的链表给新添加的文件挂hash操作。当块索引文件中的MetaInfo元信息用完后,会在当前块索引文件中通过增加文件空间的方式增加MetaInfo的数目达到动态扩容的目的。从MetaInfo的结构体信息中得知,MetaInfo是就是定位文件位置的,通过block_id以及以file_id为key在hash桶中就可以得到文件在block中的具体位置。整体示意图如下:

TFS分布式文件系统学习总结(2)-文件系统文件结构详解

 

相关文章: