阿弥陀佛
分类: 服务器与存储
2014-11-10 15:53:33
XFS文件系统中的文件用到的块由变长管理,每一个Extent描述了一个或多个连续的块。与那些把文件所有块都单独列出来的文件系统来说,extent大幅缩短了列表。有些文件系统用一个或多个面向块的位图管理空间分配——在XFS中这种结构被由一对组成的、面向Extent的结构替代了;每个文件系统分配组(AG)包含这样的一个结构。其中,一个用于索引未被使用的Extent的长度,另一个索引这些Extent的起始块。这种双索引策略使得文件系统在定位剩余空间中的Extent时十分高效。一个extent对应磁盘上一个连续的存储空间,XFS组织extent总共有两种方法:
1. 使用extent list,由于inode大小最大256B,所以extent的个数为19个,表示的范围有限。在磁盘上的每个extent的结构如下图所示,一个extent长度为128Bit.
下图就是使用extent list的方式组织文件的详细信息图。offset指文件内的偏移量,block 表示在磁盘上的存储位置,blocks代表这个extent代表的范围有多大。由于XFS中存在“hole”(也就是有一段地方并没有分配空间),所以每两个extent之间可能不是连续的。
2. 另一种方法就是采用B+ tree的方法来管理XFS的空闲空间。
下图是两层的B+ extent tree来管理空闲空间的。第一层存放了根节点的信息,根据bb_ptrs 可以找到下一层树节点在磁盘的存储位置,根据bb_keys可以定位到给定的数据页所在的位置即文件内部的 offset。