向生产卷写入数据的方法和装置转让专利

申请号 : CN201110255006.X

文献号 : CN102289510B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张李秋杨彬吴佳

申请人 : 华为数字技术(成都)有限公司

摘要 :

本发明实施例提供一种向生产卷写入数据的方法和装置,该向生产卷写入数据的方法包括:接收数据操作请求,所述数据操作请求携带待写入数据,以及所述待写入数据的起始地址和长度;当生产卷中所述待写入数据的目标区域未进行过写前拷贝时,根据所述待写入数据的起始地址、长度和预先设定的存储粒度确定需要进行写前拷贝的数据块;对所述需要进行写前拷贝的数据块进行写前拷贝,并生成与所述数据块对应的映射标记;将所述待写入数据写入进行写前拷贝之后的数据块。本发明实施例可以实现动态调整映射标记对应的生产卷上实际数据块的大小,提高系统性能和节约资源池资源。

权利要求 :

1.一种向生产卷写入数据的方法,其特征在于,包括:

接收数据操作请求,所述数据操作请求携带待写入数据,以及所述待写入数据的起始地址和长度;

当生产卷中所述待写入数据的目标区域未进行过写前拷贝时,根据所述待写入数据的起始地址、长度和预先设定的存储粒度确定需要进行写前拷贝的数据块;

当所述生产卷中所述待写入数据的目标区域所覆盖的数据块中存在进行过写前拷贝的数据块时,根据所述进行过写前拷贝的数据块的数量、所述进行过写前拷贝的数据块的大小和所述目标区域的大小,将所述待写入数据拆分为一段待写入数据段,或者根据所述进行过写前拷贝的数据块的数量、所述进行过写前拷贝的数据块的大小、所述进行过写前拷贝的数据块在所述目标区域中的位置和所述目标区域的大小将所述待写入数据拆分为至少两段待写入数据段,使拆分后获得的至少两段待写入数据段形成两组,一组待写入数据段的目标区域只覆盖进行过写前拷贝的数据块,另一组待写入数据段的目标区域只覆盖未进行过写前拷贝的数据块;

对所述需要进行写前拷贝的数据块进行写前拷贝,并生成与所述数据块对应的映射标记;

将所述待写入数据写入进行写前拷贝之后的数据块。

2.根据权利要求1所述的方法,其特征在于,所述根据所述待写入数据的起始地址、长度和预先设定的存储粒度确定需要进行写前拷贝的数据块包括:根据所述待写入数据的长度和预先设定的存储粒度,确定需要进行写前拷贝的数据块的大小;

根据所述待写入数据的起始地址和所述需要进行写前拷贝的数据块的大小,确定所述需要进行写前拷贝的数据块的位置。

3.根据权利要求1所述的方法,其特征在于,所述根据所述进行过写前拷贝的数据块的数量、所述进行过写前拷贝的数据块的大小、所述进行过写前拷贝的数据块在所述目标区域中的位置和所述目标区域的大小将所述待写入数据拆分为至少两段待写入数据段之后,还包括: 判断所述至少两段待写入数据段中每段待写入数据段的待写入的目标区域所覆盖的数据块是否进行过写前拷贝; 对于所述至少两段待写入数据段中每段待写入数据段的待写入的目标区域所覆盖的数据块是未进行过写前拷贝的待写入数据段,根据所述至少两段待写入数据段中每段待写入数据段的起始地址、长度和预先设定的存储粒度确定需要进行写前拷贝的数据块;对所述根据所述至少两段待写入数据段中每段待写入数据段的起始地址、长度和预先设定的存储粒度确定的需要进行写前拷贝的数据块进行写前拷贝,并生成与所述数据块对应的映射标记;将所述至少两段待写入数据段中每段待写入数据段中的数据写入进行写前拷贝之后的数据块; 对于至少两段待写入数据段中每段待写入数据段的待写入的目标区域所覆盖的数据块是进行过写前拷贝的待写入数据段,将所述至少两段待写入数据段中每段待写入数据段中的数据写入所述至少两段待写入数据段中每段待写入数据段的待写入的目标区域所覆盖的数据块。

4.根据权利要求1-3任意一项所述的方法,其特征在于,所述将所述待写入数据写入进行写前拷贝之后的数据块之后,还包括: 对映射标记对应的数据块进行检测,将物理上连续的数据块对应的映射标记合并为一个映射标记。

5.一种向生产卷写入数据的装置,其特征在于,包括:

接收模块,用于接收数据操作请求,所述数据操作请求携带待写入数据,以及所述待写入数据的起始地址和长度; 确定模块,用于当所述生产卷中所述待写入数据的目标区域未进行过写前拷贝时,根据所述待写入数据的起始地址、长度和预先设定的存储粒度确定需要进行写前拷贝的数据块; 拆分模块,用于当所述生产卷中所述待写入数据的目标区域所覆盖的数据块中存在进行过写前拷贝的数据块时,根据所述进行过写前拷贝的数据块的数量、所述进行过写前拷贝的数据块的大小和所述目标区域的大小,将所述待写入数据拆分为一段待写入数据段,或者根据所述进行过写前拷贝的数据块的数量、所述进行过写前拷贝的数据块的大小、所述进行过写前拷贝的数据块在所述目标区域中的位置和所述目标区域的大小将所述待写入数据拆分为至少两段待写入数据段,使拆分后获得的至少两段待写入数据段形成两组,一组待写入数据段的目标区域只覆盖进行过写前拷贝的数据块,另一组待写入数据段的目标区域只覆盖未进行过写前拷贝的数据块; 生成模块,用于对所述确定模块确定的需要进行写前拷贝的数据块进行写前拷贝,并生成与所述数据块对应的映射标记; 写入模块,用于将所述接收模块接收的待写入数据写入进行写前拷贝之后的数据块。

6.根据权利要求5所述的装置,其特征在于,

所述确定模块,具体用于根据所述待写入数据的长度和预先设定的存储粒度确定需要进行写前拷贝的数据块的大小,并根据所述待写入数据的起始地址和所述需要进行写前拷贝的数据块的大小确定所述需要进行写前拷贝的数据块的位置。

7.根据权利要求5所述的装置,其特征在于,还包括:

判断模块,用于判断根据所述进行过写前拷贝的数据块的数量、所述进行过写前拷贝的数据块的大小、所述进行过写前拷贝的数据块在所述目标区域中的位置和所述目标区域的大小将所述待写入数据拆分为至少两段待写入数据段之后,每段待写入数据段的待写入的目标区域所覆盖的数据块是否进行过写前拷贝; 所述确定模块,还用于当所述至少两段待写入数据段中每段待写入数据段的待写入的目标区域所覆盖的数据块未进行过写前拷贝时,根据所述至少两段待写入数据段中每段待写入数据段的起始地址、长度和预先设定的存储粒度确定需要进行写前拷贝的数据块; 所述生成模块,还用于对所述确定模块根据所述至少两段待写入数据段中每段待写入数据段的起始地址、长度和预先设定的存储粒度确定的需要进行写前拷贝的数据块进行写前拷贝,并生成与所述数据块对应的映射标记; 所述写入模块,还用于将所述至少两段待写入数据段中每段待写入数据段中的数据写入进行写前拷贝之后的数据块;以及当所述至少两段待写入数据段中每段待写入数据段的待写入的目标区域所覆盖的数据块进行过写前拷贝时,将所述至少两段待写入数据段中每段待写入数据段中的数据写入所述至少两段待写入数据段中每段待写入数据段的待写入的目标区域所覆盖的数据块。

8.根据权利要求5-7任意一项所述的装置,其特征在于,还包括:

合并模块,用于对映射标记对应的数据块进行检测,将物理上连续的数据块对应的映射标记合并为一个映射标记。

说明书 :

向生产卷写入数据的方法和装置

技术领域

[0001] 本发明实施例涉及通信技术领域,尤其涉及一种向生产卷写入数据的方法和装置。

背景技术

[0002] 随着信息科学技术的不断发展和因特网的广泛应用,产生的数据量以令人难以置信的速度迅猛增长,存储系统的设计逐渐成为应用系统设计需要考虑的问题,业务的进步也对数据处理技术在可用性、可靠性和可扩展性等方面提出了更高的要求,同时也在大力倡导绿色存储,因此对存储系统资源的合理分配和利用也提出了更高的要求。一方面,数据保护、数据备份和数据并行利用(如测试、报表生成和/或数据分析等)的需求显得越来越重要;另一方面,联机商业模式要求系统不停的运转,停机则意味着业务的停顿和商业机会的丢失。由此,数据快照技术应运而生。
[0003] 快照是对一个数据对象产生完全可用的副本,包含该数据对象在某一时间点的映像。利用数据快照技术,可以在瞬间获得完全可用的生产卷数据的即时时刻的一致性映像(即快照),并占用较少的存储空间;快照创建后,对快照的访问可以和对生产卷的访问同时进行,从而不影响生产卷的业务连续性。其中,生产卷,也称为源逻辑单元号(Logic Unit Number;以下简称:LUN)或者源物理卷,是为存储系统的基本业务应用提供数据存储和访问空间的卷,部署在存储阵列中。
[0004] 在创建快照时,需要建立一份快照时刻的逻辑副本,即生成一个映射表,指示快照对应的实际数据的存放位置。快照刚创建时,映射表中的指针都指向生产卷中,映射表中的每一个记录对应生产卷上的一个实际数据块。
[0005] 当要对生产卷进行修改时,则需要先判断待修改部分的数据是否已作过写前拷贝(Copy-On-Write),如果未做过写前拷贝,则需要先进行写前拷贝,即将待修改部分的数据复制到资源池,并修改映射表,使指针指向资源池中的相应位置,然后再对生产卷进行修改;如果待修改部分的数据已做过写前拷贝,则可以直接修改生产卷的该部分的数据。如果生产卷有多个快照,则在对生产卷进行修改之前,需对每个快照的映射信息进行如前所述的判断,并根据判断结果确定是否进行写前拷贝,然后才可以对生产卷进行修改。其中,资源池用于存放快照的不同于生产卷的数据,包括写生产卷时产生的写前拷贝数据,资源池与生产卷部署在同一存储阵列中。
[0006] 数据快照技术在保障业务连续性的前提下,产生了数据对象在某时刻的数据一致性映像,在一定程度上有力保障了数据的可靠性和完整性。但是,由于映射表中的映射标记对应的生产卷上实际数据块的大小是固定的,因此存在降低系统性能和浪费资源池资源的问题,并且长时间读写后,映射表中的映射标记随机分布,因此在读写快照或生产卷时需要进行多次重定向,且每次重定向对应的位置是随机的,读写性能将大为下降。

发明内容

[0007] 本发明实施例提供一种向生产卷写入数据的方法和装置,以实现动态调整映射标记对应的生产卷上实际数据块的大小,提高系统性能和节约资源池资源。
[0008] 本发明实施例提供一种向生产卷写入数据的方法,包括:
[0009] 接收数据操作请求,所述数据操作请求携带待写入数据,以及所述待写入数据的起始地址和长度;
[0010] 当生产卷中所述待写入数据的目标区域未进行过写前拷贝时,根据所述待写入数据的起始地址、长度和预先设定的存储粒度确定需要进行写前拷贝的数据块;
[0011] 对所述需要进行写前拷贝的数据块进行写前拷贝,并生成与所述数据块对应的映射标记;
[0012] 将所述待写入数据写入进行写前拷贝之后的数据块。
[0013] 本发明实施例还提供一种向生产卷写入数据的装置,包括:
[0014] 接收模块,用于接收数据操作请求,所述数据操作请求携带待写入数据,以及所述待写入数据的起始地址和长度;
[0015] 确定模块,用于当所述生产卷中所述待写入数据的目标区域未进行过写前拷贝时,根据所述待写入数据的起始地址、长度和预先设定的存储粒度确定需要进行写前拷贝的数据块;
[0016] 生成模块,用于对所述确定模块确定的需要进行写前拷贝的数据块进行写前拷贝,并生成与所述数据块对应的映射标记;
[0017] 写入模块,用于将所述接收模块接收的待写入数据写入进行写前拷贝之后的数据块。
[0018] 通过本发明实施例,接收到待写入数据之后,当生产卷中待写入数据的目标区域未进行过写前拷贝时,根据待写入数据的起始地址、长度和预先设定的存储粒度确定需要进行写前拷贝的数据块;对上述需要进行写前拷贝的数据块进行写前拷贝,并生成与上述数据块对应的映射标记;将待写入数据写入进行写前拷贝之后的数据块。从而可以实现动态调整映射标记对应的生产卷上实际数据块的大小,提高系统性能和节约资源池资源。

附图说明

[0019] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0020] 图1为本发明向生产卷写入数据的方法一个实施例的流程图;
[0021] 图2为本发明向生产卷写入数据的方法另一个实施例的流程图;
[0022] 图3为本发明数据写入过程一个实施例的示意图;
[0023] 图4为本发明数据写入过程另一个实施例的示意图;
[0024] 图5为本发明数据写入过程再一个实施例的示意图;
[0025] 图6为本发明合并连续的映射标记一个实施例的示意图;
[0026] 图7为本发明向生产卷写入数据的装置一个实施例的结构示意图;
[0027] 图8为本发明向生产卷写入数据的装置另一个实施例的结构示意图。

具体实施方式

[0028] 为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0029] 图1为本发明向生产卷写入数据的方法一个实施例的流程图,如图1所示,该向生产卷写入数据的方法可以包括:
[0030] 步骤101,接收数据操作请求,该数据操作请求携带待写入数据,以及上述待写入数据的起始地址和长度。
[0031] 步骤102,当生产卷中上述待写入数据的目标区域未进行过写前拷贝时,根据上述待写入数据的起始地址、待写入数据的长度和预先设定的存储粒度确定需要进行写前拷贝的数据块。
[0032] 具体地,根据上述待写入数据的起始地址、长度和预先设定的存储粒度确定需要进行写前拷贝的数据块可以为:生产卷所在的存储阵列根据上述待写入数据的长度和预先设定的存储粒度确定需要进行写前拷贝的数据块的大小,并根据上述待写入数据的起始地址和上述需要进行写前拷贝的数据块的大小确定上述需要进行写前拷贝的数据块的位置。
[0033] 本实施例中,上述预先设定的存储粒度可以为:需要进行写前拷贝的数据块的大小为预先设定的存储粒度的最小值的2的幂次方倍;上述预先设定的存储粒度的最小值为2的幂次方倍,例如:可以是访问磁盘的最小输入输出(Input Output;以下简称:IO)粒度,即一个扇区的大小。
[0034] 步骤103,对需要进行写前拷贝的数据块进行写前拷贝,并生成与上述数据块对应的映射标记。
[0035] 其中,映射标记用于记录进行写前拷贝的数据块的相关信息,为了进一步的说明映射标记,举例来说,图书馆馆藏书籍,如果要借阅,可以通过记录的索引号去查找对应的书籍,这里,映射标记就可以理解为索引号,进行写前拷贝的数据块就可以理解为书籍。另外,映射标记还可以为指针等,本发明实施例对映射标记的形式不作限定,只要映射标记可以记录进行写前拷贝的数据块的相关信息即可。
[0036] 步骤104,将上述待写入数据写入进行写前拷贝之后的数据块。
[0037] 进一步地,在将上述待写入数据成功写入进行写前拷贝之后的数据块之后,生产卷所在的存储阵列返回写操作成功响应;或者,在将上述待写入数据写入进行写前拷贝之后的数据块失败之后,返回写操作失败响应。
[0038] 另外,本实施例中,当生产卷中上述待写入数据的目标区域所覆盖的数据块中存在至少一个进行过写前拷贝的数据块时,生产卷所在的存储阵列根据上述进行过写前拷贝的数据块的数量、上述进行过写前拷贝的数据块的大小和上述目标区域的大小,将待写入数据拆分为一段待写入数据段,或者根据上述进行过写前拷贝的数据块的数量、上述进行过写前拷贝的数据块的大小、上述进行过写前拷贝的数据块在目标区域中的位置和上述目标区域的大小将待写入数据拆分为至少两段待写入数据段。其中,该目标区域的大小即为待写入数据的长度。
[0039] 举例来说,当生产卷中上述待写入数据的目标区域所覆盖的数据块中只存在一个进行过写前拷贝的数据块,且该进行过写前拷贝的数据块的大小与上述目标区域的大小相同时,只需将上述待写入数据拆分为一段待写入数据段,这时也相当于未对上述待写入数据进行拆分。
[0040] 当生产卷中上述待写入数据的目标区域所覆盖的数据块中只存在一个进行过写前拷贝的数据块,且该进行过写前拷贝的数据块小于上述目标区域的大小时,如果该进行过写前拷贝的数据块位于上述目标区域的端点位置,则可以将上述待写入数据拆分为至少两段待写入数据段;如果该进行过写前拷贝的数据块位于上述目标区域的中部,则需要将上述待写入数据拆分为至少三段待写入数据段。
[0041] 例如:假设待写入数据的目标区域覆盖了3个数据块,依次为数据块1、数据块2和数据块3;如果数据块1或数据块3进行过写前拷贝,即进行过写前拷贝的数据块位于上述目标区域的端点位置,则将待写入数据拆分为两段待写入数据段即可,拆分后的一段待写入数据段的目标区域为数据块1或数据块3,拆分后的另一段待写入数据段的目标区域为除数据块1或数据块3之外的两块数据块;如果数据块2进行过写前拷贝,即进行过写前拷贝的数据块位于上述目标区域的中部,则需要将待写入数据拆分为三段待写入数据段,拆分后的一段待写入数据段的目标区域为数据块1,拆分后的另一段待写入数据段的目标区域为数据块2,拆分后的再一段待写入数据段的目标区域为数据块3。
[0042] 本实施例以上述待写入数据的目标区域所覆盖的数据块中只存在一个进行过写前拷贝的数据块为例对待写入数据的拆分方式为例进行说明,当待写入数据的目标区域所覆盖的数据块中存在两个或两个以上进行过写前拷贝的数据块时,待写入数据的拆分方式与上类似,在此不再赘述,简单来说,就是要使拆分后获得的至少两段待写入数据段形成两组,一组待写入数据段的目标区域只覆盖进行过写前拷贝的数据块,另一组待写入数据段的目标区域只覆盖未进行过写前拷贝的数据块。
[0043] 然后,生产卷所在的存储阵列判断上述至少两段待写入数据段中每段待写入数据段待写入的目标区域所覆盖的数据块是否进行过写前拷贝;
[0044] 对于待写入的目标区域所覆盖的数据块未进行过写前拷贝的待写入数据段,上述存储阵列根据上述待写入数据段的起始地址、长度和预先设定的存储粒度确定需要进行写前拷贝的数据块;对上述需要进行写前拷贝的数据块进行写前拷贝,并生成与该数据块对应的映射标记;最后,将上述待写入数据段中的数据写入进行写前拷贝之后的数据块。
[0045] 对于待写入的目标区域所覆盖的数据块进行过写前拷贝的待写入数据段,将上述待写入数据段中的数据写入上述待写入数据段待写入的目标区域所覆盖的数据块。
[0046] 进一步地,在上述至少两段待写入数据段均写入成功之后,上述存储阵列返回写操作成功响应;或者,在上述至少两段待写入数据段中至少一段待写入数据段写入失败之后,上述存储阵列返回写操作失败响应。
[0047] 本实施例中,步骤104之后,生产卷所在的存储阵列还可以对映射标记对应的数据块进行检测,将物理上连续的数据块对应的映射标记合并为一个映射标记;从而可以减少内存资源的消耗,提升系统性能。举例来说,生产卷所在的存储阵列对映射标记对应的数据块进行检测之后,发现映射标记1对应数据块1,映射标记3对应数据块2,假设数据块1所在区域的物理地址为0~9,数据块2所在区域的物理地址为10~19,则数据块1和数据块2为物理上连续的数据块,因此可以将数据块1对应的映射标记1和数据块2对应的映射标记3合并为一个映射标记。
[0048] 上述实施例可以实现动态调整映射标记对应的生产卷上实际数据块的大小,提高系统性能和节约资源池资源;并且上述实施例支持对连续的映射标记进行合并,从而可以减少内存资源的消耗,提升系统性能。
[0049] 图2为本发明向生产卷写入数据的方法另一个实施例的流程图,如图2所示,该向生产卷写入数据的方法可以包括:
[0050] 步骤201,生产卷所在的存储阵列接收数据操作请求,该数据操作请求携带待写入数据,以及上述待写入数据的起始地址和长度。
[0051] 步骤202,判断生产卷中上述待写入数据的目标区域是否进行过写前拷贝;如果否,则执行步骤203;如果生产卷中上述待写入数据的目标区域所覆盖的数据块中存在至少一个进行过写前拷贝的数据块,则执行步骤206。
[0052] 具体地,生产卷,也称为源LUN,可以保存在主机的内存中的映射表中,存储阵列正常运行时生产卷是在内存中进行读写,系统下电后最终会保存到存储阵列上。
[0053] 判断映射表中是否存在与该生产卷中上述待写入数据的目标区域所覆盖的数据块对应的映射标记;如果映射表中不存在与上述目标区域所覆盖的数据块对应的映射标记,则可以确定生产卷中上述待写入数据的目标区域未进行过写前拷贝;如果映射表中存在与上述目标区域所覆盖的至少一个数据块对应的映射标记,则可以确定生产卷中上述待写入数据的目标区域所覆盖的数据块中存在至少一个进行过写前拷贝的数据块。
[0054] 步骤203,生产卷所在的存储阵列根据上述待写入数据的起始地址、长度和预先设定的存储粒度确定需要进行写前拷贝的数据块。
[0055] 具体的,上述存储阵列可以根据上述待写入数据的长度和预先设定的存储粒度确定需要进行写前拷贝的数据块的大小,并根据上述待写入数据的起始地址和上述需要进行写前拷贝的数据块的大小确定上述需要进行写前拷贝的数据块的位置。
[0056] 本实施例中,上述预先设定的存储粒度可以为:需要进行写前拷贝的数据块的大小为预先设定的存储粒度的最小值的2的幂次方倍;上述预先设定的存储粒度的最小值为2的幂次方倍,例如:可以是访问磁盘的最小IO粒度,即一个扇区的大小。
[0057] 步骤204,生产卷所在的存储阵列对上述需要进行写前拷贝的数据块进行写前拷贝,并生成与上述数据块对应的映射标记。
[0058] 进一步地,可以将生成的映射标记记录到上述映射表中。
[0059] 步骤205,生产卷所在的存储阵列将上述待写入数据写入进行写前拷贝之后的数据块;然后执行步骤210。
[0060] 步骤206,生产卷所在的存储阵列根据进行过写前拷贝的数据块的数量、上述进行过写前拷贝的数据块的大小和上述目标区域的大小,将待写入数据拆分为一段待写入数据段,或者根据进行过写前拷贝的数据块的数量、进行过写前拷贝的数据块的大小、上述进行过写前拷贝的数据块在目标区域中的位置和上述目标区域的大小将待写入数据拆分为至少两段待写入数据段。
[0061] 举例来说,当生产卷中上述待写入数据的目标区域所覆盖的数据块中只存在一个进行过写前拷贝的数据块,且该进行过写前拷贝的数据块的大小与上述目标区域的大小相同时,只需将上述待写入数据拆分为一段待写入数据段,这时也相当于未对上述待写入数据进行拆分;当生产卷中上述待写入数据的目标区域所覆盖的数据块中只存在一个进行过写前拷贝的数据块,且该进行过写前拷贝的数据块的大小小于上述目标区域的大小时,如果该进行过写前拷贝的数据块位于上述目标区域的端点位置,则可以将上述待写入数据拆分为至少两段待写入数据段;如果该进行过写前拷贝的数据块位于上述目标区域的中部,则需要将上述待写入数据拆分为至少三段待写入数据段;例如:假设待写入数据的目标区域覆盖了3个数据块,依次为数据块1、数据块2和数据块3;如果数据块1或数据块3进行过写前拷贝,即进行过写前拷贝的数据块位于上述目标区域的端点位置,则将待写入数据拆分为两段待写入数据段即可,拆分后的一段待写入数据段的目标区域覆盖数据块1或数据块3,拆分后的另一段待写入数据段的目标区域覆盖除数据块1或数据块3之外的两块数据块;如果数据块2进行过写前拷贝,即进行过写前拷贝的数据块位于上述目标区域的中部,则需要将待写入数据拆分为三段待写入数据段,拆分后的一段待写入数据段的目标区域覆盖数据块1,拆分后的另一段待写入数据段的目标区域覆盖数据块2,拆分后的再一段待写入数据段的目标区域覆盖数据块3。
[0062] 本实施例以上述待写入数据的目标区域所覆盖的数据块中只存在一个进行过写前拷贝的数据块为例对待写入数据的拆分方式为例进行说明,当待写入数据的目标区域所覆盖的数据块中存在两个或两个以上进行过写前拷贝的数据块时,待写入数据的拆分方式与上类似,在此不再赘述,简单来说,就是要使拆分后获得的至少两段待写入数据段形成两组,一组待写入数据段的目标区域只覆盖进行过写前拷贝的数据块,另一组待写入数据段的目标区域只覆盖未进行过写前拷贝的数据块。
[0063] 步骤207,判断至少两段待写入数据段中每段待写入数据段待写入的目标区域所覆盖的数据块是否进行过写前拷贝。对于待写入的目标区域所覆盖的数据块进行过写前拷贝的待写入数据段,执行步骤208;对于待写入的目标区域所覆盖的数据块未进行过写前拷贝的待写入数据段,执行步骤209。
[0064] 其中,是否进行过写前拷贝的判断方式请参考步骤202中提供的方式,在此不再赘述。
[0065] 步骤208,生产卷所在的存储阵列将上述待写入数据段中的数据写入上述待写入数据段待写入的目标区域所覆盖的数据块,然后执行步骤210。
[0066] 步骤209,生产卷所在的存储阵列根据上述待写入数据段的起始地址、长度和预先设定的存储粒度确定需要进行写前拷贝的数据块;对上述需要进行写前拷贝的数据块进行写前拷贝,并生成与上述数据块对应的映射标记;将上述待写入数据段中的数据写入进行写前拷贝之后的数据块;然后执行步骤210。
[0067] 具体地,上述存储阵列根据上述待写入数据段的起始地址、长度和预先设定的存储粒度确定需要进行写前拷贝的数据块的方式与步骤203中提供的方式相同,在此不再赘述。
[0068] 步骤210,判断待写入数据是否进行过拆分。如果是,则执行步骤211,如果待写入数据未进行过拆分,则执行步骤212。
[0069] 具体地,可以在对待写入数据进行拆分之后,为拆分后的待写入数据段设置拆分标识,用于表示该待写入数据段中的数据是拆分后获得的待写入数据。这样,只要检测待写入数据中是否存在拆分标识,如果存在拆分标识,则待写入数据进行过拆分,如果不存在拆分标识,则待写入数据未进行过拆分。当然,这只是判断待写入数据是否进行过拆分的一种方式,本发明实施例并不仅限于此,本发明实施例对判断待写入数据是否进行过拆分的方式不作限定。
[0070] 步骤211,生产卷所在的存储阵列在拆分后的至少两段待写入数据段均写入成功之后,返回写操作成功响应;或者,在拆分后的至少两段待写入数据段中至少两段待写入数据段写入失败之后,返回写操作失败响应。
[0071] 步骤212,生产卷所在的存储阵列在将上述待写入数据成功写入进行写前拷贝之后的数据块之后,返回写操作成功响应;或者,在将上述待写入数据写入进行写前拷贝之后的数据块失败之后,返回写操作失败响应。
[0072] 本实施例中,生产卷所在的存储阵列还可以对映射标记对应的数据块进行检测,将物理上连续的数据块对应的映射标记合并为一个映射标记;从而可以减少内存资源的消耗,提升系统性能。举例来说,上述存储阵列对映射标记对应的数据块进行检测之后,发现映射标记1对应数据块1,映射标记3对应数据块2,假设数据块1所在区域的物理地址为0~9,数据块2所在区域的物理地址为10~19,则数据块1和数据块2为物理上连续的数据块,因此可以将数据块1对应的映射标记1和数据块2对应的映射标记3合并为一个映射标记。
[0073] 上述实施例可以实现动态调整映射标记对应的生产卷上实际数据块的大小,提高系统性能和节约资源池资源;并且上述实施例支持对连续的映射标记进行合并,从而可以减少内存资源的消耗,提升系统性能。
[0074] 下面以数据操作请求为IO,预先设定的存储粒度的最小值为1KB为例对本发明实施例提供的向生产卷写入数据的方法进行说明。
[0075] 场景一,生产卷所在的存储阵列接收到主机发送的IO1,大小为4KB,假设该生产卷上IO1待写入的目标区域没有进行过写前拷贝,由于IO1的大小为2的2次方倍,因此可以确定上述目标区域中需要进行写前拷贝的数据块的大小为4KB,直接将需要进行写前拷贝的数据块中的4KB数据拷贝到资源池,并生成与上述数据块对应的映射标记,并将生成的映射标记记录到映射表中,然后将IO1中的待写入数据写到进行写前拷贝之后的数据块,如图3所示,图3为本发明数据写入过程一个实施例的示意图。
[0076] 场景二,生产卷所在的存储阵列接收到IO2,大小为1.5KB,假设该生产卷上IO2待写入的目标区域没有进行过写前拷贝,由于IO2的大小不是2的幂次方倍,因此根据IO2的大小和预先设定的存储粒度,可以确定需要进行写前拷贝的数据块的大小为2KB,然后上述存储阵列将需要进行写前拷贝的数据块中的2KB数据拷贝到资源池,并生成与上述数据块对应的映射标记,并将生成的映射标记记录到映射表中,然后将IO2中的待写入数据写到进行写前拷贝之后的数据块,如图4所示,图4为本发明数据写入过程另一个实施例的示意图。图4中阴影区域表示大小为2KB的进行写前拷贝的数据块中未被IO2覆盖的区域。
[0077] 场景三,生产卷所在的存储阵列接收到IO3,大小为1.5MB,假设生产卷上IO3待写入的目标区域有部分已经进行过写前拷贝,生成了映射标记,此时需要将IO3拆分成至少两个小IO,再针对拆分后的每个IO按照本发明实施例提供的方法来确定数据块的大小,如图5所示,生产卷上IO3待写入的目标区域覆盖数据块1~4,其中数据块2和数据块3已进行过写前拷贝,由于数据块2和数据块3位于上述目标区域的中间位置,因此需要将IO3拆分为3个IO,分别记为IO3-1、IO3-2和IO3-3。
[0078] 其中,IO3-2待写入的目标区域所覆盖的数据块为数据块2和数据块3,由于数据块2和数据块3已经进行过写前拷贝,因此直接将IO3-2中的数据写入生产卷即可;IO3-1待写入的目标区域所覆盖的数据块为数据块1,IO3-3待写入的目标区域所覆盖的数据块为数据块4,假设数据块1、数据块2、数据块3、数据块4的大小分别为256KB、512KB、512KB和256KB,因此需要分别将数据块1和数据块4上256KB大小的数据拷贝到资源池,并生成分别与上述数据块1和数据块4对应的映射标记,并将生成的映射标记记录到映射表中,然后分别将IO3-1和IO3-3中的待写入数据写到进行写前拷贝之后的数据块1和数据块4,如图5所示,图5为本发明数据写入过程再一个实施例的示意图。
[0079] 上述场景一和场景二为小数据块修改的场景,例如,银行的储户资料数据库修改等小数据块修改的业务场景,场景三为大数据块修改的场景,例如:网站图片修改和视频库应用等大数据块修改的业务场景。综上所述,本发明实施例提供的向生产卷写入数据的方法可以根据实际业务的应用动态调整快照数据块大小,可以合理分配和利用存储系统资源,使内存资源和资源池资源消耗最优。
[0080] 进一步地,本发明实施例中,生产卷所在的存储阵列还可以对映射标记对应的数据块进行检测,将物理上连续的数据块对应的映射标记合并为一个映射标记;从而可以减少内存资源的消耗,提升系统性能。图6为本发明合并连续的映射标记一个实施例的示意图,如图6所示,数据块1、数据块2、数据块3和数据块4为物理上连续的数据块,可以将数据块1、数据块2、数据块3和数据块4对应的映射标记合并为1个映射标记。
[0081] 本发明实施例提供的向生产卷写入数据的方法可以合理分配和利用存储系统资源,减少内存资源和资源池资源的消耗,并且支持映射标记合并,可以提升存储系统的读性能,本发明实施例提供的向生产卷写入数据的方法不仅适用于虚拟快照,对克隆镜像、远程复制和LUN拷贝等复制业务同样适用。
[0082] 本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
[0083] 图7为本发明向生产卷写入数据的装置一个实施例的结构示意图,本实施例中的向生产卷写入数据的装置可以作为存储阵列或存储阵列的一部分,实现本发明图1所示实施例的流程。如图7所示,该向生产卷写入数据的装置可以包括:接收模块71、确定模块72、生成模块73和写入模块74。
[0084] 其中,接收模块71,用于接收数据操作请求,该数据操作请求携带待写入数据,以及上述待写入数据的起始地址和长度。
[0085] 确定模块72,用于当生产卷中上述待写入数据的目标区域未进行过写前拷贝时,根据上述待写入数据的起始地址、长度和预先设定的存储粒度确定需要进行写前拷贝的数据块;具体地,确定模块72可以根据上述待写入数据的长度和预先设定的存储粒度确定需要进行写前拷贝的数据块的大小,并根据上述待写入数据的起始地址和上述需要进行写前拷贝的数据块的大小确定需要进行写前拷贝的数据块的位置;本实施例中,上述预先设定的存储粒度可以为:需要进行写前拷贝的数据块的大小为预先设定的存储粒度的最小值的2的幂次方倍;上述预先设定的存储粒度的最小值为2的幂次方倍,例如:可以是访问磁盘的最小IO粒度,即一个扇区的大小。
[0086] 生成模块73,用于对确定模块72确定的需要进行写前拷贝的数据块进行写前拷贝,并生成与上述数据块对应的映射标记。
[0087] 写入模块74,用于将接收模块71接收的待写入数据写入进行写前拷贝之后的数据块。
[0088] 上述向生产卷写入数据的装置可以实现动态调整映射标记对应的生产卷上实际数据块的大小,提高系统性能和节约资源池资源。
[0089] 图8为本发明向生产卷写入数据的装置另一个实施例的结构示意图,本实施例中的向生产卷写入数据的装置可以作为存储阵列,或存储阵列的一部分实现本发明图1和图2所示实施例的流程。与图7所示的向生产卷写入数据的装置相比,不同之处在于,图8所示的向生产卷写入数据的装置还可以包括:拆分模块75、判断模块76、第一响应返回模块
77、第二响应返回模块78和合并模块79。
[0090] 其中,拆分模块75,用于当上述生产卷中上述待写入数据的目标区域所覆盖的数据块中存在至少一个进行过写前拷贝的数据块时,根据上述进行过写前拷贝的数据块的数量、上述进行过写前拷贝的数据块的大小和上述目标区域的大小,将待写入数据拆分为一段待写入数据段,或者根据上述进行过写前拷贝的数据块的数量、上述进行过写前拷贝的数据块的大小、上述进行过写前拷贝的数据块在目标区域中的位置和上述目标区域的大小将待写入数据拆分为至少两段待写入数据段,使拆分后获得的至少两段待写入数据段形成两组,一组待写入数据段的目标区域只覆盖进行过写前拷贝的数据块,另一组待写入数据段的目标区域只覆盖未进行过写前拷贝的数据块。其中,该目标区域的大小即为待写入数据的长度。
[0091] 判断模块76,用于判断至少两段待写入数据段中每段待写入数据段待写入的目标区域所覆盖的数据块是否进行过写前拷贝。
[0092] 本实施例中,确定模块72还可以当待写入数据段待写入的目标区域所覆盖的数据块未进行过写前拷贝时,根据上述待写入数据段的起始地址、长度和预先设定的存储粒度确定需要进行写前拷贝的数据块;然后生成模块73还可以对上述确定模块72确定的需要进行写前拷贝的数据块进行写前拷贝,并生成与上述数据块对应的映射标记;写入模块74还可以将上述待写入数据段中的数据写入进行写前拷贝之后的数据块;以及当待写入数据段待写入的目标区域所覆盖的数据块进行过写前拷贝时,将该待写入数据段中的数据写入该待写入数据段待写入的目标区域所覆盖的数据块。
[0093] 第一响应返回模块77,用于在上述至少两段待写入数据段均写入成功之后,返回写操作成功响应;或者,在上述至少两段待写入数据段中至少一段待写入数据段写入失败之后,返回写操作失败响应。
[0094] 第二响应返回模块78,用于在将待写入数据成功写入进行写前拷贝之后的数据块之后,返回写操作成功响应;或者,在将待写入数据写入进行写前拷贝之后的数据块失败之后,返回写操作失败响应。
[0095] 合并模块79,用于对映射标记对应的数据块进行检测,将物理上连续的数据块对应的映射标记合并为一个映射标记。
[0096] 上述向生产卷写入数据的装置可以实现动态调整映射标记对应的生产卷上实际数据块的大小,提高系统性能和节约资源池资源;并且上述实施例支持对连续的映射标记进行合并,从而可以减少内存资源的消耗,提升系统性能。
[0097] 本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
[0098] 本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
[0099] 最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。