发明内容
本发明实施例公开了一种数据处理方法和装置,能够有效的提高快照的读取效率。
本发明实施例第一方面提供了一种数据处理方法,所述方法应用于存储系统中,所述存储系统的存储空间被划分为多个存储区域,每个存储区域包含至少一个数据块的集合,每个数据块的集合包括多个容量不同的数据块,所述方法包括:
接收主机发送的写数据请求,所述写数据请求携带数据卷的标识、逻辑地址和待写入数据;
根据所述数据卷的标识和所述逻辑地址确定增量数据,所述增量数据是指所述待写入数据相对于所述逻辑地址中原来存储的数据中发生变化的数据;
根据所述数据卷的标识确定所述数据卷对应的快照数据所在的目标存储区域;
在所述目标存储区域中确定目标数据块的集合;
在所述目标数据块的集合中确定目标数据块;
将所述增量数据写入所述目标数据块中。
在本发明实施例第一方面的第一种可能的实现方式中,所述目标数据块的集合是所述数据卷对应的最近一次的快照数据所在的数据块的集合。
在本发明实施例第一方面的第二种可能的实现方式中,所述目标数据块的集合是所述目标存储区域中存储快照数据最多的数据块的集合。
结合本发明实施例第一方面或者第一方面的第一种可能的实现方式或者第一方面的第二种可能的实现方式,在本发明实施例第一方面的第三种可能的实现方式中,将所述目标数据块的集合中包含的多个数据块按照容量从小到大的规则进行排序,其中,容量最小的两个数据块的容量相同,其余各个数据块的容量是前一个数据块的容量的两倍;
所述在所述目标数据块的集合中确定目标数据块包括:
根据所述增量数据的大小在所述排序后的目标数据块的集合中包含的数据块中查找所述目标数据块,所述目标数据块的容量大于等于所述增量数据的大小。
结合本发明实施例第一方面的第三种可能的实现方式,在本发明实施例第一方面的第四种可能的实现方式中,当目标数据块的容量与所述容量最小的数据块的容量相同,并且所述容量最小的两个数据块均已写入其他增量数据时;
将与所述容量最小的两个数据块相邻的数据块拆分成第一子数据块和第子二数据块,其中,所述与所述容量最小的两个数据块相邻的数据块的容量是所述容量最小的数据块的容量的两倍,所述第一子数据块和第二子数据块的容量相同,所述目标数据块是所述第一子数据块。
结合本发明实施例第一方面的,在本发明实施例第一方面的第五种可能的实现方式中,所述方法还包括:
接收所述主机发送的删除快照请求,所述删除快照请求用于指示删除所述目标数据块中存储的增量数据;
根据所述删除快照请求,删除所述目标数据块中存储的增量数据并释放所述目标数据块中保存所述增量数据的空间为可用空间。
结合本发明实施例第一方面的第五种可能的实现方式,在本发明实施例第一方面的第六种可能的实现方式中,所述方法还包括:判断所述目标数据块的容量是否和所述数据块的集合中的其他空闲的数据块的容量相同;
若是,则将所述释放存储空间后的目标数据块与所述数据块的集合中与所述目标数据块容量相同的空闲的数据块进行合并;
判断所述合并后的数据块的容量是否和所述数据块的集合中的其他空闲的数据块的容量相同,如果是,则继续进行合并,依此类推。
本发明实施例第二方面提供了一种数据处理装置,所述数据处理装置应用在存储系统中,所述存储系统的存储空间被划分为多个存储区域,每个存储区域包含至少一个数据块的集合,每个数据块的集合包括多个容量不同的数据块,所述数据处理装置为主机的写数据请求分配数据块,包括接收单元、分配单元、和写入单元,其中,
所述接收单元,用于接收主机发送的写数据请求,所述写数据请求携带数据卷的标识、逻辑地址和待写入数据;
所述分配单元,用于根据所述数据卷的标识和所述逻辑地址确定增量数据,所述增量数据是指所述待写入数据相对于所述逻辑地址中原来存储的数据中发生变化的数据;根据所述数据卷的标识确定所述数据卷对应的快照数据所在的目标存储区域;在所述目标存储区域中确定目标数据块的集合;在所述目标数据块的集合中确定目标数据块;
所述写入单元,用于将所述增量数据写入所述目标数据块中。
在本发明实施例第二方面的第一种可能的实现方式中,所述目标数据块的集合是所述数据卷对应的最近一次的快照数据所在的数据块的集合,或者是所述目标存储区域中存储快照数据最多的数据块的集合;
所述目标数据块的集合中包含的多个数据块按照容量从小到大的规则进行排序,其中,容量最小的两个数据块的容量相同,其余各个数据块的容量是前一个数据块的容量的两倍;
所述分配单元用于根据所述增量数据的大小在所述排序后的目标数据块的集合中包含的数据块中查找所述目标数据块,所述目标数据块的大小大于等于所述增量数据的大小。
结合本发明实施例第二方面的第一种可能的实现方式,在本发明实施例第二方面的第二种可能的实现方式中,所述分配单元,具体用于,当目标数据块的容量与所述容量最小的数据块的容量相同,并且所述容量最小的两个数据块均已写入其他增量数据时;
将与所述容量最小的两个数据块相邻的数据块拆分成第一子数据块和第子二数据块,其中,所述与所述容量最小的两个数据块相邻的数据块的容量是所述容量最小的数据块的容量的两倍,所述第一子数据块和第二子数据块的容量相同,选取目标数据块为所述第一子数据块。
结合本发明实施例第二方面的第二种可能的实现方式,在本发明实施例第二方面的第三种可能的实现方式中,所述数据处理装置还包括:删除模块;
所述删除模块,用于接收所述主机发送的删除快照请求,所述删除快照请求用于指示删除所述目标数据块中存储的增量数据;以及根据所述删除快照请求,删除所述目标数据块中存储的增量数据并释放所述目标数据块中保存所述增量数据的空间为可用空间。
结合本发明实施例第二方面的第三种可能的实现方式,在本发明实施例第二方面的第四种可能的实现方式中,所述删除模块,还用于判断所述目标数据块的容量是否和所述数据块的集合中的其他空闲的数据块的容量相同;若是,则将所述释放存储空间后的目标数据块与所述数据块的集合中与所述目标数据块容量相同的空闲的数据块进行合并;判断所述合并后的数据块的容量是否和所述数据块的集合中的其他空闲的数据块的容量相同,如果是,则继续进行合并,依此类推。
在本发明实施例中,可以对同一快照分配尽可能集中的空间,有利于提高读取效率。并且通过多次分配和释放后,本发明实施例提供的方法可以减少碎片。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例公开了一种数据处理方法,可以对同一快照分配尽可能集中的空间,有利于提高读取效率。
本发明实施例提供的数据处理方法可以在存储系统上实现,图1为本发明实施例的一个应用场景,该应用场景是包括主机、存储网关设备和存储设备的存储系统。
图1中的主机可以包括当前技术已知的任何计算设备,如服务器、台式计算机等等。在主机内部,安装有操作系统以及其他应用程序。
图1中的存储网关设备是指具有虚拟化的存储网关设备,具有虚拟化的存储网关设备是主机与存储设备之间的中间设备,通过映射或者抽象的方式屏蔽了存储设备中不同物理磁盘的复杂性和差异性,这样用户可以对所有存储设备进行统一管理和资源调度。
图1中的存储设备可以包括当前技术已知的存储设备,如独立磁盘冗余阵列(Redundant Arrays of Inexpensive Disks,RAID)、磁盘簇(Just a Bunch Of Disks,JBOD)、直接存取存储器(Direct Access Storage Device,DASD)的一个或多个互连的磁盘驱动器,诸如磁带库、一个或多个存储单元的磁带存储设备等。
下面对本发明实施例数据处理方法进行介绍。
如图2所示,该数据处理方法可以包括以下步骤。
S101、接收主机发送的写数据请求,所述写数据请求携带数据卷的标识、逻辑地址和待写入数据。
S102、确定目标数据块。具体地,根据数据卷的标识和逻辑地址确定增量数据,增量数据是指待写入数据相对于逻辑地址中原来存储的数据中发生变化的数据;根据数据卷的标识确定数据卷对应的快照数据所在的目标存储区域;在目标存储区域中确定目标数据块的集合;在目标数据块的集合中确定目标数据块。
数据卷是指由所述存储设备的物理存储空间映射而成的一段逻辑存储空间,例如逻辑单元号(Logic Unit Number,LUN),每个数据卷都有一个唯一的标识,例如ID。根据所述数据卷的ID可以唯一确定一个数据卷。
逻辑地址是指所述待写入数据待写入所述数据卷的位置信息,例如逻辑块地址(Logic Block Address,LBA)。
根据所述数据卷的ID以及LBA可以确定所述待写入数据待写入所述存储设备的位置。此外,所述写数据请求中还可以包括所述待写入数据的长度,在此不作限定。
增量数据是指待写入数据相对于逻辑地址中原来存储的数据中发生变化的数据。
需要说明的是,本实施例中,存储空间被划分为多个存储区域,每个存储区域包含至少一个数据块的集合,每个数据块的集合包括多个容量不同的数据块。请参见图3,图3是存储空间分配的一个示意图。该存储空间包括三个存储区域,即第一存储区域、第二存储区域及第三存储区域。每个存储区域包括至少一个数据块的集合,比如第一存储区域包括三个数据块的集合,分别是:第一数据块的集合、第二数据块的集合和第三数据块的集合;每个数据块的集合包括至少一个数据块,如图2所示,第一数据块的集合包括四个数据块,即第一数据块、第二数据块、第三数据块和第四数据块。假设第一数据块及第二数据块的容量都为J1,J1是第一数据块及第二数据块的容量大小,则第三数据块的容量为2*J1,第四数据块的容量为4*J1。当然,存储空间的分配不限于图2中所示。
为了描述方便,在本发明实施例中,将所述增量数据将要写入的数据块称为目标数据块,将所述目标数据块所在的数据块的集合称为目标数据块的集合,将所述目标数据的集合所在的存储区域称为目标存储区域。
为了更合理地分配存储空间,可以对一段时间内的写数据请求进行统计,根据统计结果来设计磁盘空间的具体结构。比如,当某种容量的增量数据比较多时,分配第一数据块的容量与其匹配的数据块集合的数量就多一些。
一种可选的实施方式是选取数据卷对应的最近一次的快照数据所在的数据块的集合作为目标数据块的集合。另一种可选的实施方式是选取目标存储区域中存储快照数据最多的数据块的集合作为目标数据块的集合。使得对同一快照集中分配存储空间。
需要说明的是,在本发明实施例中,快照是数据在某个时间点(拷贝开始的时间点)的映像。快照的目的是为数据卷创建一个在特定时间点的状态视图,通过这个视图只可以看到数据卷在创建时刻的数据,在此时间点之后数据卷的修改(有新的数据写入),不会反映在快照视图中。对存储设备进行快照处理时是以数据卷为单位实施的。例如,每隔一段预设的时间,对存储设备中一个数据卷的数据进行快照处理。因此,前面描述的数据卷对应的最近一次的快照数据是指在最近一次时间间隔前对所述数据卷进行的快照处理所得到的快照数据。
在目标数据块的集合中确定目标数据块包括:当增量数据的大小与各数据块的容量都不相同时,选取容量大于增量数据的数据块作为目标数据块。
当目标数据块的容量为J1即与容量最小的数据块的容量相同,若容量最小的第一数据块和第二数据块均已写入其他增量数据时,将与所述容量最小的两个数据块相邻的数据块即第三数据块拆分成容量相同的第一子数据块和第二子数据块,第一子数据块和第二子数据块的容量都为J1,选取第一子数据块作为确定的目标数据块。当然如果第一数据块未写入数据,则选取第一数据块作为确定的目标数据块;如果第一数据块写入了数据,第二数据块未写入数据,则选取第二数据块作为确定的目标数据块。当然如果第一数据块、第二数据块和第三数据块都已写入了数据,且第四数据块没有写入数据,则将第四数据块进行如上拆分,选取拆分后的一个子数据块作为确定的目标数据块。
如果目标数据块的集合中没有足够的剩余空间分配给目标数据,则在同一存储区域中选取相邻的存储块的集合作为目标数据块的集合,然后在新选取的目标数据块的集合中选取目标数据块。
在一种可选的实施方式中,可以采用链表的方式对目标数据块的集合中的可用空间进行管理。每个存储块的集合具有个数与其数据块个数相同的链表,按照序号依次命名各链表。其中,第一链表记录所述目标数据块的集合中所有的容量等于第一数据块的容量即J1的可用空间,第二链表记录所述目标数据块的集合中所有的容量为两倍第一数据块的容量即2*J1的可用空间,依此类推,下一链表对应所述目标数据块的集合中所有的容量为前一链表对应的容量两倍的可用空间。
在所述目标数据块的集合中选取目标数据块,包括如下步骤:
根据增量数据首先确定目标数据块的容量,如果目标数据块的集合中包括容量与增量数据的大小相同的数据块时,则目标数据块的容量为增量数据的大小;如果目标数据块的集合中没有容量与增量数据的大小相同的数据块时,则选取容量大于且最接近增量数据的大小的数据块的容量作为目标数据块的容量,假设目标数据块的容量为A。
判断容量与目标数据块的容量A相同的可用空间对应的链表是否为空,
如果不为空,则将所述链表中最后一个节点从链表中删除,并将所述节点对应的可用空间A确定为保存增量数据的空间,该可用空间所在的数据块为目标数据块;
如果为空,则检索下一链表即对应可用空间的大小为2A的链表,判断下一链表是否为空,如果下一链表为空,则继续检索下一链表的下一链表即对应可用空间的大小为4A的链表,依此类推,直至检索到某个链表不为空为止,该不为空的链表为被选取的链表,然后将所述被选取的链表的最后一个节点从被选取的链表中删除,同时,将所述被删除的节点对应的可用空间等分,分成第一子空间和第二子空间,然后在所述被选取的链表的上一链表中添加一个新节点,所述添加的新节点对应的可用空间为所述第二子空间;同时判断所述第一子空间的容量与前面确定的目标数据块的容量是否相同,如果相同,则将第一子空间确定为保存增量数据的空间,该第一子空间所在的数据块为目标数据块;如果第一子空间的容量大于前面确定的目标数据块的容量,则继续等分所述第一子空间,分成第三子空间和第四子空间,然后在所述被选取的链表的上一链表的上一链表中添加一个新节点,所述新添加的节点对应的可用空间为所述第四子空间;同时判断第三子空间的容量与前面确定的目标数据块的容量是否相同,如果相同,则将第三子空间确定为保存增量数据的空间,该第三子空间所在的数据块为目标数据块;依此类推,直至选取某个等分后的子空间的容量与前面确定的目标数块的大小相等的子空间作为保存增量数据的空间,同时在容量与前面确定的目标数据块的大小对应链表中添加一个新的节点,所述添加的新的节点对应最后一次等分后的另一子空间。
S103、将增量数据写入所述目标数据块中。
本实施例可以为同一快照的各增量数据分配尽可能集中的存储空间,有利于提高读取的效率。
进一步地,当接收到主机发送的删除快照请求时,所述删除快照请求用于指示删除所述快照对应的目标数据块中存储的增量数据;
根据所述删除快照请求,删除所述快照对应的目标数据块中存储的增量数据并释放所述目标数据块中保存所述增量数据的空间为可用空间。
具体地,判断所述目标数据块的容量是否和其所在的数据块的集合中的其他数据块的容量相同;若是,则将所述释放存储空间后的目标数据块与所述数据块的集合中与所述目标数据块容量相同的数据块进行合并;
判断所述合并后的数据块的容量是否和所述数据块的集合中的其他数据块的容量相同,如果是,则继续进行合并,依此类推。有利于为后续写数据请求提供大容量的可用空间。
在一种可选的实施方式中,可以采用链表的方式对目标数据块的集合中可用空间进行管理。接收删除所述虚拟快照的请求,
根据所述请求,释放为所述增量数据分配的空间A。
所述释放为所述增量数据分配的空间包括:
判断对应可用空间的容量大小为A的链表是否为空;
如果为空,在所述链表中添加一个节点,该节点对应的可用空间是为所述增量数据分配的空间;如果不为空,则继续判断所述为增量数据分配的空间与所述链表中最后一个节点对应的可用空间在磁盘上是否为连续;如果连续,则将所述链表中最后一个节点从所述链表中删除,在所述链表的下一链表即对应可用空间的容量为2A的链表中添加一个新节点,该添加的新节点对应的可用空间是所述为增量数据分配的空间和前面所述链表的最后一个节点所对应的可用空间合并后的区域,则继续释放该区域;如果不连续,则在所述链表中添加一个新的节点,该添加的新节点对应的可用空间为所述为增量数据分配的空间;依此类推,直至某个下一链表中不存在某个节点,该节点对应的可用空间与待释放的区域的容量相同且地址连续为止,在容量与需要释放的区域的容量相同的对应链表中添加一个新节点,该添加的新节点对应的可用空间为所述需要释放的区域。
本发明实施例提供的方法由于为同一快照分配的空间比较集中,释放时又将容量相同的空间进行了合并,所以该方法还可以减少磁盘碎片。
请参阅图4,图4是本发明实施例公开的一种数据处理装置的结构示意图。包括接收模块,分配模块和写入模块。
其中,接收单元,用于接收主机发送的写数据请求,所述写数据请求携带数据卷的标识、逻辑地址和待写入数据;
分配单元,用于根据所述数据卷的标识和所述逻辑地址确定增量数据,所述增量数据是指所述待写入数据相对于所述逻辑地址中原来存储的数据中发生变化的数据;根据所述数据卷的标识确定所述数据卷对应的快照数据所在的目标存储区域;在所述目标存储区域中确定目标数据块的集合;在所述目标数据块的集合中确定目标数据块;在一种可选的实施方式中,分配单元采用链表的方式对目标数据块的集合中的可用空间进行管理。每个存储块的集合具有个数与其数据块个数相同的链表,按照序号依次命名各链表。其中,第一链表记录所述目标数据块的集合中所有的容量等于第一数据块的容量即J1的可用空间,第二链表记录所述目标数据块的集合中所有的容量为两倍第一数据块的容量即2*J1的可用空间,依此类推,下一链表对应所述目标数据块的集合中所有的容量为前一链表对应的容量两倍的可用空间。
在所述目标数据块的集合中选取目标数据块,包括如下步骤:
根据增量数据首先确定目标数据块的容量,如果目标数据块的集合中包括容量与增量数据的大小相同的数据块时,则目标数据块的容量为增量数据的大小;如果目标数据块的集合中没有容量与增量数据的大小相同的数据块时,则选取容量大于且最接近增量数据的大小的数据块的容量作为目标数据块的容量,假设目标数据块的容量为A。
判断容量与目标数据块的容量A相同的可用空间对应的链表是否为空,
如果不为空,则将所述链表中最后一个节点从链表中删除,并将所述节点对应的可用空间A确定为保存增量数据的空间,该可用空间所在的数据块为目标数据块;
如果为空,则检索下一链表即对应可用空间的大小为2A的链表,判断下一链表是否为空,如果下一链表为空,则继续检索下一链表的下一链表即对应可用空间的大小为4A的链表,依此类推,直至检索到某个链表不为空为止,该不为空的链表为被选取的链表,然后将所述被选取的链表的最后一个节点从被选取的链表中删除,同时,将所述被删除的节点对应的可用空间等分,分成第一子空间和第二子空间,然后在所述被选取的链表的上一链表中添加一个新节点,所述添加的新节点对应的可用空间为所述第二子空间;同时判断所述第一子空间的容量与前面确定的目标数据块的容量是否相同,如果相同,则将第一子空间确定为保存增量数据的空间,该第一子空间所在的数据块为目标数据块;如果第一子空间的容量大于前面确定的目标数据块的容量,则继续等分所述第一子空间,分成第三子空间和第四子空间,然后在所述被选取的链表的上一链表的上一链表中添加一个新节点,所述新添加的节点对应的可用空间为所述第四子空间;同时判断第三子空间的容量与前面确定的目标数据块的容量是否相同,如果相同,则将第三子空间确定为保存增量数据的空间,该第三子空间所在的数据块为目标数据块;依此类推,直至选取某个等分后的子空间的容量与前面确定的目标数块的大小相等的子空间作为保存增量数据的空间,同时在容量与前面确定的目标数据块的大小对应链表中添加一个新的节点,所述添加的新的节点对应最后一次等分后的另一子空间。
写入单元,用于将所述增量数据写入所述目标数据块中。
在一种可选的实施方式中,所述目标数据块的集合是所述数据卷对应的最近一次的快照数据所在的数据块的集合,另一种可选的实施方式是,目标存储区域中存储快照数据最多的数据块的集合作为目标数据块的集合。
所述目标数据块的集合中包含的多个数据块按照容量从小到大的规则进行排序,其中,容量最小的两个数据块的容量相同,其余各个数据块的容量是前一个数据块的容量的两倍;
所述分配单元用于根据所述增量数据的大小在所述排序后的目标数据块的集合中包含的数据块中查找所述目标数据块,所述目标数据块的容量大于等于所述增量数据的大小。
在本发明的另一实施例中,数据处理装置还包括删除模块,用于接收所述主机发送的删除快照请求,所述删除快照请求用于指示删除所述目标数据块中存储的增量数据;以及根据所述删除快照请求,删除所述目标数据块中存储的增量数据并释放所述目标数据块中保存所述增量数据的空间为可用空间。删除模块,还用于判断所述目标数据块的容量是否和所述数据块的集合中的其他空闲的数据块的容量相同;若是,则将所述释放存储空间后的目标数据块与所述数据块的集合中与所述目标数据块容量相同的空闲的数据块进行合并;判断所述合并后的数据块的容量是否和所述数据块的集合中的其他空闲的数据块的容量相同,如果是,则继续进行合并,依此类推。
一种可选的实施方式是在一种可选的实施方式中,可以采用链表的方式对目标数据块的集合中可用空间进行管理。接收删除所述虚拟快照的请求,
根据所述请求,释放为所述增量数据分配的空间A。
所述释放为所述增量数据分配的空间包括:
判断对应可用空间的容量大小为A的链表是否为空;
如果为空,在所述链表中添加一个节点,该节点对应的可用空间是为所述增量数据分配的空间;
如果不为空,则继续判断所述为增量数据分配的空间与所述链表中最后一个节点对应的可用空间在磁盘上是否为连续;如果连续,则将所述链表中最后一个节点从所述链表中删除,在所述链表的下一链表即对应可用空间的容量为2A的链表中添加一个新节点,该添加的新节点对应的可用空间是所述为增量数据分配的空间和前面所述链表的最后一个节点所对应的可用空间合并后的区域,则继续释放该区域;如果不连续,则在所述链表中添加一个新的节点,该添加的新节点对应的可用空间为所述为增量数据分配的空间;依此类推,直至某个下一链表中不存在某个节点,该节点对应的可用空间与待释放的区域的容量相同且地址连续为止,在容量与需要释放的区域的容量相同的对应链表中添加一个新节点,该添加的新节点对应的可用空间为所述需要释放的区域。
本发明实施例提供的方法由于为同一快照分配的空间比较集中,释放时又将容量相同的空间进行了合并,所以该方法还可以减少磁盘碎片。
本发明实施例进一步公开了一种计算机存储介质,该计算机存储介质存储有程序,该程序执行时包括如图2所示方法的全部步骤。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令服务器、虚拟化网关、桌面操作系统或者其他操作系统以及存储设备等相关的硬件来完成,该程序可以存储于服务器、虚拟化网关、磁盘空间管理装置等具有的计算机可读存储介质中,并被服务器、虚拟化网关、磁盘空间管理装置中的至少一个处理器来执行,以实现为快照的增量数据分配或释放空间。其中,所述存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(Random Access Memory,RAM)、磁盘或光盘等。
以上对本发明实施例公开的数据处理方法、装置和系统进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。