CN101567003B - 并行文件系统中资源的管理和分配方法 - Google Patents
并行文件系统中资源的管理和分配方法 Download PDFInfo
- Publication number
- CN101567003B CN101567003B CN2009100857061A CN200910085706A CN101567003B CN 101567003 B CN101567003 B CN 101567003B CN 2009100857061 A CN2009100857061 A CN 2009100857061A CN 200910085706 A CN200910085706 A CN 200910085706A CN 101567003 B CN101567003 B CN 101567003B
- Authority
- CN
- China
- Prior art keywords
- file system
- meta data
- information
- module
- disk
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Abstract
并行文件系统中资源的管理和分配方法属于SAN区域网络存储领域。其特征是:通过将存储资源分成多个分配组(Allocate Group,AG),并行分配,降低了单个分配组对其他分配组的影响,提高了并行文件系统的吞吐率、可靠性和管理效率,每个AG可以由单个磁盘分区或者多个磁盘按照Raid形式构成,多个AG之间也可以使用副本策略,通过存储资源的两层虚拟化,提高系统的性能、可用性和可靠性,每个分区使用B+树进行空间分配,并存储自己的B+树数据,与传统SAN文件系统相比降低了并行文件系统元数据服务器的压力,提高了分配效率,在通过B+树实现的目录树中索引文件元数据和目录元数据,保持文件元数据存储的局部性,与传统SAN文件系统相比提高了元数据访问的性能。
Description
技术领域
并行文件系统中资源的管理和分配方法属于存储区域网络并行文件系统领域,尤其涉及其中的资源管理与数据分布领域。
背景技术
存储区域网络(Storage Area Network,SAN)是一种连接外接存储设备和服务器的构架,采用包括光纤通道技术、磁盘阵列、磁带柜、光盘柜的各种技术进行实现,并广泛的应用到高性能计算等各个领域。该架构的特点是,连接到服务器的存储设备,将被操作系统视为直接连接的存储设备。SAN文件系统是一种基于存储区域网络设备的并行文件系统,Linux SAN文件系统对于Linux的虚拟文件系统(Virtual File System,VFS)是透明的,它允许多个客户端共享的直接访问在远程服务器上的文件,和访问本地文件相同,由并行文件系统管理和存储文件。当前,并行文件系统被广泛的应用,以达到高性能计算的要求。
SAN并行文件系统是基于SAN实现的面对高性能计算的并行文件系统。在对并行文件系统中对于资源的管理和分配是并行文件系统底层的主体结构,与并行文件系统的整体架构直接相关,影响到并行文件系统的性能、可扩展性、可靠性,属于并行文件系统的核心部分。随着存储网络规模的不断扩大,传统的分布式文件系统如NFS、AFS等已经无法满足大规模网络存储系统的高可扩展性要求,基于对象的文件系统如Lustre、PanFS等不能满足SAN应用环境,近来出现的SAN文件系统,如GPFS等,其空间管理采用基于块的分配方式。
发明内容
并行文件系统中资源的管理和分配方法属于SAN区域网络存储领域,其特征是:通过将存储资源分成多个分配组(Allocate Group,AG),并行分配,降低了单个分配组对其他分配组的影响,提高了并行文件系统的吞吐率、可靠性和管理效率,每个AG可以由单个磁盘分区或者多个磁盘按照Raid形式构成,多个AG之间也可以使用副本策略,通过存储资源的两层虚拟化,提高系统的性能、可用性和可靠性,每个分区使用B+树进行空间分配,并存储自己的B+树数据,与传统SAN文件系统相比降低了并行文件系统元数据服务器的压力,提高了分配效率,在通过B+树实现的目录树中索引文件元数据和目录元数据,保持文件元数据存储的局部性,与传统SAN文件系统相比提高了元数据访问的性能,
并行文件系统中资源的管理和分配方法,所述方法是一种Linux SAN并行文件系统资源的管理和分配方法,依次含有以下步骤:
步骤(1)构建一个所述的Linux SAN并行文件系统,以下简称并行文件系统;
所述并行文件系统是由不少于一个客户端,不少于一个存储设备,不少于一个元数据服务器MDS,和存储区域网络SAN组成,所述客户端和所述元数据服务器之间的TCP/IP网络是控制通路,传输元数据和控制信息,所述客户端、所述元数据服务器与起所述存储设备作用的磁盘阵列之间的所述SAN网络是数据通路,所述元数据服务器和所述客户端直接通过所述数据通路在所述磁盘阵列上进行数据访问,在所述存储设备上,有两种磁盘:一种是数据磁盘,至少存储数据、磁盘的状态和空间分配信息,另一种是元数据服务器MDS磁盘,至少存储元数据、所述数据磁盘的信息、所述元数据服务器MDS磁盘的信息、以及所述并行文件系统的结构、状态信息,其中:
所述数据磁盘分为至少一个分配组AG,而每个所述分配组又至少分为两 个磁盘分区,其中,第一个所述磁盘分区包括保留区、分配组超级块ASB、第一B+树(1)的和第二B+树(2)的根节点Tree Root,其中,所述分配组超级块ASB包括分配组号AGN、设备标识DID、第一B+树(1)的和第二B+树(2)的根节点的地址B+Tree Root[2]、所述分配组AG状态信息AG State Information、以及所述两个B+树空闲列表Free List,简称FL,在所述的两个B+树中,每个节点是所述分配组AG中数据存储和检索的一段基本数据空间单元,简称一个块,所述两个B+树的索引中的每一项是由所述分配组AG的多个连续空闲块组成的一段空闲空间,所述分配组AG上的所述每段空闲空间通过所述两个B+树中的所对应的区间Extent来索引,每个所述区间Extent由两项组成:第一项是所述该段空闲空间所在的所述磁盘分区的起始块号start,第二项是所述该段空闲空间覆盖的块的数量,用该段空闲空间的长度Len表示,初始时,所有空闲空间的索引Extent全部保存在所述两个B+树中,其中所述第一B+树(1)用所述区间Extent的起始块号作为键值,所述第二B+树(2)用所述区间Extent的第二项所述该段空间的长度作为键值,在所述分配组超级块ASB中,所述分配组AG的状态信息State Information是指所述分配组AG的空闲空间或非空闲空间,所述空闲列表Free List由所述一个块地址数组和三个变量组成,其中包括:所述空闲空间组成的可分配块在所述数组中的起始位置first,用地址标识,下同,末尾位置last,可分配的块的个数count,所述的空闲列表Free List所管理的块由所述两个B+树进行分配和释放,除了所述第一磁盘分区外,其余每个磁盘分区包括:保留区和超级块SB,该超级块SB包括:所述的AGN和DID;
所述元数据服务器MDS磁盘包括:保留区、主超级块MSB,位图Bitmap,日志Journal,分配组链表信息AGLI以及目录树根节点Inode Root;
所述主超级块MSB包括:文件系统状态File System State,日志地址Journal Address,AG链表根节点AGLH的地址AGIP,以及目录树根节点地址 Inode Address,其中,所述文件系统状态File System State包含文件系统的块大小Block Size、挂载标识Mounted Flag、元数据服务器MDS磁盘空间大小MDS Block Size以及空闲空间大小MDS Free Size,所述分配组AG链表根节点AGLH的地址AGIP包括:所述分配组链表根节点AGLH,AG链表位图AGLB,以及所述分配组链表AG List,其中,所述分配组链表根节点AGLH包括分配组总数AG Count、所有AG的可用空间大小AGs Total Blocks以及空闲空间大小AGs Free Blocks,所述分配组链表AG List由AG信息AGI以数组的形式组成,每个所述AG信息AGI包含一个分配组AG的信息,其中,包括分配组号AGN,不少于一个的分配中磁盘分区的设备标识DID,每个所述AG的信息AGI,线性且连续保存在所述元数据服务器MDS磁盘上,位置由所述AG链表位图AGLB所索引,所述目录树根节点Inode Root由目录B+树来管理的,所述目录B+树索引的每一项是一个节点Inode,所有文件和目录都是由Inode表示,该Inode的键值是由所述文件或者目录所在父目录的文件名的哈希值、所述文件或者目录的名称的哈希值、所述文件或者目录的类型Type组成,所述类型Type包括:文件类型、目录类型、元数据类型,其中,所述文件类型的Inode用于存储文件的所述布局信息,即从所述管理空闲空间的两个B+树中分配出来的区间Extent,所述目录类型的Inode用于存储包含在当前目录下的所述文件的文件名和目录的目录名,元数据类型的Inode包含该节点Inode对应的文件或者目录的元数据信息,该节点Inode对应的文件或者目录的Inode地址,以及该节点Inode对应的文件或者目录的Inode类型Type,其中所述的元数据信息是指由IEEF制定的POSIX标准定义的元数据信息;
在所述客户端设有:客户端模块和交互层模块,其中,所述客户端模块设有虚拟文件系统VFS层的调用接口,并进行数据和元数据的缓存,对于所述VFS层的函数调用,则按以下方式判断:若是和所述元数据服务器的交互操作, 则生成相应的请求通过函数调用发送到底层的所述交互层模块,所述函数调用包括该文件系统客户端使用的所有请求操作,以及当前请求的索引,若是对所述数据磁盘进行数据访问的操作,则生成相应的数据访问请求发送到底层的SAN驱动模块,所述交互层模块通过远程过程调用协议实现所述客户端和所述元数据服务器MDS之间的通信;
在所述元数据服务器中,设有SAN文件系统管理模块,简称管理层模块,交互层模块和元数据文件系统模块,其中:
所述交互层模块和所述管理层模块相连,当向所述管理层模块发送以下各种请求:系统状态管理请求,操作状态管理请求,元数据访问请求以及空间管理请求,所述管理层模块则把生成的相应请求发送到所述元数据文件系统模块中;
元数据文件系统模块设有以下接口:
Linux内核中的本地文件系统的内核调用接口,接收所述元数据访问的请求;
元数据文件系统提供第一调用接口,供所述管理层模块调用,其中管理的信息包括:空闲空间的大小、AGN、起始地址以及相应的区间Extent链表;
元数据文件系统模块还设有第二模块接口,从所述元数据服务器的SAN驱动模块中调用需要释放的区间Extent,以及所述并行文件系统的包括主超级块MSB在内存中的数据结构MSB_Core的指针i_private,以及以下数据结构:MSB_Core,AGLH_Core,AGLH,AGI_Core,以及AGI,其中:
MSB_Core包括目录树根节点Inode_Root和所述AGLH内存中所述数据结构AGLH_Core的指针AGLH_point;
AGLH_Core包括AGLH在所述元数据服务器MDS磁盘的地址AGLH_disk_piont和所述AGI以下两个链表指针:AGI链表指针AGI_List_piont 和所述AGI哈希表指针AGI_hash_piont;
AGI_Core包括:所述AGI在所述元数据服务器MDS磁盘的地址AGI_disk_piont,所述AGI链表指针AGI_List_piont,AGLI_Core指针AGLI_Core_piont,可访问磁盘分区在内存中的数据结构的数组Block_Device_Array,AGLI_Core是AGLI在内存中的数据结构所述两个B+树在数据磁盘上地址所述空闲空间列表FreeList在数据磁盘上的地址Free_List,以及该AG的磁盘分区的所述DID在内存中的数组Device_Lable_List;
AGI,包括所述AGN和DID;
步骤(2)按以下步骤启动所述并行文件系统:
步骤(2.1)初始化所述元数据服务器MDS磁盘;
步骤(2.2)加载所述元数据服务器需要的所述各种模块,挂载所述元数据服务器MDS磁盘;
步骤(2.3)在所述元数据服务器MDS磁盘上加载新的AG;
步骤(3)所述并行文件系统按以下步骤响应客户端应用程序的读写请求;
步骤(3.1)所述并行文件系统按以下步骤响应一个客户端应用程序的读请求:
步骤(3.1.1)客户端的应用程序发出读请求到所述客户端模块;
步骤(3.1.1.1)所述客户端模块首先查看是否缓存了相应文件的元数据,如果缓存了,直接跳到步骤(3.1.3);
步骤(3.1.1.2)所述客户端模块如果没有缓存相应元数据,则通过所述交互层模块和所述文件系统管理层模块,将元数据访问请求发送到所述元数据文件系统模块;
步骤(3.1.2)所述客户端模块接受元数据访问请求后,进行如下处理;
步骤(3.1.2.1)所述元数据文件系统模块首先检查此元数据是否被缓 存,如果缓存了,跳转到步骤(3.1.2.2.3);
步骤(3.1.2.2)所述元数据文件系统模块首先访问所述元数据服务器MDS磁盘;
步骤(3.1.2.2.1)所述元数据文件系统模块根据被访问文件的路径名生成相应的所述目录树B+树的键值;
步骤(3.1.2.2.2)所述元数据文件系统模块读取所述目录树B+树的根节点,根据所述键值,查找对应文件的元数据;
步骤(3.1.2.2.3)所述元数据文件系统模块读取此文件的布局信息,并通过所述管理层模块、所述交互层模块返回给所述客户端模块;
步骤(3.1.3)所述客户端模块获取文件布局信息,并读取数据信息,
步骤(3.1.3.1)所述客户端模块分析获取的文件布局信息,并查找需要的数据所在的区间Extent信息;
步骤(3.1.3.2)所述客户端模块通过所述区间Extent信息获取所需要数据所在的AG;
步骤(3.1.3.2.1)所述客户端模块检查本地设备列表是否缓存了所要访问的AG的所有数据磁盘的DID,如果缓存了所述数据直接跳到步骤(3.1.3.3);
步骤(3.1.3.2.2)如果没有所需设备的DID,那么所述客户端模块通过所述交互层模块、所述管理层模块发送相应AG的设备列表信息请求到所述元数据文件系统模块,获取属于相应AG的所有磁盘的DID;
步骤(3.1.3.2.3)所述客户端模块通过已获得的DID,扫描所有磁盘的DID,找到与已获得的DID相同的属于所述相应AG的所有磁盘;
步骤(3.1.3.2.4)所述客户端模块通过所述SAN驱动模块访问相应AG的所有磁盘;
步骤(3.1.3.3)所述客户端模块在AG的磁盘上读取相应的数据信息;
步骤(3.1.4)所述客户端模块将读取的数据返回给应用程序,结束此次读请求;
步骤(3.2)所述并行文件系按以下步骤统响应一个客户端应用程序的写请求:
步骤(3.2.1)所述客户端模块生成文件写请求;
步骤(3.2.1.1)所述客户端模块首先检查已经获得文件元数据信息是否有空闲空间可以使用,如果没有跳转到步骤(3.2.1.3);
步骤(3.2.1.2)所述客户端模块检查文件元数据信息空闲空间是否够用,如果够用,调转到步骤(3.2.4);
步骤(3.2.1.3)如果文件元数据信息空闲空间不够用,所述客户端模块生成相应的文件空间申请请求通过所述交互层模块和所述管理层模块发送到所述元数据文件系统模块,同时使用文件元数据信息已有的空闲空间;
步骤(3.2.2)所述元数据文件系统模块根据文件的写请求生成相应的空间分配请求进行操作;
步骤(3.2.2.1)所述元数据文件系统模块首先检查当前的整个文件系统的空闲空间是否满足所需要的空闲空间大小,如果不满足,则返回错误,终止上述写请求;
步骤(3.2.2.2)所述元数据文件系统模块检查空闲空间分配请求的相应的AG是否满足所需要的空闲空间大小,如果满足,选择此AG进行空间分配,否则选择一个其他可以满足此空闲空间请求的AG,跳转到步骤(3.2.3);
步骤(3.2.2.3)如果所有单个AG都不满足上述空闲空间请求,所述元数据文件系统模块选取多个AG进行空间分配,并根据每个AG的大小生成相应的空间请求;
步骤(3.2.3)所述元数据文件系统模块选取AG进行空间分配;
步骤(3.2.3.1)所述元数据文件系统模块查看当前AG的空闲空间是否满足需要分配的大小;
步骤(3.2.3.2)所述元数据文件系统模块检查当前AG的Free List是否有满足空闲空间B+树进行空间管理所需要的空间;
步骤(3.2.3.3)所述元数据文件系统模块根据分配请求查找当前AG的对应的空闲空间B+树,找到符合的Extent,在当前B+树中删除或添加相应的Extent;
步骤(3.2.3.4)所述元数据文件系统模块同步两个空闲空间B+树,进行两个空闲空间B+树平衡;
步骤(3.2.3.5)所述元数据文件系统模块修改当前AG和MDS上的ASB和MSB,记录空间变化;
步骤(3.2.3.6)所述元数据文件系统模块将此区间Extent的信息计入元数据服务器MDS磁盘的响应的文件的Inode,但是不修改该文件的长度信息;
步骤(3.2.3.7)所述元数据文件系统模块将得到的区间Extent填入相应的返回列表,并将所述列表通过交互层模块发送到所述客户端模块;步骤(3.2.4)所述客户端模块获得文件空闲空间信息,开始写入数据信息;
步骤(3.2.4.1)所述客户端模块分析获取的文件空闲空间信息,并查找需要的数据所在的区间Extent;
步骤(3.2.4.2)所述客户端模块通过区间Extent信息获取所需要数据 所在的AG;
步骤(3.2.4.2.1)所述客户端模块检查本地设备列表是否缓存了所要访问的AG的所有磁盘的DID,如果缓存了直接跳到步骤(3.2.4.3);
步骤(3.2.4.2.2)如果没有所需设备的DID,所述客户端模块那么发送相应AG的磁盘列表信息请求到MDS,请求相应的磁盘的DID;
步骤(3.2.4.2.3)所述客户端模块通过已获得的DID,扫描所有磁盘的DID,找到与已获得的DID相同的属于所述相应AG的所有磁盘;
步骤(3.2.4.2.4)所述客户端模块通过SAN驱动模块访问相应AG的所有磁盘;
步骤(3.2.4.3)所述客户端模块在相应的AG的磁盘上写入相应的数据;
步骤(3.2.5)元数据服务器MDS根据客户端的访问信息,修改相应文件的Inode中的元数据;
步骤(3.2.5.1)如果客户端继续写,跳转到步骤(3.2.1.1);
步骤(3.2.5.2)如果数据写完,所述客户端模块将已经使用的新生成的文件元数据信息和文件空闲空间信息通过所述交互层模块发送给所述管理层模块;
步骤(3.2.5.3)如果有文件空闲空间信息,所述管理层模块发送空间释放请求到所述元数据文件系统模块进行空间释放;
步骤(3.2.5.3.1)所述元数据文件系统模块检查Free List是否有满足空闲空间B+树进行空间管理所需要的空间;
步骤(3.2.5.3.2)所述元数据文件系统模块根据分配请求查找对应的空闲空间B+树中相应的区间Extent的插入位置,进行删除或添加相应的区间Extent;
步骤(3.2.5.3.3)所述元数据文件系统模块同步两个空闲空间B+树,进行空闲空间B+树平衡;
步骤(3.2.5.3.4)所述元数据文件系统模块修改对应AG的所述ASB和MSB上的空间信息;
步骤(3.2.5.4所述元数据文件系统模块修改相应文件的Inode信息,将文件的大小信息更新为当前的返回值;
步骤(3.2.6)所述客户端模块返回操作完成信息到应用程序,结束所述写请求。
当所述分配组只有一个磁盘分区时,只采用所述第一个磁盘分区。
本发明降低了并行文件系统元数据服务器的压力,提高了分配效率,在通过B+树实现的目录树中索引文件元数据和目录元数据,保持文件元数据存储的局部性,与传统SAN文件系统相比提高了元数据访问的性能。
附图说明
图1.以4096字节作为一个Block的MDS磁盘数据布局
图2.以4096字节为一个Block的AG数据布局
图3.并行文件系统的软件结构图
图4.元数据文件系统模块数据结构图
图5.文件系统响应客户端写请求流程图
图6.文件系统响应客户端读请求流程图
图7.文件系统硬件结构图
实施步骤
1、并行文件系统中资源的管理和分配方法,其特征在于,所述方法是一种Linux SAN并行文件系统资源的管理和分配方法,依次含有以下步骤:
步骤(1)构建一个所述的Linux SAN并行文件系统,以下简称并行文件系统;
所述并行文件系统是由不少于一个客户端,不少于一个存储设备,不少于一个元数据服务器MDS,和存储区域网络SAN组成,所述客户端和所述元数据服务器之间的TCP/IP网络是控制通路,传输元数据和控制信息,所述客户端、所述元数据服务器与起所述存储设备作用的磁盘阵列之间的所述SAN网络是数据通路,所述元数据服务器和所述客户端直接通过所述数据通路在所述磁盘阵列上进行数据访问,在所述存储设备上,有两种磁盘:一种是数据磁盘,至少存储数据、磁盘的状态和空间分配信息,另一种是元数据服务器MDS磁盘,至少存储元数据、所述数据磁盘的信息、所述元数据服务器MDS磁盘的信息、以及所述并行文件系统的结构、状态信息,其中:
所述数据磁盘分为至少一个分配组AG,而每个所述分配组又至少分为两个磁盘分区,其中,第一个所述磁盘分区包括保留区、分配组超级块ASB、第一B+树(1)的和第二B+树(2)的根节点Tree Root,其中,所述分配组超级块ASB包括分配组号AGN、设备标识DID、第一B+树(1)的和第二B+树(2)的根节点的地址B+Tree Root[2]、所述分配组AG状态信息AG State Information、以及所述两个B+树空闲列表Free List,简称FL,在所述的两个B+树中,每个节点是所述分配组AG中数据存储和检索的一段基本数据空间单元,简称一个块,所述两个B+树的索引中的每一项是由所述分配组AG的多个连续空闲块组成的一段空闲空间,所述分配组AG上的所述每段空闲空间通过所述两个B+树中的所对应的区间Extent来索引,每个所述区间Extent由两项组成:第一项是所述 该段空闲空间所在的所述磁盘分区的起始块号start,第二项是所述该段空闲空间覆盖的块的数量,用该段空闲空间的长度Len表示,初始时,所有空闲空间的索引Extent全部保存在所述两个B+树中,其中所述第一B+树(1)用所述区间Extent的起始块号作为键值,所述第二B+树(2)用所述区间Extent的第二项所述该段空间的长度作为键值,在所述分配组超级块ASB中,所述分配组AG的状态信息State Information是指所述分配组AG的空闲空间或非空闲空间,所述空闲列表Free List由一个块地址数组和三个变量组成,其中包括:所述空闲空间组成的可分配块在所述数组中的起始位置first,用地址标识,下同,末尾位置last,可分配的块的个数count,所述的空闲列表Free List所管理的块由所述两个B+树进行分配和释放,除了所述第一个磁盘分区外,其余每个磁盘分区包括:保留区和超级块SB,该超级块SB包括:所述的AGN和DID;
所述元数据服务器MDS磁盘包括:保留区、主超级块MSB,位图Bitmap,日志Journal,分配组链表信息AGLI以及目录树根节点Inode Root;
所述主超级块MSB包括:文件系统状态File System State,日志地址Journal Address,AG链表根节点AGLH的地址AGIP,以及目录树根节点地址Inode Address,其中,所述文件系统状态File System State包含文件系统的块大小Block Size、挂载标识Mounted Flag、元数据服务器MDS磁盘空间大小MDS Block Size以及空闲空间大小MDS Free Size,所述分配组AG链表根节点AGLH的地址AGIP包括:所述分配组链表根节点AGLH,AG链表位图AGLB,以及所述分配组链表AG List,其中,所述分配组链表根节点AGLH包括分配组总数AGCount、所有AG的可用空间大小AGs Total Blocks以及空闲空间大小AGs Free Blocks,所述分配组链表AG List由AG信息AGI以数组的形式组成,每个所述AG信息AGI包含一个分配组AG的信息,其中,包括分配组号AGN,不少于一个的分配中磁盘分区的设备标识DID,每个所述AG的信息AGI,线性且连 续保存在所述元数据服务器MDS磁盘上,位置由所述AG链表位图AGLB所索引,所述目录树根节点Inode Root由目录B+树来管理的,所述目录B+树索引的每一项是一个节点Inode,所有文件和目录都是由Inode表示,该Inode的键值是由所述文件或者目录所在父目录的文件名的哈希值、所述文件或者目录的名称的哈希值、所述文件或者目录的类型Type组成,所述类型Type包括:文件类型、目录类型、元数据类型,其中,所述文件类型的Inode用于存储文件的布局信息,即从管理空闲空间的两个B+树中分配出来的区间Extent,所述目录类型的Inode用于存储包含在当前目录下的所述文件的文件名和目录的目录名,元数据类型的Inode包含该节点Inode对应的文件或者目录的元数据信息,该节点Inode对应的文件或者目录的Inode地址,以及该节点Inode对应的文件或者目录的Inode类型Type,其中所述的元数据信息是指由IEEF制定的POSIX标准定义的元数据信息;
在所述客户端设有:客户端模块和交互层模块,其中,所述客户端模块设有虚拟文件系统VFS层的调用接口,并进行数据和元数据的缓存,对于所述VFS层的函数调用,则按以下方式判断:若是和所述元数据服务器的交互操作,则生成相应的请求通过函数调用发送到底层的所述交互层模块,所述函数调用包括该文件系统客户端使用的所有请求操作,以及当前请求的索引,若是对所述数据磁盘进行数据访问的操作,则生成相应的数据访问请求发送到底层的SAN驱动模块,所述交互层模块通过远程过程调用协议实现所述客户端和所述元数据服务器MDS之间的通信;
在所述元数据服务器中,设有SAN文件系统管理模块,简称管理层模块,交互层模块和元数据文件系统模块,其中:
所述交互层模块和所述管理层模块相连,当向所述管理层模块发送以下各种请求:系统状态管理请求,操作状态管理请求,元数据访问请求以及空间 管理请求,所述管理层模块则把生成的相应请求发送到所述元数据文件系统模块中;
元数据文件系统模块设有以下接口:
Linux内核中的本地文件系统的内核调用接口,接收所述元数据访问的请求;
元数据文件系统提供第一调用接口,供所述管理层模块调用,其中管理的信息包括:空闲空间的大小、AGN、起始地址以及相应的区间Extent链表;
元数据文件系统模块还设有第二模块接口,从所述元数据服务器的SAN驱动模块中调用需要释放的区间Extent,以及所述并行文件系统的包括主超级块MSB在内存中的数据结构MSB_Core的指针i_private,以及以下数据结构:MSB_Core,AGLH_Core,AGLH,AGI_Core,以及AGI,其中:
MSB_Core包括目录树根节点Inode_Root和所述AGLH内存中数据结构AGLH_Core的指针AGLH_point;
AGLH_Core包括AGLH在所述元数据服务器MDS磁盘的地址AGLH_disk_piont和所述AGI以下两个链表指针:AGI链表指针AGI_List_piont和所述AGI哈希表指针AGI_hash_piont;
AGI_Core包括:所述AGI在所述元数据服务器MDS磁盘的地址AGI_disk_piont,所述AGI链表指针AGI_List_piont,AGLH_Core指针AGLI_Core_piont,可访问磁盘分区在内存中的数据结构的数组Block_Device_Array,所述两个B+树在数据磁盘上地址,所述空闲空间列表FreeList在数据磁盘上的地址Free_List,以及该AG的磁盘分区的所述DID在内存中的数组Device_Lable_List;
AGI,包括所述AGN和DID;
除上述模块,另外实现了两个用户态工具,分别是MDS磁盘初始化工具mkmds和AGADD工具addag,MDS磁盘初始化工具mkmds运行在MDS服务器的用户态,进行元数据服务器MDS磁盘的格式化,输入参数为MDS磁盘设备文件名,将图1所示的元数据信息写入元数据服务器MDS磁盘,addag运行在MDS服务器的用户态,输入参数为加载的AG的磁盘分区设备文件名、MDS磁盘设备文件名,根据图2所示的数据磁盘分区信息写入数据磁盘分区;
步骤(2)SAN并行文件系统的启动分为以下几个步骤:
步骤(2.1)通过MDS磁盘初始化工具mkmds,初始化MDS磁盘;
步骤(2.2)加载MDS需要的管理层模块、交互层模块和元数据文件系统模块,通过mount命令挂载MDS磁盘;
步骤(2.2.1)MDS读取AGLH数据块的信息,以确定是否此并行文件系统是否完整,如果不完整,将文件系统的状态设置为不一致状态;
步骤(2.2.2)根据AGLH信息AGLB,扫描AG List,将上次文件系统卸载前已加入的设备添加到并行文件系统;
步骤(2.2.2.1)根据AGLH、AGLB信息,读取AG List中的AGI信息,找到文件系统上次卸载前加载的每一个AG;
步骤(2.2.2.2)从AG链表中,选出一个准备添加的AG,初始化此AG在内存相应的数据结构AGI_Core,读取相应的AGN和AG中每个设备的DID,每个DID和AGN可以组成一个标识字符串,用于标识一个相应的设备;
步骤(2.2.2.3)根据获取的标识字符串,扫描SCSI设备队列中的每个未使用设备,将和上述标识字符串匹配的设备添加到相应的AGI_Core的Block_Device_Array结构中;
步骤(2.2.2.4)当一个AG的所有设备加载完毕后以后,初始化此AG的B+数;
步骤(2.2.2.5)如果找到相应的匹配设备,继续加载其他设备,等文件系统启动完毕后,返回没有匹配到的设备的信息;
步骤(2.2.3)如果文件系统被设置为不一致状态,停止并行文件系统加载,返回加载错误;
步骤(2.3)在MDS加载新AG;
步骤(2.3.1)获取磁盘分区信息和需要创建的AG信息;
步骤(2.3.2)addag和元数据文件系统模块交互,从元数据文件系统模块获取唯一的AGN;
步骤(2.3.2.1)AG向MDS发出一个请求,需要MDS返回一个AGN,
步骤(2.3.2.2)元数据文件系统模块从AGLH中获取当前的AG的信息,如果找到一个未使用的AGN,则将其返回给AGADD工具,否则返回加载AG失败信息;
步骤(2.3.3)初始化AG磁盘分区;
步骤(2.3.3.1)将每个磁盘分区信息和AGN等相关信息写入此AG的每个磁盘分区的SB中;
步骤(2.3.3.2)初始化AG的MSB信息,并根据AG信息初始化管理空闲空间的两个B+树;
步骤(2.3.3.3)将由AGN和DID组成的标志字符串传输给元数据文件系统模块;
步骤(2.3.4)元数据文件系统模块为AGI初始化数据结构AGI_Core;
步骤(2.3.4.1)根据接收到的AG标识字符串,扫描所有磁盘分区,找到符合的磁盘分区,并检查其ASB是否正确;
步骤(2.3.4.2)根据读取的ASB的信息,初始化AGI_Core,并将此结构加载到AG链表,修正并行文件系统当前的空间信息,如所有空间大小、剩余空间大小;
步骤(2.3.4.3)初始化此AG在MDS的磁盘上数据结构,将所添加的AG的磁盘信息写入AG List,修正MDS磁盘上的AG信息,包括AGLB和AGLH的相应的信息;
步骤(2.3.4.4)将相应的AGN标识为已用;
步骤(2.4)AG加载完成,空间分配模块运行,SAN并行文件系统转入正常运行状态;
步骤(3)所述并行文件系统按以下步骤响应客户端应用程序的读写请求;
步骤(3.1)所述并行文件系统按以下步骤响应一个客户端应用程序的读请求:
步骤(3.1.1)客户端的应用程序发出读请求到所述客户端模块;
步骤(3.1.1.1)所述客户端模块首先查看是否缓存了相应文件的元数据,如果缓存了,直接跳到步骤(3.1.3);
步骤(3.1.1.2)所述客户端模块如果没有缓存相应元数据,则通过所述交互层模块和所述文件系统管理层模块,将元数据访问请求发送到所述元数据文件系统模块;
步骤(3.1.2)所述客户端模块接受元数据访问请求后,进行如下处理;
步骤(3.1.2.1)所述元数据文件系统模块首先检查此元数据是否被缓存,如果缓存了,跳转到步骤(3.1.2.2.3);
步骤(3.1.2.2)所述元数据文件系统模块首先访问所述元数据服务器MDS磁盘;
步骤(3.1.2.2.1)所述元数据文件系统模块根据被访问文件的路径名生成相应的所述目录树B+树的键值;
步骤(3.1.2.2.2)所述元数据文件系统模块读取所述目录树B+树的根节点,根据所述键值,查找对应文件的元数据;
步骤(3.1.2.2.3)所述元数据文件系统模块读取此文件的布局信息,并通过所述管理层模块、所述交互层模块返回给所述客户端模块;
步骤(3.1.3)所述客户端模块获取文件布局信息,并读取数据信息,
步骤(3.1.3.1)所述客户端模块分析获取的文件布局信息,并查找需要的数据所在的区间Extent信息;
步骤(3.1.3.2)所述客户端模块通过所述区间Extent信息获取所需要数据所在的AG;
步骤(3.1.3.2.1)所述客户端模块检查本地设备列表是否缓存了所要访问的AG的所有数据磁盘的DID,如果缓存了所述数据直接跳到步骤(3.1.3.3);
步骤(3.1.3.2.2)如果没有所需设备的DID,那么所述客户端模块通过所述交互层模块、所述管理层模块发送相应AG的设备列表信息请求到所述元数据文件系统模块,获取属于相应AG的所有磁盘的DID;
步骤(3.1.3.2.3)所述客户端模块通过已获得的DID,扫描所有磁盘的DID,找到与已获得的DID相同的属于所述相应AG的所有磁盘;
步骤(3.1.3.2.4)所述客户端模块通过所述SAN驱动模块访问相应AG的所有磁盘;
步骤(3.1.3.3)所述客户端模块在AG的磁盘上读取相应的数据信息;
步骤(3.1.4)所述客户端模块将读取的数据返回给应用程序,结束此次读请求;
步骤(3.2)所述并行文件系按以下步骤统响应一个客户端应用程序的写请求:
步骤(3.2.1)所述客户端模块生成文件写请求;
步骤(3.2.1.1)所述客户端模块首先检查已经获得文件元数据信息是否有空闲空间可以使用,如果没有跳转到步骤(3.2.1.3);
步骤(3.2.1.2)所述客户端模块检查文件元数据信息空闲空间是否够用,如果够用,调转到步骤(3.2.4);
步骤(3.2.1.3)如果文件元数据信息空闲空间不够用,所述客户端模块生成相应的文件空间申请请求通过所述交互层模块和所述管理层模块发送到所述元数据文件系统模块,同时使用文件元数据信息已有的空闲空间;
步骤(3.2.2)所述元数据文件系统模块根据文件的写请求生成相应的空间分配请求进行操作;
步骤(3.2.2.1)所述元数据文件系统模块首先检查当前的整个文件系统的空闲空间是否满足所需要的空闲空间大小,如果不满足,则返回错误,终止上述写请求;
步骤(3.2.2.2)所述元数据文件系统模块检查空闲空间分配请求的相应的AG是否满足所需要的空闲空间大小,如果满足,选择此AG进行空间分配,否则选择一个其他可以满足此空闲空间请求的AG,跳转到步骤(3.2.3);
步骤(3.2.2.3)如果所有单个AG都不满足上述空闲空间请求,所述元数据文件系统模块选取多个AG进行空间分配,并根据每个AG的大小生成相应的空间请求;
步骤(3.2.3)所述元数据文件系统模块选取AG进行空间分配;
步骤(3.2.3.1)所述元数据文件系统模块查看当前AG的空闲空间是否满足需要分配的大小;
步骤(3.2.3.2)所述元数据文件系统模块检查当前AG的Free List是否有满足空闲空间B+树进行空间管理所需要的空间;
步骤(3.2.3.3)所述元数据文件系统模块根据分配请求查找当前AG的对应的空闲空间B+树,找到符合的Extent,需要多个Extent,在当前B+树中删除或添加相应的Extent;
步骤(3.2.3.4)所述元数据文件系统模块同步两个空闲空间B+树,进行两个空闲空间B+树平衡;
步骤(3.2.3.5)所述元数据文件系统模块修改当前AG和MDS上的ASB和MSB,记录空间变化;
步骤(3.2.3.6)所述元数据文件系统模块将此区间Extent的信息计入元数据服务器MDS磁盘的响应的文件的Inode,但是不修改该文件的长度信息;
步骤(3.2.3.7)所述元数据文件系统模块将得到的区间Extent填入相应的返回列表,并将所述列表通过交互层模块发送到所述客户端模块;
步骤(3.2.4)所述客户端模块获得文件空闲空间信息,开始写入数据信息;
步骤(3.2.4.1)所述客户端模块分析获取的文件空闲空间信息,并查找需要的数据所在的区间Extent;
步骤(3.2.4.2)所述客户端模块通过区间Extent信息获取所需要数据所在的AG;
步骤(3.2.4.2.1)所述客户端模块检查本地设备列表是否缓存了所要访问的AG的所有磁盘的DID,如果缓存了直接跳到步骤(3.2.4.3);
步骤(3.2.4.2.2)如果没有所需设备的DID,所述客户端模块那么发送相应AG的磁盘列表信息请求到MDS,请求相应的磁盘的DID;
步骤(3.2.4.2.3)所述客户端模块通过已获得的DID,扫描所有磁盘的DID,找到与已获得的DID相同的属于所述相应AG的所有磁盘;
步骤(3.2.4.2.4)所述客户端模块通过SAN驱动模块访问相应AG的所有磁盘;
步骤(3.2.4.3)所述客户端模块在相应的AG的磁盘上写入相应的数据;
步骤(3.2.5)元数据服务器MDS根据客户端的访问信息,修改相应文件的Inode中的元数据;
步骤(3.2.5.1)如果客户端继续写,跳转到步骤(3.2.1.1);
步骤(3.2.5.2)如果数据写完,所述客户端模块将已经使用的新生成的文件元数据信息和文件空闲空间信息通过所述交互层模块发送给所述管理层模块;
步骤(3.2.5.3)如果有文件空闲空间信息,所述管理层模块发送空间释放请求到所述元数据文件系统模块进行空间释放;
步骤(3.2.5.3.1)所述元数据文件系统模块检查Free List是否有满足空闲空间B+树进行空间管理所需要的空间;
步骤(3.2.5.3.2)所述元数据文件系统模块根据分配请求查找对应的空闲空间B+树中相应的区间Extent的插入位置,进行删除或添加相应的区间Extent;
步骤(3.2.5.3.3)所述元数据文件系统模块同步两个空闲空间B+树,进行空闲空间B+树平衡;
步骤(3.2.5.3.4)所述元数据文件系统模块修改对应AG的所述ASB 和MSB上的空间信息;
步骤(3.2.5.4所述元数据文件系统模块修改相应文件的Inode信息,将文件的大小信息更新为当前的返回值;
步骤(3.2.6)所述客户端模块返回操作完成信息到应用程序,结束所述写请求。
当所述分配组只有一个磁盘分区时,只采用所述第一个磁盘分区。
Claims (2)
1.并行文件系统中资源的管理和分配方法,其特征在于,所述方法是一种Linux SAN并行文件系统资源的管理和分配方法,依次含有以下步骤:
步骤(1)构建一个所述的Linux SAN并行文件系统,以下简称并行文件系统;
所述并行文件系统是由不少于一个客户端,不少于一个存储设备,不少于一个元数据服务器MDS,和存储区域网络SAN组成,所述客户端和所述元数据服务器之间的TCP/IP网络是控制通路,传输元数据和控制信息,所述客户端、所述元数据服务器与起所述存储设备作用的磁盘阵列之间的所述SAN网络是数据通路,所述元数据服务器和所述客户端直接通过所述数据通路在所述磁盘阵列上进行数据访问,在所述存储设备上,有两种磁盘:一种是数据磁盘,至少存储数据、磁盘的状态和空间分配信息,另一种是元数据服务器MDS磁盘,至少存储元数据、所述数据磁盘的信息、所述元数据服务器MDS磁盘的信息、以及所述并行文件系统的结构、状态信息,其中:
所述数据磁盘分为至少一个分配组AG,而每个所述分配组又至少分为两个磁盘分区,其中,第一个所述磁盘分区包括保留区、分配组超级块ASB、第一B+树(1)的和第二B+树(2)的根节点Tree Root,其中,所述分配组超级块ASB包括分配组号AGN、设备标识DID、第一B+树(1)的和第二B+树(2)的根节点的地址B+Tree Root[2]、所述分配组AG状态信息AG State Information、以及所述两个B+树空闲列表Free List,简称FL,在所述的两个B+树中,每个节点是所述分配组AG中数据存储和检索的一段基本数据空间单元,简称一个块,所述两个B+树的索引中的每一项是由所述分配组AG的多个连续空闲块组成的一段空闲空间,所述分配组AG上的所述每段空闲空间通过所述两个B+树中的所对应的区间Extent来索引,每个所述区间Extent由两项组成:第一项是所述 该段空闲空间所在的所述磁盘分区的起始块号start,第二项是所述该段空闲空间覆盖的块的数量,用该段空闲空间的长度Len表示,初始时,所有空闲空间的索引Extent全部保存在所述两个B+树中,其中所述第一B+树(1)用所述区间Extent的起始块号作为键值,所述第二B+树(2)用所述区间Extent的第二项所述该段空间的长度作为键值,在所述分配组超级块ASB中,所述分配组AG的状态信息State Information是指所述分配组AG的空闲空间或非空闲空间,所述空闲列表Free List由一个块地址数组和三个变量组成,其中包括:所述空闲空间组成的可分配块在所述数组中的起始位置first,用地址标识,下同,末尾位置last,可分配的块的个数count,所述的空闲列表Free List所管理的块由所述两个B+树进行分配和释放,除了所述第一个磁盘分区外,其余每个磁盘分区包括:保留区和超级块SB,该超级块SB包括:所述的AGN和DID;
所述元数据服务器MDS磁盘包括:保留区、主超级块MSB,位图Bitmap,日志Journal,分配组链表信息AGLI以及目录树根节点Inode Root;
所述主超级块MSB包括:文件系统状态File System State,日志地址Journal Address,AG链表根节点AGLH的地址AGIP,以及目录树根节点地址Inode Address,其中,所述文件系统状态File System State包含文件系统的块大小Block Size、挂载标识Mounted Flag、元数据服务器MDS磁盘空间大小MDS Block Size以及空闲空间大小MDS Free Size,所述分配组AG链表根节点AGLH的地址AGIP包括:所述分配组链表根节点AGLH,AG链表位图AGLB,以及所述分配组链表AG List,其中,所述分配组链表根节点AGLH包括分配组总数AGCount、所有AG的可用空间大小AGs Total Blocks以及空闲空间大小AGs Free Blocks,所述分配组链表AG List由AG信息AGI以数组的形式组成,每个所述AG信息AGI包含一个分配组AG的信息,其中,包括分配组号AGN,不少于一个的分配中磁盘分区的设备标识DID,每个所述AG的信息AGI,线性且连 续保存在所述元数据服务器MDS磁盘上,位置由所述AG链表位图AGLB所索引,所述目录树根节点Inode Root由目录B+树来管理的,所述目录B+树索引的每一项是一个节点Inode,所有文件和目录都是由Inode表示,该Inode的键值是由所述文件或者目录所在父目录的文件名的哈希值、所述文件或者目录的名称的哈希值、所述文件或者目录的类型Type组成,所述类型Type包括:文件类型、目录类型、元数据类型,其中,所述文件类型的Inode用于存储文件的布局信息,即从管理空闲空间的两个B+树中分配出来的区间Extent,所述目录类型的Inode用于存储包含在当前目录下的所述文件的文件名和目录的目录名,元数据类型的Inode包含该节点Inode对应的文件或者目录的元数据信息,该节点Inode对应的文件或者目录的Inode地址,以及该节点Inode对应的文件或者目录的Inode类型Type,其中所述的元数据信息是指由IEEF制定的POSIX标准定义的元数据信息;
在所述客户端设有:客户端模块和交互层模块,其中,所述客户端模块设有虚拟文件系统VFS层的调用接口,并进行数据和元数据的缓存,对于所述VFS层的函数调用,则按以下方式判断:若是和所述元数据服务器的交互操作,则生成相应的请求通过函数调用发送到底层的所述交互层模块,所述函数调用包括该文件系统客户端使用的所有请求操作,以及当前请求的索引,若是对所述数据磁盘进行数据访问的操作,则生成相应的数据访问请求发送到底层的SAN驱动模块,所述交互层模块通过远程过程调用协议实现所述客户端和所述元数据服务器MDS之间的通信;
在所述元数据服务器中,设有SAN文件系统管理模块,简称管理层模块,交互层模块和元数据文件系统模块,其中:
所述交互层模块和所述管理层模块相连,当向所述管理层模块发送以下各种请求:系统状态管理请求,操作状态管理请求,元数据访问请求以及空间 管理请求,所述管理层模块则把生成的相应请求发送到所述元数据文件系统模块中;
元数据文件系统模块设有以下接口:
Linux内核中的本地文件系统的内核调用接口,接收所述元数据访问的请求;
元数据文件系统提供第一调用接口,供所述管理层模块调用,其中管理的信息包括:空闲空间的大小、AGN、起始地址以及相应的区间Extent链表;
元数据文件系统模块还设有第二模块接口,从所述元数据服务器的SAN驱动模块中调用需要释放的区间Extent,以及所述并行文件系统的包括主超级块MSB在内存中的数据结构MSB_Core的指针i_private,以及以下数据结构:MSB_Core,AGLH_Core,AGLH,AGI_Core,以及AGI,其中:
MSB_Core包括目录树根节点Inode_Root和所述AGLH内存中数据结构AGLH_Core的指针AGLH_point;
AGLH_Core包括AGLH在所述元数据服务器MDS磁盘的地址AGLH_disk_point和所述AGI以下两个链表指针:AGI链表指针AGI_List_point和所述AGI哈希表指针AGI_hash_point;
AGI_Core包括:所述AGI在所述元数据服务器MDS磁盘的地址AGI_disk_point,所述AGI链表指针AGI_List_point,AGLI_Core指针AGLI_Core_point,可访问磁盘分区在内存中的数据结构的数组Block_Device_Array,所述两个B+树在数据磁盘上地址,所述空闲空间列表FreeList在数据磁盘上的地址Free_List,以及该AG的磁盘分区的所述DI D在内存中的数组Device_Lable_List;
AGI,包括所述AGN和DID;
步骤(2)按以下步骤启动所述并行文件系统:
步骤(2.1)初始化所述元数据服务器MDS磁盘;
步骤(2.2)加载所述元数据服务器需要的所述各种模块,挂载所述元数据服务器MDS磁盘;
步骤(2.3)在所述元数据服务器MDS磁盘上加载新的AG;
步骤(3)所述并行文件系统按以下步骤响应客户端应用程序的读写请求;
步骤(3.1)所述并行文件系统按以下步骤响应一个客户端应用程序的读请求:
步骤(3.1.1)客户端的应用程序发出读请求到所述客户端模块;
步骤(3.1.1.1)所述客户端模块首先查看是否缓存了相应文件的元数据,如果缓存了,直接跳到步骤(3.1.3);
步骤(3.1.1.2)所述客户端模块如果没有缓存相应元数据,则通过所述交互层模块和所述管理层模块,将元数据访问请求发送到所述元数据文件系统模块;
步骤(3.1.2)所述客户端模块接受元数据访问请求后,进行如下处理;
步骤(3.1.2.1)所述元数据文件系统模块首先检查此元数据是否被缓存,如果缓存了,跳转到步骤(3.1.2.2.3);
步骤(3.1.2.2)所述元数据文件系统模块首先访问所述元数据服务器MDS磁盘;
步骤(3.1.2.2.1)所述元数据文件系统模块根据被访问文件的路径名生成相应的所述目录树B+树的键值;
步骤(3.1.2.2.2)所述元数据文件系统模块读取所述目录树B+树的根节点,根据所述键值,查找对应文件的元数据;
步骤(3.1.2.2.3)所述元数据文件系统模块读取此文件的布局信息,并通过所述管理层模块、所述交互层模块返回给所述客户端模块;
步骤(3.1.3)所述客户端模块获取文件布局信息,并读取数据信息,
步骤(3.1.3.1)所述客户端模块分析获取的文件布局信息,并查找需要的数据所在的区间Extent信息;
步骤(3.1.3.2)所述客户端模块通过所述区间Extent信息获取所需要数据所在的AG;
步骤(3.1.3.2.1)所述客户端模块检查本地设备列表是否缓存了所要访问的AG的所有数据磁盘的DID,如果缓存了所述数据直接跳到步骤(3.1.3.3);
步骤(3.1.3.2.2)如果没有所需设备的DID,那么所述客户端模块通过所述交互层模块、所述管理层模块发送相应AG的设备列表信息请求到所述元数据文件系统模块,获取属于相应AG的所有磁盘的DID;
步骤(3.1.3.2.3)所述客户端模块通过已获得的DID,扫描所有磁盘的DID,找到与已获得的DID相同的属于所述相应AG的所有磁盘;
步骤(3.1.3.2.4)所述客户端模块通过所述SAN驱动模块访问相应AG的所有磁盘;
步骤(3.1.3.3)所述客户端模块在AG的磁盘上读取相应的数据信息;
步骤(3.1.4)所述客户端模块将读取的数据返回给应用程序,结束此次读请求;
步骤(3.2)所述并行文件系按以下步骤统响应一个客户端应用程序的写请求:
步骤(3.2.1)所述客户端模块生成文件写请求;
步骤(3.2.1.1)所述客户端模块首先检查已经获得文件元数据信息是否有空闲空间可以使用,如果没有跳转到步骤(3.2.1.3);
步骤(3.2.1.2)所述客户端模块检查文件元数据信息空闲空间是否够用,如果够用,调转到步骤(3.2.4);
步骤(3.2.1.3)如果文件元数据信息空闲空间不够用,所述客户端模块生成相应的文件空间申请请求通过所述交互层模块和所述管理层模块发送到所述元数据文件系统模块,同时使用文件元数据信息已有的空闲空间;
步骤(3.2.2)所述元数据文件系统模块根据文件的写请求生成相应的空间分配请求进行操作;
步骤(3.2.2.1)所述元数据文件系统模块首先检查当前的整个文件系统的空闲空间是否满足所需要的空闲空间大小,如果不满足,则返回错误,终止上述写请求;
步骤(3.2.2.2)所述元数据文件系统模块检查空闲空间分配请求的相应的AG是否满足所需要的空闲空间大小,如果满足,选择此AG进行空间分配,否则选择一个其他可以满足此空闲空间请求的AG,跳转到步骤(3.2.3);
步骤(3.2.2.3)如果所有单个AG都不满足上述空闲空间请求,所述元数据文件系统模块选取多个AG进行空间分配,并根据每个AG的大小生成相应的空间请求;
步骤(3.2.3)所述元数据文件系统模块选取AG进行空间分配;
步骤(3.2.3.1)所述元数据文件系统模块查看当前AG的空闲空间是否满足需要分配的大小;
步骤(3.2.3.2)所述元数据文件系统模块检查当前AG的Free List是 否有满足空闲空间B+树进行空间管理所需要的空间;
步骤(3.2.3.3)所述元数据文件系统模块根据分配请求查找当前AG的对应的空闲空间B+树,找到符合的Extent,在当前B+树中删除或添加相应的Extent;
步骤(3.2.3.4)所述元数据文件系统模块同步两个空闲空间B+树,进行两个空闲空间B+树平衡;
步骤(3.2.3.5)所述元数据文件系统模块修改当前AG和MDS上的ASB和MSB,记录空间变化;
步骤(3.2.3.6)所述元数据文件系统模块将此区间Extent的信息计入元数据服务器MDS磁盘的响应的文件的Inode,但是不修改该文件的长度信息;
步骤(3.2.3.7)所述元数据文件系统模块将得到的区间Extent填入相应的返回列表,并将所述列表通过交互层模块发送到所述客户端模块;步骤(3.2.4)所述客户端模块获得文件空闲空间信息,开始写入数据信息;
步骤(3.2.4.1)所述客户端模块分析获取的文件空闲空间信息,并查找需要的数据所在的区间Extent;
步骤(3.2.4.2)所述客户端模块通过区间Extent信息获取所需要数据所在的AG;
步骤(3.2.4.2.1)所述客户端模块检查本地设备列表是否缓存了所要访问的AG的所有磁盘的DID,如果缓存了直接跳到步骤(3.2.4.3);
步骤(3.2.4.2.2)如果没有所需设备的DID,所述客户端模块那么发送相应AG的磁盘列表信息请求到MDS,请求相应的磁盘的DID;
步骤(3.2.4.2.3)所述客户端模块通过已获得的DID,扫描所有磁盘的DID,找到与已获得的DID相同的属于所述相应AG的所有磁盘;
步骤(3.2.4.2.4)所述客户端模块通过SAN驱动模块访问相应AG的所有磁盘;
步骤(3.2.4.3)所述客户端模块在相应的AG的磁盘上写入相应的数据;
步骤(3.2.5)元数据服务器MDS根据客户端的访问信息,修改相应文件的Inode中的元数据;
步骤(3.2.5.1)如果客户端继续写,跳转到步骤(3.2.1.1);
步骤(3.2.5.2)如果数据写完,所述客户端模块将已经使用的新生成的文件元数据信息和文件空闲空间信息通过所述交互层模块发送给所述管理层模块;
步骤(3.2.5.3)如果有文件空闲空间信息,所述管理层模块发送空间释放请求到所述元数据文件系统模块进行空间释放;
步骤(3.2.5.3.1)所述元数据文件系统模块检查Free List是否有满足空闲空间B+树进行空间管理所需要的空间;
步骤(3.2.5.3.2)所述元数据文件系统模块根据分配请求查找对应的空闲空间B+树中相应的区间Extent的插入位置,进行删除或添加相应的区间Extent;
步骤(3.2.5.3.3)所述元数据文件系统模块同步两个空闲空间B+树,进行空闲空间B+树平衡;
步骤(3.2.5.3.4)所述元数据文件系统模块修改对应AG的所述ASB和MSB上的空间信息;
步骤(3.2.5.4所述元数据文件系统模块修改相应文件的Inode信息,将文件的大小信息更新为当前的返回值;
步骤(3.2.6)所述客户端模块返回操作完成信息到应用程序,结束所 述写请求。
2.根据权利要求1所述并行文件系统中资源的管理和分配方法,其特征在于:当所述分配组只有一个磁盘分区时,只采用所述第一个磁盘分区。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009100857061A CN101567003B (zh) | 2009-05-27 | 2009-05-27 | 并行文件系统中资源的管理和分配方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2009100857061A CN101567003B (zh) | 2009-05-27 | 2009-05-27 | 并行文件系统中资源的管理和分配方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101567003A CN101567003A (zh) | 2009-10-28 |
CN101567003B true CN101567003B (zh) | 2012-05-16 |
Family
ID=41283156
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2009100857061A Expired - Fee Related CN101567003B (zh) | 2009-05-27 | 2009-05-27 | 并行文件系统中资源的管理和分配方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101567003B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105824879A (zh) * | 2015-12-17 | 2016-08-03 | 深圳市华讯方舟软件技术有限公司 | 一种基于PostgreSQL块存储设备的迁移方法 |
US9824233B2 (en) | 2015-11-17 | 2017-11-21 | International Business Machines Corporation | Posixly secure open and access files by inode number |
Families Citing this family (41)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102209097A (zh) * | 2010-03-31 | 2011-10-05 | 英业达股份有限公司 | 储存局域网络的储存资源的调配系统 |
CN102541743B (zh) * | 2010-12-17 | 2015-12-16 | 伊姆西公司 | 用于存储管理的方法、设备和系统 |
CN102164161B (zh) * | 2011-01-10 | 2013-12-04 | 清华大学 | 一种对并行文件系统进行文件布局提取的方法和装置 |
CN102110146B (zh) * | 2011-02-16 | 2012-11-14 | 清华大学 | 基于键值key-value存储的分布式文件系统元数据管理方法 |
US20120246158A1 (en) * | 2011-03-25 | 2012-09-27 | Microsoft Corporation | Co-range partition for query plan optimization and data-parallel programming model |
CN102306168B (zh) * | 2011-08-23 | 2014-07-09 | 华为数字技术(成都)有限公司 | 日志操作方法、装置及文件系统 |
CN102622412A (zh) * | 2011-11-28 | 2012-08-01 | 中兴通讯股份有限公司 | 一种分布式文件系统中的并发写入方法及装置 |
US9372910B2 (en) | 2012-01-04 | 2016-06-21 | International Business Machines Corporation | Managing remote data replication |
CN102638569B (zh) * | 2012-01-13 | 2014-10-29 | 深圳市同洲电子股份有限公司 | 一种文件分发同步方法及系统 |
CN102982182B (zh) * | 2012-12-21 | 2017-02-08 | 浙江宇视科技有限公司 | 一种数据存储规划方法及装置 |
CN103336811B (zh) * | 2013-06-26 | 2018-01-09 | 华为技术有限公司 | 处理存储系统的方法和装置 |
CN103309820A (zh) * | 2013-06-28 | 2013-09-18 | 曙光信息产业(北京)有限公司 | 磁盘阵列缓存的实现方法 |
CN104407879B (zh) * | 2014-10-22 | 2018-02-02 | 江苏瑞中数据股份有限公司 | 一种电网时序大数据并行加载方法 |
CN104639553B (zh) * | 2015-02-13 | 2018-03-27 | 福州瑞芯微电子股份有限公司 | 数据交互方法、装置及系统 |
CN106708867B (zh) * | 2015-11-16 | 2019-12-06 | 华为数字技术(苏州)有限公司 | 一种基于数据基类型的资源调配方法和服务器 |
CN105468692A (zh) * | 2015-11-17 | 2016-04-06 | 盛趣信息技术(上海)有限公司 | 文件系统结构及其打包方法和读取方法 |
CN106202350A (zh) * | 2016-07-05 | 2016-12-07 | 浪潮(北京)电子信息产业有限公司 | 一种分布式文件系统自动精简配置的方法及系统 |
CN107766374B (zh) * | 2016-08-19 | 2021-05-25 | 上海凯翔信息科技有限公司 | 一种海量小文件存储读取的优化方法和系统 |
CN106484322A (zh) * | 2016-09-12 | 2017-03-08 | 华为技术有限公司 | 一种挂载文件系统的方法、装置及设备 |
CN106845259B (zh) * | 2017-02-28 | 2019-12-17 | 苏州浪潮智能科技有限公司 | 一种分布式文件读写权限设置方法 |
CN107315806B (zh) * | 2017-06-26 | 2020-04-10 | 杭州时趣信息技术有限公司 | 一种基于文件系统的嵌入式存储方法和装置 |
CN107291917A (zh) * | 2017-06-28 | 2017-10-24 | 郑州云海信息技术有限公司 | 一种同步linux内核与网络文件系统读写块大小的方法 |
CN107357920B (zh) * | 2017-07-21 | 2020-05-22 | 北京奇艺世纪科技有限公司 | 一种增量式的多副本数据同步方法及系统 |
US11016932B2 (en) * | 2017-09-21 | 2021-05-25 | Alibaba Group Holding Limited | Systems, methods, and apparatuses for simplifying filesystem operations utilizing a key-value storage system |
CN107786472B (zh) * | 2017-10-31 | 2020-03-31 | 北京亚鸿世纪科技发展有限公司 | 一种高效的tcp会话重组装置 |
CN108363787B (zh) * | 2018-02-12 | 2020-06-23 | 厦门海迈科技股份有限公司 | 一种ifc文件并行存储方法、装置及系统 |
CN108848180A (zh) * | 2018-06-27 | 2018-11-20 | 郑州云海信息技术有限公司 | 一种元数据同步方法、装置、设备及可读存储介质 |
CN108924124B (zh) * | 2018-06-29 | 2021-08-10 | 郑州云海信息技术有限公司 | 一种文件访问方法、装置、设备及可读存储介质 |
CN109213760B (zh) * | 2018-08-02 | 2021-10-22 | 南瑞集团有限公司 | 非关系数据存储的高负载业务存储及检索方法 |
CN109471894B (zh) * | 2018-10-29 | 2021-12-24 | 深圳市瑞驰信息技术有限公司 | 一种新型分散式文件与对象统一存储的系统及方法 |
CN109597793B (zh) * | 2018-12-04 | 2023-02-17 | 中国航空工业集团公司西安航空计算技术研究所 | 一种提升文件系统io性能的方法 |
CN109711587B (zh) * | 2018-12-29 | 2023-10-24 | 北京天诚同创电气有限公司 | 污水处理厂的物资信息处理方法、系统以及服务器 |
CN109871363A (zh) * | 2019-02-28 | 2019-06-11 | 苏州浪潮智能科技有限公司 | 一种冗余架构的共享文件系统及其搭建方法 |
CN111143293B (zh) * | 2019-12-22 | 2022-06-07 | 浪潮电子信息产业股份有限公司 | 一种元数据获取方法、装置、设备及计算机可读存储介质 |
CN111309796B (zh) * | 2020-02-07 | 2023-09-26 | 腾讯科技(深圳)有限公司 | 一种数据处理方法、装置以及计算机可读存储介质 |
CN111459412B (zh) | 2020-03-30 | 2023-07-04 | 北京百度网讯科技有限公司 | 磁盘管理方法、装置以及电子设备 |
CN113626433B (zh) * | 2021-08-03 | 2024-01-19 | 上海沄熹科技有限公司 | 一种基于两层art树的数据存储方法 |
CN114328421B (zh) * | 2022-03-17 | 2022-06-10 | 联想凌拓科技有限公司 | 元数据服务架构管理方法、计算机系统、电子设备及介质 |
CN114415971B (zh) * | 2022-03-25 | 2022-09-23 | 阿里云计算有限公司 | 数据处理方法以及装置 |
CN116662019B (zh) * | 2023-07-31 | 2023-11-03 | 苏州浪潮智能科技有限公司 | 请求的分配方法、装置、存储介质及电子装置 |
CN116795296B (zh) * | 2023-08-16 | 2023-11-21 | 中移(苏州)软件技术有限公司 | 一种数据存储方法、存储设备及计算机可读存储介质 |
-
2009
- 2009-05-27 CN CN2009100857061A patent/CN101567003B/zh not_active Expired - Fee Related
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9824233B2 (en) | 2015-11-17 | 2017-11-21 | International Business Machines Corporation | Posixly secure open and access files by inode number |
CN105824879A (zh) * | 2015-12-17 | 2016-08-03 | 深圳市华讯方舟软件技术有限公司 | 一种基于PostgreSQL块存储设备的迁移方法 |
CN105824879B (zh) * | 2015-12-17 | 2019-06-28 | 深圳市华讯方舟软件技术有限公司 | 一种基于PostgreSQL块存储设备的迁移方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101567003A (zh) | 2009-10-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101567003B (zh) | 并行文件系统中资源的管理和分配方法 | |
US8504571B2 (en) | Directed placement of data in a redundant data storage system | |
US7836107B2 (en) | Disk seek optimized file system | |
CN104408091B (zh) | 分布式文件系统的数据存储方法及系统 | |
US7765189B2 (en) | Data migration apparatus, method, and program for data stored in a distributed manner | |
US8312242B2 (en) | Tracking memory space in a storage system | |
KR20200027413A (ko) | 데이터 저장 방법, 장치 및 시스템 | |
CA2722643C (en) | Systems and methods for thumbnail management | |
US8543596B1 (en) | Assigning blocks of a file of a distributed file system to processing units of a parallel database management system | |
CN111506269B (zh) | 一种磁盘存储空间分配方法、装置、设备及存储介质 | |
US20100070544A1 (en) | Virtual block-level storage over a file system | |
CN102938784A (zh) | 应用于分布式存储系统中的数据存储方法和系统 | |
US9940331B1 (en) | Proactive scavenging of file system snaps | |
US9268679B2 (en) | Using an alias volume name for a volume to allocate space to a data set | |
US11151081B1 (en) | Data tiering service with cold tier indexing | |
CN106570113B (zh) | 一种海量矢量切片数据云存储方法及系统 | |
US11132334B2 (en) | Methods and apparatus for filtering dynamically loadable namespaces (DLNs) | |
Salunkhe et al. | In search of a scalable file system state-of-the-art file systems review and map view of new Scalable File system | |
CN103984507A (zh) | 一种生物信息学高性能计算平台的存储配置以及优化策略 | |
US10387384B1 (en) | Method and system for semantic metadata compression in a two-tier storage system using copy-on-write | |
CN116848517A (zh) | 使用基于数据指纹的数据地址的高速缓存编索引 | |
US20130007394A1 (en) | Reorganization of a fragmented directory of a storage data structure comprised of the fragmented directory and members | |
US10884649B2 (en) | Tape drive data reclamation | |
CN115904876A (zh) | 解决不同格式日志数据冲突的方法、系统、终端及介质 | |
US20130218851A1 (en) | Storage system, data management device, method and program |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20120516 Termination date: 20170527 |
|
CF01 | Termination of patent right due to non-payment of annual fee |