一种快照元数据存储方法、装置及设备、介质与流程

文档序号:17889633发布日期:2019-06-13 15:28阅读:220来源:国知局
一种快照元数据存储方法、装置及设备、介质与流程

本发明涉及快照技术,尤其涉及的是一种快照元数据存储方法、装置及设备、介质。



背景技术:

快照是存储系统中不可或缺的一项功能。存储网络行业协会snia(storagenetworkingindustryassociation)对快照snapshot的定义是:关于指定数据集合的一个完全可用拷贝,该拷贝包括相应数据在某个时间点(拷贝开始的时间点)的映像。快照的作用主要是能够进行在线数据备份与恢复,当存储设备发生应用故障或者文件损坏时可以进行快速的数据恢复,将数据恢复到某个可用的时间点的状态;快照的另一个作用是为存储用户提供了另外一个数据访问通道,当原数据进行在线应用处理时,用户可以访问快照数据,还可以利用快照进行测试等工作。

每次快照都会产生相应的快照元数据,比如包括lun的lba和快照空间lba等,需要对这些快照元数据进行存储,以便后续通过快照元数据确定lun与快照空间之间的地址对应关系实现快照回滚等技术。

相关的快照元数据存储方式中,每个快照元数据利用树结构在内存中组织起来,树结构的拓扑如图1所示,树结构的每个节点存储一个快照元数据,每个节点上除了快照元数据,还要存储指针信息(包括指向左节点的指针信息、指向右节点的指针信息、指向上一个节点的指针信息等)。

上述方式中,由于每个快照元数据占用一个节点,整个树结构中各个节点的指针信息就需要占用很多内存,导致内存消耗过多。



技术实现要素:

有鉴于此,本发明提供一种快照元数据存储方法、装置及设备、介质,多个快照元数据共用一个节点,有利于减少内存的消耗。

具体地,本发明是通过如下技术方案实现的:

根据本发明的一个实施例,一种快照元数据存储方法,包括:

当获取到快照元数据t1时,检查用于存储快照元数据的树结构中是否存在节点;所述t1至少包括进行快照的逻辑单元号lun的地址lba1、及对应快照空间的地址lba2;

若存在,依据所述lba1确定所述树结构中与lba1匹配的目标节点,判断为所述目标节点分配的用于存储多条快照元数据的数组a1是否已存满,若否,依据所述lba1将所述t1存入到所述a1中。

根据本发明的一个实施例,该方法还进一步包括:

若所述a1已存满,当所述a1的存储容量小于第一设定容量时,依据所述a1的存储容量重新为所述目标节点分配的数组a2,并将所述a1中已存储的快照元数据存入到所述a2中,依据所述lba1将所述t1存入到a2中;

其中,所述a2的存储容量大于所述a1的存储容量。

根据本发明的一个实施例,该方法还进一步包括:

若所述a1已存满,当所述a1的存储容量不小于第一设定容量时,搜索所述a1中逻辑单元号的地址连续的快照元数据;

若搜索到的快照元数据的数量等于所述a1的存储容量,则在所述树结构中创建一节点并为创建的节点分配数组a3,并将所述t1存入到所述a3中。

根据本发明的一个实施例,所述a1中存储的快照元数据已按照逻辑单元号的地址的指定顺序排序;

该方法还进一步包括:

若搜索到的快照元数据的数量小于所述a1的存储容量且大于第二设定容量n,识别搜索到的快照元数据中排序最前的快照元数据在所述a1中的位置s1、及搜索到的快照元数据中排序最后的快照元数据在所述a1中的位置s2,依据所述s1及s2创建相应数量的节点并为所述目标节点与新创建的节点分配新的数组,将所述a1中的快照元数据分段存储到新的数组中,从新的数组中确定与lba1匹配的目标数组,并将t1存入到所述目标数组中。

根据本发明的一个实施例,所述a1所在节点的查找该节点所需的关键字为所述a1的首端上存储的逻辑单元号的地址;

依据所述s1及s2创建相应数量的节点并为所述目标节点与新创建的节点分配新的数组,将所述a1中的快照元数据分段存储到新的数组中,包括:

如果所述s1是a1的首端,重新为所述目标节点分配的数组a4,在所述树结构中创建一节点并为创建的节点分配数组a5,所述a4的存储容量等于所述n,所述a5的存储容量大于所述a1的存储容量与所述n之差;将所述a1中从处于首端的快照元数据开始的n条快照元数据作为一段存入至所述a4中,将所述a1中剩余的快照元数据作为另一段存入至所述a5中;

如果所述s2是a1的尾端,在所述树结构中创建一节点并为创建的节点分配数组a6,并重新为所述目标节点分配的数组a7,所述a6和a7的存储容量均大于所述a1的存储容量的一半;将所述a1中记录的快照元数据均分成两段分别存入到所述a6和所述a7中;

如果所述s1非a1的首端且所述s2非a1的尾端,重新为所述目标节点分配数组a8,在所述树结构中创建两个节点并分别为创建的节点分配数组a9、a10,所述a8的存储容量大于所述a1中s1之前的快照元数据的总量,所述a10的存储容量大于所述a1中s2之后的快照元数据的总量,所述a9的存储容量等于所述n;将所述a1中处于s1之前的快照元数据作为一段存入至所述a8中,将所述a1中从所述s1开始的n条快照元数据作为一段存入至所述a9中,将所述a1中剩余的快照元数据作为另一段存入至所述a10中。

根据本发明的一个实施例,该方法还进一步包括:

若搜索到的快照元数据的数量小于等于第二设定容量n,则在所述树结构中创建一节点并为创建的节点分配数组a11,并重新为所述目标节点分配的数组a12,所述a11和a12的存储容量均大于所述a1的存储容量的一半;将所述a1中记录的快照元数据均分成两段分别存入到所述a11和所述a12中,依据所述lba1从a11和a12中确定出存储t1的目标数组,将所述t1存入所述目标数组。

根据本发明的一个实施例,该方法还进一步包括:

若所述树结构中不存在节点,在所述树结构中创建节点,为所述节点分配用于存储多条快照元数据的数组,并将所述t1存入到所述节点的数组中。

根据本发明的一个实施例,

所述树结构的各个节点的关键字为对应数组中存储的逻辑单元号的最小地址,且所述树结构的各节点已按照关键字从小到大的顺序排序;

依据所述lba1确定所述树结构中与lba1匹配的目标节点,包括:

依据所述lba1按照从小到大的顺序搜索树结构中各节点的关键字,当搜索到首个比所述lba1大的关键字且该关键字非树结构中的最小关键字时,将搜索到的该关键字所在节点的前一个节点确定为所述目标节点;当未搜索到比所述lba1大的关键字或者该关键字为树结构中的最小关键字时,将搜索的最后一个关键字所在节点确定为所述目标节点;

或者,

所述树结构的各个节点的关键字为对应数组中存储的逻辑单元号的最大地址,且所述树结构的各节点已按照关键字从大到小的顺序排序;

依据所述lba1确定所述树结构中与lba1匹配的目标节点,包括:

依据所述lba1按照从大到小的顺序搜索树结构中各节点的关键字,当搜索到首个比所述lba1小的关键字且该关键字非树结构中的最大关键字时,将搜索到的该关键字所在节点的前一个节点确定为所述目标节点;当未搜索到比所述lba1小的关键字且该关键字为树结构中的最大关键字时,将搜索的最后一个关键字所在节点确定为所述目标节点。

根据本发明的一个实施例,一种快照元数据存储装置,包括:

树结构检查模块,用于当获取到快照元数据t1时,检查用于存储快照元数据的树结构中是否存在节点;所述t1至少包括进行快照的逻辑单元号lun的地址lba1、及对应快照空间的地址lba2;

第一存储模块,用于若存在,依据所述lba1确定所述树结构中与lba1匹配的目标节点,判断为所述目标节点分配的用于存储多条快照元数据的数组a1是否已存满,若否,依据所述lba1将所述t1存入到所述a1中。

根据本发明的一个实施例,该装置还进一步包括:

第二存储模块,用于若所述a1已存满,当所述a1的存储容量小于第一设定容量时,依据所述a1的存储容量重新为所述目标节点分配的数组a2,并将所述a1中已存储的快照元数据存入到所述a2中,依据所述lba1将所述t1存入到a2中;

其中,所述a2的存储容量大于所述a1的存储容量。

根据本发明的一个实施例,该装置还进一步包括:

搜索模块,用于若所述a1已存满,当所述a1的存储容量不小于第一设定容量时,搜索所述a1中逻辑单元号的地址连续的快照元数据;

第三存储模块,用于若搜索到的快照元数据的数量等于所述a1的存储容量,则在所述树结构中创建一节点并为创建的节点分配数组a3,并将所述t1存入到所述a3中。

根据本发明的一个实施例,所述a1中存储的快照元数据已按照逻辑单元号的地址的指定顺序排序;

该装置还进一步包括:

第四存储模块,用于若搜索到的快照元数据的数量小于所述a1的存储容量且大于第二设定容量n,识别搜索到的快照元数据中排序最前的快照元数据在所述a1中的位置s1、及搜索到的快照元数据中排序最后的快照元数据在所述a1中的位置s2,依据所述s1及s2在所述a1中的位置创建相应数量的节点并为所述目标节点与新创建的节点分配数组,将所述a1中的快照元数据分段存储到当前分配的数组中,并依据lba1将t1存入到当前分配的相应数组中。

根据本发明的一个实施例,所述指定顺序为从小到大的顺序,所述a1所在节点的查找该节点所需的关键字为所述a1的首端上存储的逻辑单元号的地址;

所述第四存储模块包括:

第一单元,用于如果所述s1是a1的首端,重新为所述目标节点分配数组a4,在所述树结构中创建一节点并为创建的节点分配数组a5,所述a4的存储容量等于所述n,所述a5的存储容量大于所述a1的存储容量与所述n之差;将所述a1中从处于首端的快照元数据开始的n条快照元数据作为一段存入至所述a4中,将所述a1中剩余的快照元数据作为另一段存入至所述a5中,将所述t1存入所述a5;

第二单元,用于如果所述s2是a1的尾端,在所述树结构中创建一节点并为创建的节点分配数组a6,并重新为所述目标节点分配的数组a7,所述a6和a7的存储容量均大于所述a1的存储容量的一半;将所述a1中记录的快照元数据均分成两段分别存入到所述a6和所述a7中,依据所述lba1从a6和a7中确定出存储t1的目标数组,将所述t1存入所述目标数组;

第三单元,用于如果所述s1非a1的首端且所述s2非a1的尾端,重新为所述目标节点分配的数组a8,在所述树结构中创建两个节点并分别为创建的节点分配数组a9、a10,所述a8的存储容量大于所述a1中s1之前的快照元数据的总量,所述a10的存储容量大于所述a1中s2之后的快照元数据的总量,所述a9的存储容量等于所述n;将所述a1中处于s1之前的快照元数据作为一段存入至所述a8中,将所述a1中从所述s1开始的n条快照元数据作为一段存入至所述a9中,将所述a1中剩余的快照元数据作为另一段存入至所述a10中,依据所述lba1从a8和a10中确定出存储t1的目标数组,将所述t1存入所述目标数组。

根据本发明的一个实施例,该装置还进一步包括:

第七存储模块,用于若搜索到的快照元数据的数量小于等于第二设定容量n,则在所述树结构中创建一节点并为创建的节点分配数组a11,并重新为所述目标节点分配的数组a12,所述a11和a12的存储容量均大于所述a1的存储容量的一半;将所述a1中记录的快照元数据均分成两段分别存入到所述a11和所述a12中,依据所述lba1从a11和a12中确定出存储t1的目标数组,将所述t1存入所述目标数组。

根据本发明的一个实施例,该装置还进一步包括:

第八存储模块,用于若所述树结构中不存在节点,在所述树结构中创建节点,为所述节点分配用于存储多条快照元数据的数组,并将所述t1存入到所述节点的数组中。

根据本发明的一个实施例,所述树结构的各节点的数组中存储的快照元数据是按照逻辑单元号的地址的指定顺序排序的。

根据本发明的一个实施例,

所述树结构的各个节点的关键字为对应数组中存储的逻辑单元号的最小地址,且所述树结构的各节点已按照关键字从小到大的顺序排序;

所述第一存储模块依据所述lba1确定所述树结构中与lba1匹配的目标节点时具体用于:

依据所述lba1按照从小到大的顺序搜索树结构中各节点的关键字,当搜索到首个比所述lba1大的关键字且该关键字非树结构中的最小关键字时,将搜索到的该关键字所在节点的前一个节点确定为所述目标节点;当未搜索到比所述lba1大的关键字或者该关键字为树结构中的最小关键字时,将搜索的最后一个关键字所在节点确定为所述目标节点;

或者,

所述树结构的各个节点的关键字为对应数组中存储的逻辑单元号的最大地址,且所述树结构的各节点已按照关键字从大到小的顺序排序;

所述第一存储模块依据所述lba1确定所述树结构中与lba1匹配的目标节点时具体用于:

依据所述lba1按照从大到小的顺序搜索树结构中各节点的关键字,当搜索到首个比所述lba1小的关键字且该关键字非树结构中的最大关键字时,将搜索到的该关键字所在节点的前一个节点确定为所述目标节点;当未搜索到比所述lba1小的关键字且该关键字为树结构中的最大关键字时,将搜索的最后一个关键字所在节点确定为所述目标节点。

根据本发明的一个实施例,一种电子设备,包括处理器及存储器;所述存储器存储有可被处理器调用的程序;其中,所述处理器执行所述程序时,实现如前述实施例所述的快照元数据存储方法。

根据本发明的一个实施例,一种机器可读存储介质,其上存储有程序,该程序被处理器执行时,实现如前述实施例所述的快照元数据存储方法。

本发明实施例具有以下有益效果:

而本发明实施例中,通过为存储快照元数据的树结构上的每个节点分配数组,而数组可存储多个快照元数据,因而树结构的每个节点可由多个快照元数据共用,与上述相关快照元数据存储方式相比,存储相同量的快照元数据所需的节点大大减少,相应减少了存储时所需的节点上指针信息等的开销,有利于减少内存的消耗。

附图说明

图1是相关快照元数据存储方式中的树结构的拓扑图;

图2是本发明一实施例的快照元数据存储方法的流程示意图;

图3是本发明一实施例的树结构的拓扑图;

图4是本发明一实施例的快照元数据存储装置的结构框图;

图5至图11是本发明实施例的数组示意图;

图12是本发明一实施例的电子设备的结构框图。

具体实施方式

这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。

在本发明使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本文中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。

应当理解,尽管在本发明可能采用术语第一、第二、第三等来描述各种器件,但这些信息不应限于这些术语。这些术语仅用来将同一类型的器件彼此区分开。例如,在不脱离本发明范围的情况下,第一器件也可以被称为第二器件,类似地,第二器件也可以被称为第一器件。取决于语境,如在此所使用的词语“如果”可以被解释成为“在……时”或“当……时”或“响应于确定”。

为了使得本发明的描述更清楚简洁,下面对本发明中的一些技术术语进行解释:

lun:logicalunitnumber,即逻辑单元号,lun表示逻辑卷,它呈现给用户一定容量的可访问逻辑空间。

lba:logicblockaddress,即逻辑块地址,是指lun呈现给用户的可访问地址。当然,在实际中,依据lba访问磁盘时可能经过多级虚拟化映射最终映射到持久化的磁盘空间。

目前实现快照主要有两种技术,一种是“首次写时复制”(copyonfirstwrite,cofw),另一种是“首次写时重定向”(redirectonfirstwrite,rofw)。两种技术在实现方式上有所不同,但都需要利用快照元数据记录发生过数据写入的lun的lba及对应的快照空间的lba,当然还可以包括写入数据的lun的大小等,这些数据可以称为tuple信息,tuple信息是最主要的快照元数据。快照元数据中当然还可以包括其他数据,比如时间点信息、快照空间管理信息、快照回滚信息、日志信息等,这些数据可以与tuple信息分开存储。

利用树结构存储快照元数据,除了快照元数据所需的内存消耗,还要加上各个节点上指针信息的开销。

相关快照元数据存储方式中,树结构的每个节点存储一个快照元数据,以常用的红黑树结构(c语言环境)为例,计算一下相关快照元数据存储方式中树结构的内存消耗量,如下:

lun的lba采用64bit整型数,消耗8byte内存;

快照空间lba采用64bit整型数,消耗8byte内存;

红黑树上每个节点的指针信息,消耗24byte内存;

所以,1个快照元数据整体消耗的内存大小为40byte。

假设一个lun的存储单元大小为8kb,当整体需要进行快照的数据量为1tb时,快照元数据的内存消耗至少要达到(1tb/8kb)*40byte=5gb,内存消耗较大。

而本发明实施例中,通过为存储快照元数据的树结构上的每个节点分配数组,而数组可存储多个快照元数据,因而树结构的每个节点可由多个快照元数据共用,与上述相关快照元数据存储方式相比,存储相同量的快照元数据所需的节点大大减少,相应减少了存储时所需的节点上指针信息等的开销,有利于减少内存的消耗。

本发明实施例的快照元数据存储方式,可以在满足快照应用的基础上,大大减少快照元数据的内存消耗,其实现方式与快照业务相对独立,方案实现和改动难度低,收效明显。

下面对本发明实施例的快照元数据存储方法进行更具体的描述,但不应以此为限。在一个实施例中,参看图2,一种快照元数据存储方法可以包括以下步骤:

s100:当获取到快照元数据t1时,检查用于存储快照元数据的树结构中是否存在节点;所述t1至少包括进行快照的逻辑单元号lun的地址lba1、及对应快照空间的地址lba2;

s200:若存在,依据所述lba1确定所述树结构中与lba1匹配的目标节点,判断为所述目标节点分配的用于存储多条快照元数据的数组a1是否已存满,若否,依据所述lba1将所述t1存入到所述a1中。

本发明实施例的快照元数据存储方法的执行主体为电子设备,进一步地可以为电子设备的处理器,其中,所述处理器可以为一个或多个,所述处理器可以为通用处理器或者专用处理器。电子设备例如是具有存储功能的计算机设备,当然还可以是其他类型的电子设备,只要是能够实现快照及对快照元数据的存储功能即可。

电子设备在进行快照时会产生相应的快照元数据。以“首次写时复制”快照技术为例,电子设备在某个逻辑单元号lun发生首次写时,会将该lun中的数据拷贝到新的位置,该新的位置即是对应快照空间,相应的,便会生成快照元数据,快照元数据比如包括快照标识、lun的lba、快照空间的lba及进行快照的数据长度。

步骤s100中,当获取到快照元数据t1时,检查用于存储快照元数据的树结构中是否存在节点。

每收到一条快照元数据,便可执行一次步骤s100。当前收到t1,如果该t1为首次需存入树结构的快照元数据,则此时树结构是空的,还未存在节点;而如果该t1非首次需存入树结构的快照元数据,则此时树结构是上会存在节点,因而需要在收到t1时检查树结构是否为空。

t1至少包括进行快照的逻辑单元号lun的地址lba1、及对应快照空间的地址lba2,表示从lun的lba1位置开始,一段固定长度的数据被修改了,但是旧数据保存在快照空间lba2的地方,可以用于回滚或直接访问。当然t1还可以包括其他数据,比如lun内进行快照的数据长度l,表示从lun的lba1位置开始一段长为l的数据被修改了,但是旧数据保存在快照空间lba2的地方。该t1可以称为快照元数据中的tuple信息。

步骤s200中,若树结构中存在节点,依据所述lba1确定所述树结构中与lba1匹配的目标节点,判断为所述目标节点分配的用于存储多条快照元数据的数组a1是否已存满,若否,依据所述lba1将所述t1存入到所述a1中。

树结构的每个节点将对应数组存储的某个快照元数据的逻辑单元号的地址作为该节点的关键字,比如将存储最小逻辑单元的地址作为该节点的关键字,如此,依据所述lba1确定所述树结构中存储所述t1所需的目标节点时,可以依据lba1查找树结构中与lab1匹配的关键字,将查找到的关键字所在的节点作为目标节点,具体查找方式不限。

确定目标节点后,可以判断目标节点的数组a1是否已存满快照元数据,如果a1还未存满,则可将该t1存入到a1中。若a1中存储的快照元数据是有序的,则将t1存入a1时,需保证存入a1后a1中存储的快照元数据仍有序,比如,如果a1中存储的快照元数据是按照逻辑单元号的地址从小到大或从大到小排序的,则在a1中找到比t1的lba1略小的逻辑单元号的地址和略大的逻辑单元号的地址(如果存在),并插入到这两个地址所在的快照元数据之间,当然,此处仅是将t1存入a1的一个例子,具体不限于此。

树结构的各个节点上可以记录有该节点的数组的状态信息,包括总共可存储的快照元数据的数量(即存储容量)max及已存储的快照元数据的数量used,这两个数据量非常小,造成的内存损耗也非常小。具体的,判断目标节点的数组a1是否已存满快照元数据可包括:获取目标节点中记录的max及used,比较max与used,若used等于max,则确定a1已存满,若used小于max,则确定a1未存满。

树结构中已创建的各个节点会分配有数组,每个数组都可以存储多条快照元数据,如此,多条快照元数据可共用一个节点,参看图3,每个节点上可以存储多条快照元数据。

假设每个数组可存储256条快照元数据,在最理想情况下,每256条快照元数据仅消耗一个节点。如前所述,假设一个lun的存储单元大小为8kb,当实际需要进行快照的数据量为1tb时,本发明实施例的快照元数据存储方法中,树结构的内存消耗量,如下:

lun的lba采用64bit整型数,消耗8byte内存;快照空间lba采用64bit整型数,消耗8byte内存;因而,快照元数据消耗16byte;

需要的数组个数:(1tb/8kb)/256=512k;

每个数组中存储快照元数据所需消耗:256*16byte=4kb

节点中max和used分别只需要用1byte表示,加上节点的指针信息,每个节点除了快照元数据,还需要额外消耗24+2=26byte;

因此,总内存消耗为512k*(26byte+4kb),约为2gb。

在需要进行快照的数据量相同的情况下,相比于前述内容中描述的相关快照元数据存储方式所需消耗的5gb内存,本发明实施例所需消耗的内存消耗降低了60%,大大减少了内存的消耗。

当内存消耗大幅下降后,在既定的物理内存配置下,快照规格可以得到极大提升,同时因内存不足导致的快照失效情况也会大大减少,对快照技术具有重大意义。

在一个实施例中,上述方法流程可由快照元数据存储装置执行,如图4所示,快照元数据存储装置100可以包含2个模块:树结构检查模块101、第一存储模块102。树结构检查模块101用于执行上述步骤s100,第一存储模块102用于执行上述步骤s200。

在一个实施例中,该方法还进一步包括以下步骤:

s300:若所述树结构中不存在节点,在所述树结构中创建节点,为所述节点分配用于存储多条快照元数据的数组,并将所述t1存入到所述节点的数组中。

如果树结构中不存在节点,说明还没有快照元数据存入到树结构中,可创建一个节点,该节点即为该树结构的根节点,并为该节点分配数组,并将t1存入到该新建的数组中。

该新建的数组可以存储多条快照元数据,比如可以存储32条,占用一段大小为16byte*32=512b的连续内存,具体占用的内存需视一条快照元数据的大小而定。当然,该新建的数组所能存储的快照元数据的数量也不限于此,比如还可以是64条、128条、256条等。

在一个实施例中,所述树结构的各节点的数组中存储的快照元数据已按照逻辑单元号的地址从大到小或从小到大的顺序排序。

下面结合图5至图7来说明上述步骤s100~s300,以便更好地理解本发明。在树结构中存在节点的情况下,假设各节点的数组中的快照元数据需按照逻辑单元号的地址从小到大排序。

示例性的,收到t1后,确定出树结构中不存在节点,则创建一个节点,并为该新建的节点分配一个数组,分配的数组比如图5示出的数组,需要将t1存入到该数组中,t1的lba1为8,该数组中还未存储快照元数据,直接将8存入到首端中,并将该节点的关键字设置为8,将该节点的used设置为1。

示例性的,收到t1后,确定出树结构中存在节点(此时树结构中仅有一个节点),并且找到了目标节点,该目标节点的数组a1比如图6示出的数组,需要将t1存入到a1中,t1的lba1为15,该a1中已经存储了一个快照元数据,该快照元数据的逻辑单元号的地址为8,15比8大,没有比15大的地址,将15所在的快照元数据存入8所在的快照元数据的后面,该节点的关键字仍为8,将该节点的used设置为2。

示例性的,收到t1后,确定出树结构中存在节点,并且找到了目标节点,该目标节点的数组a1比如图7示出的数组,需要将t1存入到a1中,t1的lba1为7,该a1中已经存储了两个快照元数据,一个快照元数据的逻辑单元号的地址为8,一个快照元数据的逻辑单元号的地址为15,8是第一个比7大的地址,将7所在的快照元数据插入到8所在的快照元数据的前面,并将该节点的关键字设置为7,将该节点的used设置为3。

下面继续对本发明实施例的快照元数据存储方法进行描述。在一个实施例中,该方法还进一步包括以下步骤:

s210:若所述a1已存满,当所述a1的存储容量小于第一设定容量时,依据所述a1的存储容量重新为所述目标节点分配的数组a2,并将所述a1中已存储的快照元数据存入到所述a2中,依据所述lba1将所述t1存入到a2中;

其中,所述a2的存储容量大于所述a1的存储容量。

假设a1的数组的存储容量为32条快照元数据,即目标节点记录的max=32,当需要将t1存入到a1时,可以获取目标节点记录的used,如果used=max,即a1中已经存储了32条快照元数据,说明a1已经存满。

a1已经存满时,可获取目标节点记录的max,依据max确定出a1的存储容量,当所述a1的存储容量小于第一设定容量时,依据a1的存储容量重新为目标节点分配的数组a2,并将所述a1中已存储的快照元数据存入到所述a2中,依据所述lba1将所述t1存入到a2中,存完之后,可将a1释放。

结合图8和9来说明,在树结构中存在节点的情况下,假设各节点的数组中的快照元数据需按照逻辑单元号的地址从小到大排序。示例性的,收到t1后,确定出树结构中存在节点,并且找到了目标节点(关键字为6的目标节点),该目标节点的数组a1比如图8示出的数组,需要将t1存入到a1中,t1的lba1为101,该a1中已经满了32条快照元数据,因而为目标节点重新分配数组a2,并a1中已存储的快照元数据存入到a2中,a2如图9所示出的数组,将a1中的快照元数据存入a2后,a2中还有剩余容量,150是比a2中第一个101大的地址,将101所在的快照元数据插入到150所在的快照元数据的前面,该节点的关键字仍为6,将该节点的used设置为33。

优选的,a2的存储容量为a1的存储容量的两倍。比如,a1的存储容量为可存储32条快照元数据时,新分配的a2的存储容量为可存储64条快照元数据。

第一设定容量比如可以为256条快照元数据。如此,在目标节点的数组的存储容量为32条快照元数据的情况下,当该数组存满时,由于未到达256条,需要进行第一次数组扩展,可为目标节点分配存储容量为64条快照元数据的数组;当存储容量为64条快照元数据的数组又存满时,由于未到达256条,需要进行第二次数组扩展时,可为目标节点分配存储容量为128条快照元数据的数组;当存储容量为128条快照元数据的数组又存满时,由于未到达256条,需要进行第三次数组扩展时,可为目标节点分配存储容量为256条快照元数据的数组。

本实施例中,树结构中在开始的时候可以为节点分配存储容量较低的数组,避免一下子占用过多内存,当节点的数组存储容量不足时,再逐渐扩展该节点的数组,为其分配更大存储容量的数组,有利于内存的合理利用。

在一个实施例中,该方法还进一步包括以下步骤:

s220:若所述a1已存满,当所述a1的存储容量不小于第一设定容量时,搜索所述a1中逻辑单元号的地址连续的快照元数据;

s230:若搜索到的快照元数据的数量等于所述a1的存储容量,则在所述树结构中创建一节点并为创建的节点分配数组a3,并将所述t1存入到所述a3中。

a1已经存满时,可获取目标节点记录的max,依据max确定出a1的存储容量,当所述a1的存储容量不小于第一设定容量时,搜索所述a1中逻辑单元号的地址连续的快照元数据。

两个快照元数据的逻辑单元号的地址连续是指两个地址之间的差值为一个lun中存储的数据长度,比如在数据长度为1的情况下,如果a1中存储的快照元数据的逻辑单元号的地址分别为4、5、6、7、8、9、11、13,则4、5、6、7、8、9即为逻辑单元号的地址连续的快照元数据,步骤s200中进行搜索时会搜索到4、5、6、7、8、9所在的快照元数据。

可以理解,本发明实施例中的地址的形式比如4均是示例性的,并不是真实的逻辑地址表示。

步骤s230中,若搜索到的快照元数据的数量等于所述a1的存储容量,即表明a1中的快照元数据的逻辑单元号的地址都是连续的,这些快照元数据之间不可能再插入别的快照元数据,即该a1中存储的快照元数据是致密排列的,此时,无需调整该a1,在所述树结构中创建一节点并为创建的节点分配数组a3,并将所述t1存入到所述a3中,将新创建的节点的关键字设置为t1的lba1。

在排序的树结构中,在创建新的节点后,可根据新创建的节点的关键字确定该节点在树结构中的位置,如果是在目标节点之前,可插入到目标节点之前;如果在目标节点之后,可插入到目标节点之后,具体可参看相关排序树结构的节点插入方式,在此不再赘述。

在一个实施例中,所述a1中存储的快照元数据已按照逻辑单元号的地址的指定顺序排序;该方法还可进一步以下步骤:

s240:若搜索到的快照元数据的数量小于所述a1的存储容量且大于第二设定容量n,识别搜索到的快照元数据中排序最前的快照元数据在所述a1中的位置s1、及搜索到的快照元数据中排序最后的快照元数据在所述a1中的位置s2,依据所述s1及s2创建相应数量的节点并为所述目标节点与新创建的节点分配新的数组,将所述a1中的快照元数据分段存储到新的数组中,从新的数组中确定与lba1匹配的目标数组,并将t1存入到所述目标数组中。

n比如为128,即a1中存在129条以上的快照元数据的逻辑单元号的地址是连续的,比如搜索出n1条快照元数据,识别出这n1条快照元数据中排序最前的快照元数据在所述a1中的位置s1及排序最后的快照元数据在所述a1中的位置s2。

所述指定顺序可以为从小到大的顺序,也可以为从大到小的顺序,具体不限。

进一步的,所述a1所在节点的查找该节点所需的关键字为所述a1的首端上存储的逻辑单元号的地址;

步骤s240中,依据所述s1及s2创建相应数量的节点并为所述目标节点与新创建的节点分配新的数组,将所述a1中的快照元数据分段存储到新的数组中,包括以下步骤s241~s243。可以理解,s241~s243之间无先后顺序,在一个实施例中,在步骤s240之后,可包括s241~s243中的任意一个步骤。

s241:如果所述s1是a1的首端,重新为所述目标节点分配的数组a4,在所述树结构中创建一节点并为创建的节点分配数组a5,所述a4的存储容量等于所述n,所述a5的存储容量大于所述a1的存储容量与所述n之差;将所述a1中从处于首端的快照元数据开始的n条快照元数据作为一段存入至所述a4中,将所述a1中剩余的快照元数据作为另一段存入至所述a5中。

由于s1是a1的首端,即搜索到的是a1中排序最前的快照元数据,且数量大于n,则说明a1中前n条快照元数据的逻辑单元号的地址是连续的,这些快照元数据之间不可能再插入别的快照元数据,即该a1中前n条快照元数据是致密排列的,此时,无需调整该前n条快照元数据,重新为目标节点分配一个大小为n的数组a4,并将这前n条快照元数据存入到a4中即可,该目标节点的关键字不变,后续在查找时不会再找到该a4所在节点;而a1中剩余的快照元数据之间的排列不是致密的,其间还可继续插入别的快照元数据,因而新创建一个节点,并为其分配一个存储容量为a1的存储容量与所述n之差的数组a5,比如当a1的存储容量为n的两倍时,该a5的存储容量大于n比如等于n的两倍,将所述a1中剩余的快照元数据作为另一段存入至所述a5中。该a作为目标数组,将所述t1存入所述a5,存储结束之后,a1可以被释放。

具体的,结合图10来说明步骤s241,图10中上面的一个数组为a1,下面的三个数组从左至由分别为a4和a5,在存储容量为256的a1中搜索到213条逻辑单元号的地址连续的快照元数据,包括6-218所在的快照元数据,213大于n=128,因而需要进行快照元数据的分裂,为目标节点重新分配存储容量为可存储128条快照元数据的a4,将a1中前128条快照元数据存储到该a4中,即将6-133所在的快照元数据存入到a4中;同时,新建一个节点,并为该节点分配存储容量为可存储256条快照元数据的数组a5,将a1中除前述128条之外剩余的快照元数据存储到该a5中,a5中还有剩余容量,t1可存入到a5中。

优选的,a5的存储容量等于所述a1的存储容量。

s242:如果所述s2是a1的尾端,在所述树结构中创建一节点并为创建的节点分配数组a6,并重新为所述目标节点分配的数组a7,所述a6和a7的存储容量均大于所述a1的存储容量的一半;将所述a1中记录的快照元数据均分成两段分别存入到所述a6和所述a7中。

由于s1是a1的尾端,即搜索到的是a1中排序最后的快照元数据,则说明a1中后n条快照元数据的逻辑单元号的地址是连续的,如果类似于步骤s241中的操作从a1的尾端开始往前n条快照元数据单独存储到一个数组上,后续在查找时还会找到该数组所在节点,因而,为避免不必要的创建节点的操作,将a1中的快照元数据均分为两段分别存入到a6和a7中。

由于a6和a7的存储容量均大于a1的存储容量的一半,因而,在存储完成后还有剩余容量,依据所述lba1从a6和a7中确定出存储t1的目标数组,将所述t1存入所述目标数组。比如,在指定顺序为从小到大的情况下,找到a6和a7中所在节点关键字更接近于lba1的一个数组作为目标数组。

优选的,a6和a7的存储容量均等于a1的存储容量。

s243:如果所述s1非a1的首端且所述s2非a1的尾端,重新为所述目标节点分配数组a8,在所述树结构中创建两个节点并分别为创建的节点分配数组a9、a10,所述a8的存储容量大于所述a1中s1之前的快照元数据的总量,所述a10的存储容量大于所述a1中s2之后的快照元数据的总量,所述a9的存储容量等于所述n;将所述a1中处于s1之前的快照元数据作为一段存入至所述a8中,将所述a1中从所述s1开始的n条快照元数据作为一段存入至所述a9中,将所述a1中剩余的快照元数据作为另一段存入至所述a10中。

由于s1非a1的首端且所述s2非a1的尾端,即a1中搜索到的是排序在中间的快照元数据,且数量大于n,则说明a1中有中间n条快照元数据的逻辑单元号的地址是连续的,这些快照元数据之间不可能再插入别的快照元数据,即这n条快照元数据是致密排列的,而a1中剩余的快照元数据之间的排列则不是致密的,其间还可继续插入别的快照元数据,且分布在这n条快照元数据的两侧,因而重新为目标节点分配一个大小为n的数组a8,新创建两个节点,并根据该两侧的数据量为该两个节点分配数组a9和a10,并将搜索到的前n条快照元数据存入到a9中,所述a1中剩余的两段快照元数据分别存入至a8和a10中,存储结束之后,a1可以被释放。a8和a10中还有剩余容量,依据所述lba1从a8和a10中确定出存储t1的目标数组,将所述t1存入目标数组。

具体的,结合图11来说明步骤s243,图11中上面的一个数组为a1,下面的三个数组从左至由分别为a8-a10,在存储容量为256条的a1中搜索到130条逻辑单元号的地址连续的快照元数据,包括90-219所在的快照元数据,130大于n=128,因而需要进行快照元数据的分裂,为目标节点重新分配存储容量为128条的a9,将a1中从s1开始的128条快照元数据存储到该a9中,即将90-217所在的快照元数据存入到a9中;同时,新建两个节点,并分别为该两个节点分配存储容量为64条的数组a8和128条的a10,由于a1中s1之前的数据有50条,因而a8的存储容量可以为64条快照元数据,将a1中s1之前的快照元数据存储到该a8中,由于a1中s2之后的数据有78条,因而a10的存储容量可以为128条快照元数据,将a1中s2之后的快照元数据存储到该a10中。

优选的,所述a8的存储容量大于所述a1中s1之前的快照元数据的总量、且小于等于所述a1的存储容量与n之差,所述a10的存储容量大于所述a1中s2之后的快照元数据的总量、且小于等于所述a1的存储容量与n之差。

在一个实施例中,该方法还进一步包括:

s250:若搜索到的快照元数据的数量小于等于第二设定容量n,则在所述树结构中创建一节点并为创建的节点分配数组a11,并重新为所述目标节点分配的数组a12,所述a11和a12的存储容量均大于所述a1的存储容量的一半;将所述a1中记录的快照元数据均分成两段分别存入到所述a11和所述a12中,依据所述lba1从a11和a12中确定出存储t1的目标数组,将所述t1存入所述目标数组。

步骤s250中执行的操作与步骤s242中的类似,在此不再赘述。

在一个实施例中,所述树结构的各个节点的关键字为对应数组中存储的逻辑单元号的最小地址,且所述树结构的各节点已按照关键字从小到大的顺序排序;

依据所述lba1确定所述树结构中与lba1匹配的目标节点,包括:

依据所述lba1按照从小到大的顺序搜索树结构中各节点的关键字,当搜索到首个比所述lba1大的关键字时,将搜索到的该关键字所在节点的前一个节点确定为所述目标节点;当未搜索到比所述lba1大的关键字时,将搜索的最后一个关键字所在节点确定为所述目标节点;

或者,

所述树结构的各个节点的关键字为对应数组中存储的逻辑单元号的最大地址,且所述树结构的各节点已按照关键字从大到小的顺序排序;

依据所述lba1确定所述树结构中与lba1匹配的目标节点,包括:

依据所述lba1按照从大到小的顺序搜索树结构中各节点的关键字,当搜索到首个比所述lba1小的关键字时,将搜索到的该关键字所在节点的前一个节点确定为所述目标节点;当未搜索到比所述lba1小的关键字时,将搜索的最后一个关键字所在节点确定为所述目标节点。

本发明还提供一种快照元数据存储装置,参看图4,该快照元数据存储装置包括:

树结构检查模块101,用于当获取到快照元数据t1时,检查用于存储快照元数据的树结构中是否存在节点;所述t1至少包括进行快照的逻辑单元号lun的地址lba1、及对应快照空间的地址lba2;

第一存储模块102,用于若存在,依据所述lba1确定所述树结构中与lba1匹配的目标节点,判断为所述目标节点分配的用于存储多条快照元数据的数组a1是否已存满,若否,依据所述lba1将所述t1存入到所述a1中。

根据本发明的一个实施例,该装置还进一步包括:

第二存储模块,用于若所述a1已存满,当所述a1的存储容量小于第一设定容量时,依据所述a1的存储容量重新为所述目标节点分配的数组a2,并将所述a1中已存储的快照元数据存入到所述a2中,依据所述lba1将所述t1存入到a2中;

其中,所述a2的存储容量大于所述a1的存储容量。

根据本发明的一个实施例,该装置还进一步包括:

搜索模块,用于若所述a1已存满,当所述a1的存储容量不小于第一设定容量时,搜索所述a1中逻辑单元号的地址连续的快照元数据;

第三存储模块,用于若搜索到的快照元数据的数量等于所述a1的存储容量,则在所述树结构中创建一节点并为创建的节点分配数组a3,并将所述t1存入到所述a3中。

根据本发明的一个实施例,所述a1中存储的快照元数据已按照逻辑单元号的地址的指定顺序排序;

该装置还进一步包括:

第四存储模块,用于若搜索到的快照元数据的数量小于所述a1的存储容量且大于第二设定容量n,识别搜索到的快照元数据中排序最前的快照元数据在所述a1中的位置s1、及搜索到的快照元数据中排序最后的快照元数据在所述a1中的位置s2,依据所述s1及s2在所述a1中的位置创建相应数量的节点并为所述目标节点与新创建的节点分配数组,将所述a1中的快照元数据分段存储到当前分配的数组中,并依据lba1将t1存入到当前分配的相应数组中。

根据本发明的一个实施例,所述指定顺序为从小到大的顺序,所述a1所在节点的查找该节点所需的关键字为所述a1的首端上存储的逻辑单元号的地址;

所述第四存储模块包括:

第一单元,用于如果所述s1是a1的首端,重新为所述目标节点分配数组a4,在所述树结构中创建一节点并为创建的节点分配数组a5,所述a4的存储容量等于所述n,所述a5的存储容量大于所述a1的存储容量与所述n之差;将所述a1中从处于首端的快照元数据开始的n条快照元数据作为一段存入至所述a4中,将所述a1中剩余的快照元数据作为另一段存入至所述a5中,将所述t1存入所述a5;

第二单元,用于如果所述s2是a1的尾端,在所述树结构中创建一节点并为创建的节点分配数组a6,并重新为所述目标节点分配的数组a7,所述a6和a7的存储容量均大于所述a1的存储容量的一半;将所述a1中记录的快照元数据均分成两段分别存入到所述a6和所述a7中,依据所述lba1从a6和a7中确定出存储t1的目标数组,将所述t1存入所述目标数组;

第三单元,用于如果所述s1非a1的首端且所述s2非a1的尾端,重新为所述目标节点分配的数组a8,在所述树结构中创建两个节点并分别为创建的节点分配数组a9、a10,所述a8的存储容量大于所述a1中s1之前的快照元数据的总量,所述a10的存储容量大于所述a1中s2之后的快照元数据的总量,所述a9的存储容量等于所述n;将所述a1中处于s1之前的快照元数据作为一段存入至所述a8中,将所述a1中从所述s1开始的n条快照元数据作为一段存入至所述a9中,将所述a1中剩余的快照元数据作为另一段存入至所述a10中,依据所述lba1从a8和a10中确定出存储t1的目标数组,将所述t1存入所述目标数组。

根据本发明的一个实施例,该装置还进一步包括:

第七存储模块,用于若搜索到的快照元数据的数量小于等于第二设定容量n,则在所述树结构中创建一节点并为创建的节点分配数组a11,并重新为所述目标节点分配的数组a12,所述a11和a12的存储容量均大于所述a1的存储容量的一半;将所述a1中记录的快照元数据均分成两段分别存入到所述a11和所述a12中,依据所述lba1从a11和a12中确定出存储t1的目标数组,将所述t1存入所述目标数组。

根据本发明的一个实施例,该装置还进一步包括:

第八存储模块,用于若所述树结构中不存在节点,在所述树结构中创建节点,为所述节点分配用于存储多条快照元数据的数组,并将所述t1存入到所述节点的数组中。

根据本发明的一个实施例,所述树结构的各节点的数组中存储的快照元数据是按照逻辑单元号的地址的指定顺序排序的。

根据本发明的一个实施例,

所述树结构的各个节点的关键字为对应数组中存储的逻辑单元号的最小地址,且所述树结构的各节点已按照关键字从小到大的顺序排序;

所述第一存储模块依据所述lba1确定所述树结构中与lba1匹配的目标节点时具体用于:

依据所述lba1按照从小到大的顺序搜索树结构中各节点的关键字,当搜索到首个比所述lba1大的关键字且该关键字非树结构中的最小关键字时,将搜索到的该关键字所在节点的前一个节点确定为所述目标节点;当未搜索到比所述lba1大的关键字或者该关键字为树结构中的最小关键字时,将搜索的最后一个关键字所在节点确定为所述目标节点;

或者,

所述树结构的各个节点的关键字为对应数组中存储的逻辑单元号的最大地址,且所述树结构的各节点已按照关键字从大到小的顺序排序;

所述第一存储模块依据所述lba1确定所述树结构中与lba1匹配的目标节点时具体用于:

依据所述lba1按照从大到小的顺序搜索树结构中各节点的关键字,当搜索到首个比所述lba1小的关键字且该关键字非树结构中的最大关键字时,将搜索到的该关键字所在节点的前一个节点确定为所述目标节点;当未搜索到比所述lba1小的关键字且该关键字为树结构中的最大关键字时,将搜索的最后一个关键字所在节点确定为所述目标节点。

上述装置中各个单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。

对于装置实施例而言,由于其基本对应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本发明方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。

本发明还提供一种电子设备,包括处理器及存储器;所述存储器存储有可被处理器调用的程序;其中,所述处理器执行所述程序时,实现如前述实施例中任意一项所述的快照元数据存储方法。

本发明快照元数据存储装置的实施例可以应用在电子设备上。以软件实现为例,作为一个逻辑意义上的装置,是通过其所在电子设备的处理器将非易失性存储器中对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,如图12所示,图12是本发明根据一示例性实施例示出的快照元数据存储装置100所在电子设备的一种硬件结构图,除了图12所示的处理器510、内存530、接口520、以及非易失性存储器540之外,实施例中装置100所在的电子设备通常根据该电子设备的实际功能,还可以包括其他硬件,对此不再赘述。

本发明还提供一种机器可读存储介质,其上存储有程序,该程序被处理器执行时,实现如前述实施例中任意一项所述的快照元数据存储方法。

本发明可采用在一个或多个其中包含有程序代码的存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。机器可读存储介质包括永久性和非永久性、可移动和非可移动媒体,可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。机器可读存储介质的例子包括但不限于:相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1