数据拷贝方法及装置制造方法

文档序号:6630363阅读:213来源:国知局
数据拷贝方法及装置制造方法
【专利摘要】本发明公开了一种数据拷贝方法及装置,属于数据存储领域。所述方法包括:获取差异数据对应在主逻辑单元中的至少一个数据块的标识;将所述至少一个数据块的标识依次添加至拷贝队列中的缓存区的末尾;所述拷贝队列包括已拷贝区、拷贝区和缓存区;将待拷贝数据块所存储的所述差异数据拷贝至所述从逻辑单元,并将所述待拷贝数据块的标识移动至所述拷贝区;在所述拷贝区中的元素对应的数据块所存储的数据已拷贝完成之后,将所述数据已拷贝完成的元素从所述拷贝区移动至所述已拷贝区。本发明解决了现有技术中每次从链表中添加或者删除节点时,都需要遍历整个链表,从而导致数据拷贝效率低的问题,达到节约处理时间,提高拷贝效率的效果。
【专利说明】数据拷贝方法及装置

【技术领域】
[0001]本发明涉及数据存储领域,特别涉及一种数据拷贝方法及装置。

【背景技术】
[0002]在数据存储领域中,为了保障一个逻辑单元(Logic Unit Number, LUN)上的数据更安全可靠,通常会为该LUN建立一个或多个备份,实时或定时将主LUN的数据拷贝到从LUN 上。
[0003]对于同一存储地址,对该存储地址中的数据进行拷贝以及对该存储地址进行写入的步骤不能同时进行。现有的数据拷贝方法中,为了避免与写入之间的冲突,可以预先设置一个链表,链表中有序排列正在进行拷贝或者写入的数据块(chunk)对应的节点。当对主LUN中的某一个数据块进行数据拷贝时,首先遍历该链表,若链表中不存在该数据块对应的节点,则开始拷贝该数据块中存储的数据,同时在链表中添加该数据块对应的节点,若链表中存在该数据块对应的节点,则说明该数据块正在被写入,在等待写入完成之后再开始拷贝该数据块中存储的数据。当该数据块中存储的数据拷贝完成后,若此时没有对该数据块中的数据进行写入的请求,则再次遍历该链表,以将该数据块对应的节点从链表中删除。
[0004]在实现本发明的过程中, 申请人:发现现有技术至少存在以下缺点:
[0005]现有技术提供的数据拷贝方法中,每次从链表中添加或者删除节点时,都需要遍历整个链表,而遍历列表需要消耗较多的时间,对数据拷贝的效率有较大的影响。


【发明内容】

[0006]为了解决现有技术中每次从链表中添加或者删除节点时,都需要遍历整个链表,从而导致数据拷贝效率低的问题,本发明实施例提供了一种数据拷贝方法及装置。所述技术方案如下:
[0007]第一方面,提供了一种数据拷贝方法,所述方法包括:
[0008]获取差异数据对应在主逻辑单元中的至少一个数据块的标识,所述差异数据为所述主逻辑单元与从逻辑单元之间存在差异的数据,所述从逻辑单元为所述主逻辑单元的备份;
[0009]将所述至少一个数据块的标识依次添加至拷贝队列中的缓存区的末尾;所述拷贝队列包括已拷贝区、拷贝区和缓存区;所述已拷贝区中的元素为已经完成拷贝的数据块的标识,所述拷贝区中的元素为正在进行拷贝的数据块的标识,所述缓存区中的元素为尚未开始拷贝的数据块的标识;
[0010]将待拷贝数据块所存储的所述差异数据拷贝至所述从逻辑单元,并将所述待拷贝数据块的标识移动至所述拷贝区;所述待拷贝数据块为所述缓存区中的第一个元素对应的数据块;
[0011]在所述拷贝区中的元素对应的数据块所存储的数据已拷贝完成之后,将所述数据已拷贝完成的元素从所述拷贝区移动至所述已拷贝区。
[0012]在第一方面的第一种可能实现方式中,所述方法还包括:
[0013]当所述主逻辑单元接收到主机输入输出1请求时,判断所述主机1请求的写入地址与所述拷贝区中的元素对应的后台拷贝的数据块的地址是否存在冲突;
[0014]若所述主机1请求的写入地址与所述拷贝区中的元素对应的后台拷贝的数据块的地址不存在冲突,则执行所述主机1请求;
[0015]若所述主机1请求的写入地址与所述拷贝区中的元素对应的后台拷贝的数据块的地址存在冲突,则等待与所述主机1请求的写入地址存在冲突的数据块拷贝完成后,再执行所述主机1请求。
[0016]结合第一方面的第一种可能实现方式,在第一方面的第二种可能实现方式中,所述判断所述主机1请求的写入地址与所述拷贝区中的元素对应的后台拷贝的数据块的地址是否存在冲突,包括:
[0017]检测所述主机1请求的写入地址对应的数据块的标识是否存在于所述拷贝区中;
[0018]若检测结果为所述主机1请求的写入地址对应的数据块的标识存在于所述拷贝区中,则获取所述主机1请求的写入地址对应的数据块的位图,所述位图用于指示所述主机1请求的写入地址对应的数据块中的差异单元,所述差异单元为存储有所述差异数据的最小数据单元;
[0019]检测所述主机1请求的写入地址与所述差异单元的地址是否存在冲突;
[0020]若检测结果为所述主机1请求的写入地址与所述差异单元的地址存在冲突,则确定所述主机1请求的写入地址与所述拷贝区中的元素对应的后台拷贝的数据块的地址存在冲突。
[0021]结合第一方面的第二种可能实现方式,在第一方面的第三种可能实现方式中,所述将待拷贝数据块所存储的所述差异数据拷贝至所述从逻辑单元,包括:
[0022]获取所述待拷贝数据块的位图;
[0023]根据所述待拷贝数据块的位图,将所述待拷贝数据块的差异单元中的数据拷贝至所述从逻辑单元。
[0024]结合第一方面的第一种可能实现方式,在第一方面的第四种可能实现方式中,所述将待拷贝数据块所存储的所述差异数据拷贝至所述从逻辑单元之前,所述方法包括:
[0025]检测所述待拷贝数据块的地址与写入链表中的写入地址是否存在冲突,所述写入链表中存储有未完成的主机1请求的写入地址;
[0026]若所述待拷贝数据块的地址与所述写入链表中的写入地址存在冲突,则等待所述写入链表中,与所述待拷贝数据块的地址冲突的写入地址所对应的主机1请求完成后,再执行将所述待拷贝数据块所存储的所述差异数据拷贝至所述从逻辑单元的步骤。
[0027]结合第一方面的第四种可能实现方式,在第一方面的第五种可能实现方式中,若所述主机1请求的写入地址与所述拷贝区中的元素对应的后台拷贝的数据块的地址不存在冲突,所述方法还包括:
[0028]检测所述主机1请求的写入地址与所述缓存区中的元素对应的数据块的地址是否存在冲突;
[0029]若所述主机1请求的写入地址与所述缓存区中的元素对应的数据块的地址存在地址冲突,则将所述主机10请求的写入地址添加入所述写入链表。
[0030]结合第一方面的第五种可能实现方式,在第一方面的第六种可能实现方式中,所述检测所述主机10请求的写入地址与所述缓存区中的元素对应的数据块的地址是否存在冲突,包括:
[0031]检测所述主机10请求的写入地址对应的数据块的标识是否存在于所述缓存区中;
[0032]若检测结果为所述主机10请求的写入地址对应的数据块的标识存在于所述缓存区中,则获取所述主机10请求的写入地址对应的数据块的位图,所述位图用于指示所述主机10请求的写入地址对应的数据块中的差异单元,所述差异单元为存储有所述差异数据的最小数据单元;
[0033]检测所述主机10请求的写入地址与所述差异单元的地址是否存在冲突;
[0034]若检测结果为所述主机10请求的写入地址与所述差异单元的地址存在冲突,则确定所述主机10请求的写入地址与所述缓存区中的元素对应的后台拷贝的数据块的地址存在冲突。
[0035]结合第一方面的第四至第六任意一种可能实现方式,在第一方面第七种可能实现方式中,所述方法还包括:
[0036]若所述主机10请求的写入地址对应的数据块的标识尚未被添加入所述拷贝队列,则检测所述主机10请求的写入地址对应的数据块中是否存储有所述差异数据;
[0037]若所述主机10请求的写入地址对应的数据块中存储有所述差异数据,则将所述主机10请求的写入地址添加入所述写入链表,立即执行所述主机10请求。
[0038]结合第一方面的第一至第六任意一种可能实现方式,在第一方面第八种可能实现方式中,所述方法还包括:
[0039]若所述主机10请求的写入地址为所述已拷贝区中的元素对应的数据块的地址,则立刻执行所述主机10请求。
[0040]结合第一方面或者第一方面的第一至第六任意一种可能实现方式,在第一方面的第九种可能实现方式中,所述方法还包括:
[0041]在获取差异数据对应在主逻辑单元中的至少一个数据块的标识时,若返回的数据块的标识数目为0,则确定所述主逻辑单元与所述从逻辑单元之间的差异数据对应在主逻辑单元中的数据块的标识已经获取完成。
[0042]结合第一方面或者第一方面的第一至第六任意一种可能实现方式,在第一方面的第十种可能实现方式中,所述方法还包括:
[0043]检测所述已拷贝区中的元素的个数是否达到预定阈值;
[0044]若所述已拷贝区中的元素的个数达到所述预定阈值,则将所述已拷贝区中的元素从差异息中删除;
[0045]其中,所述差异信息包含于元数据中,且包含所述差异数据所在的各个数据块的标识;所述元数据用于描述所述主逻辑单元中存储的用户数据。
[0046]第二方面,提供了一种数据拷贝装置,所述装置包括:
[0047]标识获取模块,用于获取差异数据对应在主逻辑单元中的至少一个数据块的标识,所述差异数据为所述主逻辑单元与从逻辑单元之间存在差异的数据,所述从逻辑单元为所述主逻辑单元的备份;
[0048]标识添加模块,用于将所述至少一个数据块的标识依次添加至拷贝队列中的缓存区的末尾;所述拷贝队列包括已拷贝区、拷贝区和缓存区;所述已拷贝区中的元素为已经完成拷贝的数据块的标识,所述拷贝区中的元素为正在进行拷贝的数据块的标识,所述缓存区中的元素为尚未开始拷贝的数据块的标识;
[0049]拷贝模块,用于将待拷贝数据块所存储的所述差异数据拷贝至所述从逻辑单元;所述待拷贝数据块为所述缓存区中的第一个元素对应的数据块;
[0050]第一移动模块,用于将所述待拷贝数据块的标识移动至所述拷贝区;
[0051]第二移动模块,用于在所述拷贝区中的元素对应的数据块所存储的数据已拷贝完成后,将所述数据已拷贝完成的元素从所述拷贝区移动至所述已拷贝区。
[0052]在第二方面的第一种可能实现方式中,所述装置还包括:
[0053]判断模块,用于当所述主逻辑单元接收到主机1请求时,判断所述主机1请求的写入地址与所述拷贝区中的元素对应的后台拷贝的数据块的地址是否存在冲突;
[0054]第一执行模块,用于若所述判断模块的判断结果为所述主机1请求的写入地址与所述拷贝区中的元素对应的后台拷贝的数据块的地址不存在冲突,则执行所述主机1请求;
[0055]第二执行模块,用于若所述判断模块的判断结果为所述主机1请求的写入地址与所述拷贝区中的元素对应的后台拷贝的数据块的地址存在冲突,则等待与所述主机1请求的写入地址存在冲突的数据块拷贝完成后,再执行所述主机1请求。
[0056]结合第二方面的第一种可能实现方式,在第二方面的第二种可能实现方式中,所述判断模块,包括:
[0057]第一检测单元,用于检测所述主机1请求的写入地址对应的数据块的标识是否存在于所述拷贝区中;
[0058]第一位图获取单元,用于若所述第一检测单元的检测结果为所述主机1请求的写入地址对应的数据块的标识存在于所述拷贝区中,则获取所述主机1请求的写入地址对应的数据块的位图,所述位图用于指示所述主机1请求的写入地址对应的数据块中的差异单元,所述差异单元为存储有所述差异数据的最小数据单元;
[0059]第二检测单元,用于检测所述主机1请求的写入地址与所述差异单元的地址是否存在冲突;
[0060]第一确定单元,用于若所述第二检测单元的检测结果为所述主机1请求的写入地址与所述差异单元的地址存在冲突,则确定所述主机1请求的写入地址与所述拷贝区中的元素对应的后台拷贝的数据块的地址存在冲突。
[0061]结合第二方面的第二种可能实现方式,在第二方面的第三种可能实现方式中,所述拷贝模块,包括:
[0062]第二位图获取单元,用于获取所述待拷贝数据块的位图;
[0063]拷贝单元,用于根据所述待拷贝数据块的位图,将所述待拷贝数据块的差异单元中的数据拷贝至所述从逻辑单元。
[0064]结合第二方面的第一种可能实现方式,在第二方面的第四种可能实现方式中,所述装置包括:
[0065]第一检测模块,用于在所述拷贝模块将待拷贝数据块所存储的所述差异数据拷贝至所述从逻辑单元之前,检测所述待拷贝数据块的地址与写入链表中的写入地址是否存在冲突,所述写入链表中存储有未完成的主机10请求的写入地址;
[0066]所述拷贝模块,用于若所述待拷贝数据块的地址与所述写入链表中的写入地址存在冲突,则等待所述写入链表中,与所述待拷贝数据块的地址冲突的写入地址所对应的主机10请求完成后,再执行将所述待拷贝数据块所存储的所述差异数据拷贝至所述从逻辑单元的步骤。
[0067]结合第二方面的第四种可能实现方式,在第二方面的第五种可能实现方式中,所述装置还包括:
[0068]第二检测模块,用于若所述判断模块的判断结果为所述主机10请求的写入地址与所述拷贝区中的元素对应的后台拷贝的数据块的地址不存在冲突,则检测所述主机10请求的写入地址与所述缓存区中的元素对应的数据块的地址是否存在冲突;
[0069]第一地址添加模块,用于若所述主机10请求的写入地址与所述缓存区中的元素对应的数据块的地址存在地址冲突,则将所述主机10请求的写入地址添加入所述写入链表。
[0070]结合第二方面的第五种可能实现方式,在第二方面的第六种可能实现方式中,所述第二检测模块,包括:
[0071]第三检测单元,用于检测所述主机10请求的写入地址对应的数据块的标识是否存在于所述缓存区中;
[0072]第三位图获取单元,用于若所述第三检测单元的检测结果为所述主机10请求的写入地址对应的数据块的标识存在于所述缓存区中,则获取所述主机10请求的写入地址对应的数据块的位图,所述位图用于指示所述主机10请求的写入地址对应的数据块中的差异单元,所述差异单元为存储有所述差异数据的最小数据单元;
[0073]第四检测单元,用于检测所述主机10请求的写入地址与所述差异单元的地址是否存在冲突;
[0074]第二确定单元,用于若所述第四检测单元的检测结果为所述主机10请求的写入地址与所述差异单元的地址存在冲突,则确定所述主机10请求的写入地址与所述缓存区中的元素对应的后台拷贝的数据块的地址存在冲突。
[0075]结合第二方面的第四至第六任意一种可能实现方式,在第二方面的第七种可能实现方式中,所述装置还包括:
[0076]第三检测模块,用于若所述主机10请求的写入地址对应的数据块的标识尚未被添加入所述拷贝队列,则检测所述主机10请求的写入地址对应的数据块中是否存储有所述差异数据;
[0077]第二地址添加模块,用于若所述主机10请求的写入地址对应的数据块中存储有所述差异数据,则将所述主机10请求的写入地址添加入所述写入链表;
[0078]第三执行模块,用于立即执行所述主机10请求。
[0079]结合第二方面的第一至第六任意一种可能实现方式,在第二方面的第八种可能实现方式中,所述装置还包括:
[0080]第四执行模块,用于若所述主机10请求的写入地址为所述已拷贝区中的元素对应的数据块的地址,则立刻执行所述主机1请求。
[0081]结合第二方面或者第二方面的第一至第六任意一种可能实现方式,在第二方面的第九种可能实现方式中,所述装置还包括:
[0082]确定模块,用于在所述标识获取模块获取差异数据对应在主逻辑单元中的至少一个数据块的标识时,若返回的数据块的标识数目为0,则确定所述主逻辑单元与所述从逻辑单元之间的差异数据对应在主逻辑单元中的数据块的标识已经获取完成。
[0083]结合第二方面或者第二方面的第一至第六任意一种可能实现方式,在第二方面的第十种可能实现方式中,所述装置还包括:
[0084]第四检测模块,用于检测所述已拷贝区中的元素的个数是否达到预定阈值;
[0085]删除模块,用于若所述第四检测模块的检测结果为所述已拷贝区中的元素的个数达到所述预定阈值,则将所述已拷贝区中的元素从差异信息中删除;
[0086]其中,所述差异信息包含于元数据中,且包含所述差异数据所在的各个数据块的标识;所述元数据用于描述所述主逻辑单元中存储的用户数据。
[0087]本发明实施例提供的技术方案带来的有益效果是:
[0088]通过设置包含已拷贝区、拷贝区和缓存区的拷贝队列,分别存储完成拷贝的数据块的标识、正在进行拷贝的数据块的标识以及尚未开始拷贝的数据块的标识,不需要对拷贝队列进行遍历,仅通过队列中不同区域的数据块的标识即可以确定数据块的拷贝状态,解决了现有技术中每次从链表中添加或者删除节点时,都需要遍历整个链表,从而导致数据拷贝效率低的问题,达到节约处理时间,提高拷贝效率的效果。

【专利附图】

【附图说明】
[0089]为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0090]图1是本发明一个实施例提供的数据拷贝方法的方法流程图;
[0091]图2是本发明另一实施例提供的数据拷贝方法的方法流程图;
[0092]图3是本发明另一实施例提供的拷贝队列的示意图;
[0093]图4是本发明另一实施例提供的数据块的位图结构示意图;
[0094]图5是本发明一个实施例提供的数据拷贝装置的装置结构图;
[0095]图6是本发明一个实施例提供的数据拷贝装置的装置结构图。

【具体实施方式】
[0096]为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
[0097]请参考图1,其示出了本发明一个实施例提供的数据拷贝方法的方法流程图。该数据拷贝方法用于包含主逻辑单元和从逻辑单元的数据存储系统中,其中,从逻辑单元中存储有主逻辑单元中的数据的备份。该数据拷贝方法可以包括:
[0098]步骤102,获取差异数据对应在主逻辑单元中的至少一个数据块的标识,该差异数据为该主逻辑单元与从逻辑单元之间存在差异的数据,该从逻辑单元为该主逻辑单元的备份。
[0099]步骤104,将该至少一个数据块的标识依次添加至拷贝队列中的缓存区的末尾;该拷贝队列包括已拷贝区、拷贝区和缓存区;该已拷贝区中的元素为已经完成拷贝的数据块的标识,该拷贝区中的元素为正在进行拷贝的数据块的标识,该缓存区中的元素为尚未开始拷贝的数据块的标识。
[0100]步骤106,将待拷贝数据块所存储的该差异数据拷贝至该从逻辑单元,并将该待拷贝数据块的标识移动至该拷贝区;该待拷贝数据块为该缓存区中的第一个元素对应的数据块。
[0101]步骤108,在该拷贝区中的元素对应的数据块所存储的数据已拷贝完成之后,将该数据已拷贝完成的元素从该拷贝区移动至该已拷贝区。
[0102]综上所述,本发明实施例提供的数据拷贝方法,通过设置包含已拷贝区、拷贝区和缓存区的拷贝队列,分别存储完成拷贝的数据块的标识、正在进行拷贝的数据块的标识以及尚未开始拷贝的数据块的标识,不需要对拷贝队列进行遍历,仅通过队列中不同区域的数据块的标识即可以确定数据块的拷贝状态,解决了现有技术中每次从链表中添加或者删除节点时,都需要遍历整个链表,从而导致数据拷贝效率低的问题,达到节约处理时间,提高拷贝效率的效果。
[0103]请参考图2,其示出了本发明另一实施例提供的数据拷贝方法的方法流程图。该数据拷贝方法用于包含主逻辑单元和从逻辑单元的数据存储系统中,其中,从逻辑单元中存储有主逻辑单元中的数据的备份。该数据拷贝方法可以包括:
[0104]步骤202,获取差异数据对应在主逻辑单元中的至少一个数据块的标识。
[0105]该差异数据为该主逻辑单元与从逻辑单元之间存在差异的数据,该从逻辑单元为该主逻辑单元的备份。
[0106]其中,主LUN可以预先划分成若干个数据块(chunk),各个数据块对应有各自的数据块号,在本实施例中,数据块的标识可以是对应的数据块号。
[0107]具体的,可以从该主逻辑单元中存储的用户数据对应的元数据中读取差异信息,该差异信息中包含主逻辑单元中的差异数据所在的数据块的标识。
[0108]元数据为用于描述主LUN中存储的用户数据的信息,该元数据中包含差异信息,该差异信息中可以包含该主LUN中所有被修改过的数据所在的数据块的标识。这些差异信息所指示的数据块中的数据就是需要被拷贝至从LUN中的数据。在进行数据拷贝时,可以直接通过元数据读取该差异信息。
[0109]需要说明的是,在进行数据拷贝时,通常按照数据块号从小到大的顺序依次进行拷贝,因此,在获取差异信息时,也按照数据块号从小到大的顺序依次读取。在读取差异信息时,可以一次读取尽量多的差异信息,不必每次从元数据中读取一个数据块的标识,以减少对元数据的访问次数,提高拷贝效率。
[0110]另外,在获取差异数据对应在主逻辑单元中的至少一个数据块的标识时,若返回的数据块的标识数目为0,则确定该主逻辑单元与从逻辑单元之间的差异数据对应在主逻辑单元中的数据块的标识已经获取完成。
[0111]步骤204,将该至少一个数据块的标识依次添加至拷贝队列中的缓存区的末尾;该拷贝队列包括已拷贝区、拷贝区和缓存区。
[0112]该已拷贝区中的元素为已经完成拷贝的数据块的标识,该拷贝区中的元素为正在进行拷贝的数据块的标识,该缓存区中的元素为尚未开始拷贝的数据块的标识。
[0113]拷贝队列的示意图可以如图3所示,其中,队列最前方为已拷贝区,中间为拷贝区,队列末尾为缓存区。从元数据中读取的数据块依次添加至队列的最后方,其中,拷贝区中的第一个元素为整个拷贝队列中第一个已经开始但未完成拷贝的数据块的标识,拷贝区的最后一个元素为整个拷贝队列中最后一个已经开始但未完成拷贝的数据块的标识。
[0114]在本实施例中,同样将读取到的数据块号按照从小到大的顺序依次添加入缓存区的末尾。
[0115]步骤206,将待拷贝数据块所存储的该差异数据拷贝至该从逻辑单元,并将该待拷贝数据块的标识移动至该拷贝区。
[0116]其中,该待拷贝数据块为该缓存区中的第一个元素对应的数据块。
[0117]在对待拷贝数据块进行数据拷贝之前,首先检测该待拷贝数据块的地址与写入链表中的写入地址是否存在冲突,该写入链表中存储有未完成的主机输入输出(英文:Input/Output,缩写:10)请求的写入地址;若该待拷贝数据块的地址与该写入链表中的写入地址存在冲突,则等待该写入链表中,与该待拷贝数据块的地址冲突的写入地址所对应的主机1请求完成后,再执行将该待拷贝数据块所存储的该差异数据拷贝至该从逻辑单元的步骤。
[0118]在数据拷贝的过程中,主逻辑单元依然接收主机下发的数据读写请求(主机1请求),对于同一个数据块,若对该数据块的主机1请求和数据拷贝同时进行,则可能发生冲突,导致数据错误。
[0119]为了避免数据拷贝与主机1请求的数据写入产生冲突,可以预先设置一个写入链表,写入链表中包含正在进行数据写入的地址,对待拷贝数据块进行拷贝之前,首先检查该待拷贝数据块的地址是否与写入链表中的写入地址冲突,若是,则等待该待拷贝数据块写入完成后,再进行数据拷贝。若待拷贝数据块的地址与写入链表中的写入地址不冲突,则立刻开始对待拷贝数据块中的数据进行拷贝。
[0120]以图3所示的拷贝队列为例,缓存区中的第一个元素为待拷贝数据块的标识,对待拷贝数据块启动拷贝之前,首先检查该待拷贝数据块的地址与写入链表中的写入地址是否冲突,若该待拷贝数据块的地址与写入链表中的所有写入地址都不冲突,则开始对待拷贝数据块中的数据进行拷贝,同时,将拷贝区的后边界向后移动一位,使待拷贝数据块的标识进入拷贝区。若该待拷贝数据块的地址与写入链表中的部分写入地址冲突,则等待对该待拷贝数据块的写入完成之后,再开始对待拷贝数据块中的数据进行拷贝,并将拷贝区的后边界向后移动一位,使待拷贝数据块的标识进入拷贝区。
[0121]此外,检测该主机1请求的写入地址与该缓存区中的元素对应的数据块的地址是否存在冲突的步骤可以如下:
[0122]I)检测该主机1请求的写入地址对应的数据块的标识是否存在于该缓存区中;
[0123]2)若检测结果为该主机1请求的写入地址对应的数据块的标识存在于该缓存区中,则获取该主机1请求的写入地址对应的数据块的位图,该位图用于指示该主机1请求的写入地址对应的数据块中的差异单元,该差异单元为存储有该差异数据的最小数据单元;
[0124]3)检测该主机1请求的写入地址与该差异单元的地址是否存在冲突;
[0125]4)若检测结果为该主机1请求的写入地址与该差异单元的地址存在冲突,则确定该主机1请求的写入地址与该缓存区中的元素对应的后台拷贝的数据块的地址存在冲关。
[0126]5)若该主机1请求的写入地址对应的数据块的标识不存在于该缓存区中,或者,该主机1请求的写入地址对应的数据块的标识存在于该缓存区中,但是该主机1请求的写入地址与该差异单元的地址不存在冲突,则确定该主机1请求的写入地址与该缓存区中的元素对应的后台拷贝的数据块不存在冲突。
[0127]在进行数据写入,尤其是进行小数据量(比如Ik或者2k)时,可能只对数据块中的部分地址进行写入,为了进一步提高数据拷贝和效率,可以将数据块划分为多个存储单元,同时,每个数据块对应有各自的位图,该位图用于描述各个存储单元是否被修改。具体的,数据块的位图结构示意图可以如图4所示,其中,一个数据块划分为8个存储单元,每个存储单元为主逻辑单元中的最小数据单元,每个存储单元对应位图中的一个元素,元素为O标识对应的存储单元未被修改,不需要拷贝,该存储单元可以进行写入操作;元素为I标识对应的存储单元被修改,需要拷贝,当该存储单元拷贝时,无法进行写入操作。在接收到一个写入请求后,可以首先检测该写入请求对应的写入地址是否对应缓存区中的元素对应的数据块,若是,则进一步检测该写入地址是否对应该数据块中的位图元素为I的存储单元,若是,则确定该请求对应的写入地址与该缓存区中的元素对应的数据块冲突。若该写入请求对应的写入地址与缓存区中的元素对应的数据块不对应,或者,该写入请求对应的写入地址与缓存区中的元素对应的数据块对应,但是与该数据块中的位图元素为I的存储单元不对应,则确定该写入地址与缓存区中的元素对应的数据块不冲突。
[0128]其中,位图是在从元数据获取差异时,根据实际差异数据的大小进行设置。元数据中除了包含需要进行拷贝的数据块的标识之外,还包含需要进行拷贝的数据块中的差异数据的大小,在访问元数据以读取需要进行拷贝的数据块的标识时,可以根据读取的数据块的标识对应的数据块中存储的差异数据的大小确定数据块中的存储单元的个数,比如,I个数据块的数据量为1M,差异数据大小2Kb,可以根据差异数据的大小将数据块划分为8个存储单元,同时设置该8个存储单元在位图中对应的元素,其中,包含差异数据的存储单元对应在位图中的元素设为I,不包含差异数据的存储单元对应在位图中的元素设为O。
[0129]此外,在将待拷贝数据块所存储的该差异数据拷贝至该从逻辑单元时,可以获取该待拷贝数据块的位图,并根据该待拷贝数据块的位图,将该待拷贝数据块的差异单元中的数据拷贝至该从逻辑单元。
[0130]在将主逻辑单元中的数据拷贝至从逻辑单元时,可以根据位图查询数据块中的差异单元,并将差异单元中的数据拷贝到从逻辑单元,而存储差异数据的数据块中的非差异单元,则不予拷贝,这样可以减少拷贝的数据量,提高拷贝效率。
[0131]步骤208,在该拷贝区中的元素对应的数据块所存储的数据已拷贝完成之后,将该数据已拷贝完成的元素从该拷贝区移动至该已拷贝区。
[0132]同样以图3所示的拷贝队列为例,当拷贝区中的第一个元素对应的数据块完成拷贝(比如,接收到从LUN返回的该数据块拷贝完成的响应),则将拷贝区的前边界向后移动一位,使拷贝区中的第一个元素进入已拷贝区。需要说明的时,若拷贝区中的第一个元素对应的数据块尚未拷贝完成,而拷贝区中有其它元素对应的数据块已经拷贝完成(比如,拷贝区中的第一个元素对应的数据块尚未拷贝完成,而拷贝区中的第二个元素对应的数据块已经拷贝完成),此时,拷贝区的前边界不变,直至拷贝区中的第一个元素对应的数据块拷贝完成。
[0133]步骤210,检测该已拷贝区中的元素的个数是否达到预定阈值;若已拷贝区中的元素的个数达到该预定阈值,则将该已拷贝区中的元素从差异信息中删除。
[0134]当一个数据块中的数据拷贝完成后,需要在元数据中将该数据块号从差异信息删除,每次删除操作都需要对元数据进行依次访问。在本实施例中,可以等待已拷贝区中的元素累积到一定数量之后,再一次从元数据的差异信息中删除,以减小访问元数据的次数,进一步提闻拷贝效率。
[0135]同样的,在读取元数据中的差异信息时,也可以通过一次读取尽可能多的差异信息来减少元数据的访问次数。
[0136]步骤212,判断主机10请求的写入地址与该拷贝区中的元素对应的后台拷贝的数据块的地址是否存在冲突;若是,进入步骤216,否则,进入步骤214。
[0137]当该主逻辑单元接收到主机输入输出10请求时,判断该主机10请求的写入地址与该拷贝区中的元素对应的后台拷贝的数据块的地址是否存在冲突。
[0138]其中,判断该主机10请求的写入地址与该拷贝区中的元素对应的后台拷贝的数据块的地址是否存在冲突的过程可以如下:
[0139]1)检测该主机10请求的写入地址对应的数据块的标识是否存在于该拷贝区中;
[0140]2)若检测结果为该主机10请求的写入地址对应的数据块的标识存在于该拷贝区中,则获取该主机10请求的写入地址对应的数据块的位图,该位图用于指示该主机10请求的写入地址对应的数据块中的差异单元,该差异单元为存储有该差异数据的最小数据单元;
[0141]3)检测该主机10请求的写入地址与该差异单元的地址是否存在冲突;
[0142]4)若检测结果为该主机10请求的写入地址与该差异单元的地址存在冲突,则确定该主机10请求的写入地址与该拷贝区中的元素对应的后台拷贝的数据块存在冲突。
[0143]5)若该主机10请求的写入地址对应的数据块的标识不存在于该拷贝区中,或者,该主机10请求的写入地址对应的数据块的标识存在于该拷贝区中,但是该主机10请求的写入地址与该差异单元的地址不存在冲突,则确定该主机10请求的写入地址与该拷贝区中的元素对应的后台拷贝的数据块不存在冲突。
[0144]其中,上述检查待拷贝数据块的地址是否与写入链表中的写入地址冲突的方法与步骤206中判断主机10请求的写入地址与缓存区中的元素对应的数据块是否存在冲突的方法类似,此处不再赘述。
[0145]本实施例所示的方法,通过将数据块划分为多个存储单元,在检测出主机10请求的写入地址与正在进行拷贝的数据块或者将要进行拷贝的数据块产生冲突之后,进一步检测该写入地址是否与数据块中正在进行拷贝或者将要进行拷贝的数据单元相冲突,支持更低粒度的冲突检测,进一步提高了数据拷贝或者数据写入的效率。
[0146]步骤214,立即执行该主机10请求。
[0147]若判断出主机1请求的写入地址与拷贝区中的元素对应的数据块不冲突,则可以立刻执行写入操作。
[0148]其中,主机1请求的写入地址与拷贝区中的元素对应的数据块不冲突的情形有如下几种:主机1请求的写入地址对应的数据块的标识为拷贝区中的元素,且主机1请求的写入地址与对应数据块中的差异单元不冲突;主机1请求的写入地址对应的数据块的标识为缓存区中的元素;主机1请求的写入地址对应的数据块的标识为已拷贝区中的元素;或者,主机1请求的写入地址对应的数据块的标识尚未被添加入该拷贝队列。
[0149]本发明实施例针对上述几种情形分别做如下处理:
[0150]I)若主机1请求的写入地址对应的数据块的标识为拷贝区中的元素,且主机1请求的写入地址与对应数据块中的差异单元不冲突,则立刻执行该主机1请求,且不需要将该1请求的写入地址添加至写入链表。
[0151]2)若该主机1请求的写入地址对应的数据块的标识为缓存区中的元素,则进一步的,若该主机1请求的写入地址与数据块中的差异单元冲突,则立刻执行该主机1请求的同时,将该1请求的写入地址添加至写入链表;若该主机1请求的写入地址与数据块中的差异单元不冲突,则将该立刻执行该主机1请求的同时,不需要将该1请求的写入地址添加至写入链表。
[0152]3)若主机1请求的写入地址对应的数据块的标识为已拷贝区中的元素,则将该立刻执行该主机1请求的同时,不需要将该1请求的写入地址添加至写入链表。
[0153]4)若主机1请求的写入地址对应的数据块的标识尚未被添加入该拷贝队列,则检测该主机1请求的写入地址对应的数据块中是否存储有该差异数据;若该主机1请求的写入地址对应的数据块中存储有该差异数据,则立即执行该主机1请求,同时将该主机1请求的写入地址添加入写入链表。
[0154]进一步的,在获取差异信息时,若按照数据块号从小到大的顺序依次读取差异数据对应的数据块,则处于缓存区中的最后一个数据块之前的各个尚未被添加入拷贝队列的数据块都已经被确定为不包含差异数据,本实施例中可以不考虑其处理方式,因此,只有当主机1请求的写入地址处于主逻辑单元中的第一个数据块的地址到缓存区中的最后一个数据块的地址之外(或者判断出该主机1请求的写入地址对应的数据块号大于缓存区中的最后一个元素对应的数据块号)时,才进一步检测该主机1请求的写入地址对应的数据块中是否存储有该差异数据,若是,则立即执行该主机1请求,同时将该主机1请求的写入地址添加入写入链表。
[0155]步骤216,等待地址与该主机1请求的写入地址存在冲突的数据块拷贝完成后,再执行该主机1请求。
[0156]若判断出主机1请求的写入地址与拷贝区中的元素对应的数据块冲突,则说明该主机1请求的写入地址中的数据正在被拷贝至从LUN,此时可以等待该数据块中的数据拷贝完成后,再执行主机1请求的写入操作。
[0157]综上所述,本发明实施例提供的数据拷贝方法,通过设置包含已拷贝区、拷贝区和缓存区的拷贝队列,分别存储完成拷贝的数据块的标识、正在进行拷贝的数据块的标识以及尚未开始拷贝的数据块的标识,不需要对拷贝队列进行遍历,仅通过队列中不同区域的数据块的标识即可以确定数据块的拷贝状态,解决了现有技术中每次从链表中添加或者删除节点时,都需要遍历整个链表,从而导致数据拷贝效率低的问题,达到节约处理时间,提高拷贝效率的效果。
[0158]此外,本发明实施例提供的数据拷贝方法,只需要将待拷贝的数据块的标识添加入拷贝队列,拷贝队列中的元素的数量取决于后台并发拷贝的数据块的数量,与写入操作的并发数无关,内存资源占用量小。
[0159]其次,本发明实施例提供的数据拷贝方法,将数据块划分为更小粒度的存储单元,只有判断出写入地址与正在或者即将拷贝的存储单元发生冲突时,才确定写入操作与拷贝操作冲突,提高了对小数据量写入操作的判断精度,提高写入或者拷贝性能。
[0160]另外,本发明实施例提供的数据拷贝方法,根据数据块中的差异数据的大小划分数据块,能够灵活的确定判断精度,进一步提高写入或者拷贝性能。
[0161]最后,本发明实施例提供的数据拷贝方法,在读取差异信息中需要进行拷贝的数据块的标识,或者,将拷贝完成的数据块的标识从差异信息中删除时,可以一次读取或者删除尽可能多的数据块的标识,以减少元数据的访问次数,提高拷贝效率。
[0162]请参考图5,其示出了本发明一个实施例提供的数据拷贝装置的装置结构图。该数据拷贝装置可以用于在存储系统中的主逻辑单元中,执行如图1或图2所示的数据拷贝方法。该存储系统中包含有该主机逻辑单元和从逻辑单元,其中,从逻辑单元中存储有主逻辑单元中的数据的备份。该数据拷贝装置可以包括:
[0163]标识获取模块301,用于获取差异数据对应在主逻辑单元中的至少一个数据块的标识,所述差异数据为所述主逻辑单元与从逻辑单元之间存在差异的数据,所述从逻辑单元为所述主逻辑单元的备份;
[0164]标识添加模块302,用于将所述至少一个数据块的标识依次添加至拷贝队列中的缓存区的末尾;所述拷贝队列包括已拷贝区、拷贝区和缓存区;所述已拷贝区中的元素为已经完成拷贝的数据块的标识,所述拷贝区中的元素为正在进行拷贝的数据块的标识,所述缓存区中的元素为尚未开始拷贝的数据块的标识;
[0165]拷贝模块303,用于将待拷贝数据块所存储的所述差异数据拷贝至所述从逻辑单元,所述待拷贝数据块为所述缓存区中的第一个元素对应的数据块;
[0166]第一移动模块304,用于将所述待拷贝数据块的标识移动至所述拷贝区;
[0167]第二移动模块305,用于在所述拷贝区中的元素对应的数据块所存储的数据已拷贝完成后,将所述数据已拷贝完成的元素从所述拷贝区移动至所述已拷贝区。
[0168]综上所述,本发明实施例提供的数据拷贝装置,通过设置包含已拷贝区、拷贝区和缓存区的拷贝队列,分别存储完成拷贝的数据块的标识、正在进行拷贝的数据块的标识以及尚未开始拷贝的数据块的标识,不需要对拷贝队列进行遍历,仅通过队列中不同区域的数据块的标识即可以确定数据块的拷贝状态,解决了现有技术中每次从链表中添加或者删除节点时,都需要遍历整个链表,从而导致数据拷贝效率低的问题,达到节约处理时间,提高拷贝效率的效果。
[0169]请参考图6,其示出了本发明另一实施例提供的数据拷贝装置的装置结构图。该数据拷贝装置可以用于在存储系统中的主逻辑单元中,执行如图1或图2所示的数据拷贝方法。该存储系统中包含有该主机逻辑单元和从逻辑单元,其中,从逻辑单元中存储有主逻辑单元中的数据的备份。该数据拷贝装置可以包括:
[0170]标识获取模块301,用于获取差异数据对应在主逻辑单元中的至少一个数据块的标识,所述差异数据为所述主逻辑单元与从逻辑单元之间存在差异的数据,所述从逻辑单元为所述主逻辑单元的备份;
[0171]标识添加模块302,用于将所述至少一个数据块的标识依次添加至拷贝队列中的缓存区的末尾;所述拷贝队列包括已拷贝区、拷贝区和缓存区;所述已拷贝区中的元素为已经完成拷贝的数据块的标识,所述拷贝区中的元素为正在进行拷贝的数据块的标识,所述缓存区中的元素为尚未开始拷贝的数据块的标识;
[0172]拷贝模块303,用于将待拷贝数据块所存储的所述差异数据拷贝至所述从逻辑单元;
[0173]第一移动模块304,用于将所述待拷贝数据块的标识移动至所述拷贝区;所述待拷贝数据块为所述缓存区中的第一个元素对应的数据块;
[0174]第二移动模块305,用于在所述拷贝区中的元素对应的数据块所存储的数据已拷贝完成后,将所述数据已拷贝完成的元素从所述拷贝区移动至所述已拷贝区。
[0175]可选的,所述装置还包括:
[0176]判断模块306,用于当所述主逻辑单元接收到主机1请求时,判断所述主机1请求的写入地址与所述拷贝区中的元素对应的后台拷贝的数据块的地址是否存在冲突;
[0177]第一执行模块307,用于若所述判断模块306的判断结果为所述主机1请求的写入地址与所述拷贝区中的元素对应的后台拷贝的数据块的地址不存在冲突,则执行所述主机1请求;
[0178]第二执行模块308,用于若所述判断模块306的判断结果为所述主机1请求的写入地址与所述拷贝区中的元素对应的后台拷贝的数据块的地址存在冲突,则等待与所述主机1请求的写入地址存在冲突的数据块拷贝完成后,再执行所述主机1请求。
[0179]进一步的,所述判断模块306,包括:
[0180]第一检测单元306a,用于检测所述主机1请求的写入地址对应的数据块的标识是否存在于所述拷贝区中;
[0181]第一位图获取单元306b,用于若所述第一检测单元306a的检测结果为所述主机1请求的写入地址对应的数据块的标识存在于所述拷贝区中,则获取所述主机1请求的写入地址对应的数据块的位图,所述位图用于指示所述主机1请求的写入地址对应的数据块中的差异单元,所述差异单元为存储有所述差异数据的最小数据单元;
[0182]第二检测单元306c,用于检测所述主机1请求的写入地址与所述差异单元的地址是否存在冲突;
[0183]第一确定单元306d,用于若所述第二检测单元306c的检测结果为所述主机1请求的写入地址与所述差异单元的地址存在冲突,则确定所述主机1请求的写入地址与所述拷贝区中的元素对应的后台拷贝的数据块的地址存在冲突。
[0184]可选的,所述拷贝模块303,包括:
[0185]第二位图获取单元303a,用于获取所述待拷贝数据块的位图;
[0186]拷贝单元303b,用于根据所述待拷贝数据块的位图,将所述待拷贝数据块的差异单元中的数据拷贝至所述从逻辑单元。
[0187]可选的,所述装置包括:
[0188]第一检测模块309,用于在所述拷贝模块303将待拷贝数据块所存储的所述差异数据拷贝至所述从逻辑单元之前,检测所述待拷贝数据块的地址与写入链表中的写入地址是否存在冲突,所述写入链表中存储有未完成的主机1请求的写入地址;
[0189]所述拷贝模块303,用于若所述待拷贝数据块的地址与所述写入链表中的写入地址存在冲突,则等待所述写入链表中,与所述待拷贝数据块的地址冲突的写入地址所对应的主机1请求完成后,再执行将所述待拷贝数据块所存储的所述差异数据拷贝至所述从逻辑单元的步骤。
[0190]可选的,所述装置还包括:
[0191]第二检测模块310,用于若所述判断模块306的判断结果为所述主机1请求的写入地址与所述拷贝区中的元素对应的后台拷贝的数据块的地址不存在冲突,则检测所述主机1请求的写入地址与所述缓存区中的元素对应的数据块的地址是否存在冲突;
[0192]第一地址添加模块311,用于若所述主机1请求的写入地址与所述缓存区中的元素对应的数据块的地址存在地址冲突,则将所述主机1请求的写入地址添加入所述写入链表。
[0193]可选的,所述第二检测模块310,包括:
[0194]第三检测单元310a,用于检测所述主机1请求的写入地址对应的数据块的标识是否存在于所述缓存区中;
[0195]第三位图获取单元310b,用于若所述第三检测单元310a的检测结果为所述主机1请求的写入地址对应的数据块的标识存在于所述缓存区中,则获取所述主机1请求的写入地址对应的数据块的位图,所述位图用于指示所述主机1请求的写入地址对应的数据块中的差异单元,所述差异单元为存储有所述差异数据的最小数据单元;
[0196]第四检测单元310c,用于检测所述主机1请求的写入地址与所述差异单元的地址是否存在冲突;
[0197]第二确定单元310d,用于若所述第四检测单元310c的检测结果为所述主机1请求的写入地址与所述差异单元的地址存在冲突,则确定所述主机1请求的写入地址与所述缓存区中的元素对应的后台拷贝的数据块的地址存在冲突。
[0198]可选的,所述装置还包括:
[0199]第三检测模块312,用于若所述主机1请求的写入地址对应的数据块的标识尚未被添加入所述拷贝队列,则检测所述主机1请求的写入地址对应的数据块中是否存储有所述差异数据;
[0200]第二地址添加模块313,用于若所述主机1请求的写入地址对应的数据块中存储有所述差异数据,则将所述主机1请求的写入地址添加入所述写入链表;
[0201]第三执行模块314,用于立即执行所述主机1请求。
[0202]可选的,所述装置还包括:
[0203]第四执行模块315,用于若所述主机1请求的写入地址为所述已拷贝区中的元素对应的数据块的地址,则立刻执行所述主机1请求。
[0204]可选的,所述装置还包括:
[0205]确定模块316,用于在所述标识获取模块301获取差异数据对应在主逻辑单元中的至少一个数据块的标识时,若返回的数据块的标识数目为O,则确定所述主逻辑单元与所述从逻辑单元之间的差异数据对应在主逻辑单元中的数据块的标识已经获取完成。
[0206]可选的,所述装置还包括:
[0207]第四检测模块317,用于检测所述已拷贝区中的元素的个数是否达到预定阈值;
[0208]删除模块318,用于若所述第四检测模块317的检测结果为所述已拷贝区中的元素的个数达到所述预定阈值,则将所述已拷贝区中的元素从差异信息中删除;
[0209]其中,所述差异信息包含于元数据中,且包含所述差异数据所在的各个数据块的标识;所述元数据用于描述所述主逻辑单元中存储的用户数据。
[0210]综上所述,本发明实施例提供的数据拷贝装置,通过设置包含已拷贝区、拷贝区和缓存区的拷贝队列,分别存储完成拷贝的数据块的标识、正在进行拷贝的数据块的标识以及尚未开始拷贝的数据块的标识,不需要对拷贝队列进行遍历,仅通过队列中不同区域的数据块的标识即可以确定数据块的拷贝状态,解决了现有技术中每次从链表中添加或者删除节点时,都需要遍历整个链表,从而导致数据拷贝效率低的问题,达到节约处理时间,提高拷贝效率的效果。
[0211]此外,本发明实施例提供的数据拷贝装置,只需要将待拷贝的数据块的标识添加入拷贝队列,拷贝队列中的元素的数量取决于后台并发拷贝的数据块的数量,与写入操作的并发数无关,内存资源占用量小。
[0212]其次,本发明实施例提供的数据拷贝装置,将数据块划分为更小粒度的存储单元,只有判断出写入地址与正在或者即将拷贝的存储单元发生冲突时,才确定写入操作与拷贝操作冲突,提高了对小数据量写入操作的判断精度,提高写入或者拷贝性能。
[0213]另外,本发明实施例提供的数据拷贝装置,根据数据块中的差异数据的大小划分数据块,能够灵活的确定判断精度,进一步提高写入或者拷贝性能。
[0214]最后,本发明实施例提供的数据拷贝装置,在将拷贝完成的数据块的标识从差异信息中删除时,可以一次删除尽可能多的数据块的标识,以减少元数据的访问次数,提高拷贝效率。
[0215]需要说明的是:上述实施例提供的数据拷贝装置在进行数据拷贝或者执行主机10请求时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的数据拷贝装置与数据拷贝方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
[0216]上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
[0217]本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
[0218]以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种数据拷贝方法,其特征在于,所述方法包括: 获取差异数据对应在主逻辑单元中的至少一个数据块的标识,所述差异数据为所述主逻辑单元与从逻辑单元之间存在差异的数据,所述从逻辑单元为所述主逻辑单元的备份; 将所述至少一个数据块的标识依次添加至拷贝队列中的缓存区的末尾;所述拷贝队列包括已拷贝区、拷贝区和缓存区;所述已拷贝区中的元素为已经完成拷贝的数据块的标识,所述拷贝区中的元素为正在进行拷贝的数据块的标识,所述缓存区中的元素为尚未开始拷贝的数据块的标识; 将待拷贝数据块所存储的所述差异数据拷贝至所述从逻辑单元,并将所述待拷贝数据块的标识移动至所述拷贝区;所述待拷贝数据块为所述缓存区中的第一个元素对应的数据块; 在所述拷贝区中的元素对应的数据块所存储的数据已拷贝完成之后,将所述数据已拷贝完成的元素从所述拷贝区移动至所述已拷贝区。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括: 当所述主逻辑单元接收到主机输入输出1请求时,判断所述主机1请求的写入地址与所述拷贝区中的元素对应的后台拷贝的数据块的地址是否存在冲突; 若所述主机1请求的写入地址与所述拷贝区中的元素对应的后台拷贝的数据块的地址不存在冲突,则执行所述主机1请求; 若所述主机1请求的写入地址与所述拷贝区中的元素对应的后台拷贝的数据块的地址存在冲突,则等待与所述主机1请求的写入地址存在冲突的数据块拷贝完成后,再执行所述主机1请求。
3.根据权利要求2所述的方法,其特征在于,所述判断所述主机1请求的写入地址与所述拷贝区中的元素对应的后台拷贝的数据块的地址是否存在冲突,包括: 检测所述主机1请求的写入地址对应的数据块的标识是否存在于所述拷贝区中; 若检测结果为所述主机1请求的写入地址对应的数据块的标识存在于所述拷贝区中,则获取所述主机1请求的写入地址对应的数据块的位图,所述位图用于指示所述主机1请求的写入地址对应的数据块中的差异单元,所述差异单元为存储有所述差异数据的最小数据单元; 检测所述主机1请求的写入地址与所述差异单元的地址是否存在冲突; 若检测结果为所述主机1请求的写入地址与所述差异单元的地址存在冲突,则确定所述主机1请求的写入地址与所述拷贝区中的元素对应的后台拷贝的数据块的地址存在冲突。
4.根据权利要求3所述的方法,其特征在于,所述将待拷贝数据块所存储的所述差异数据拷贝至所述从逻辑单元,包括: 获取所述待拷贝数据块的位图; 根据所述待拷贝数据块的位图,将所述待拷贝数据块的差异单元中的数据拷贝至所述从逻辑单元。
5.根据权利要求2所述的方法,其特征在于,所述将待拷贝数据块所存储的所述差异数据拷贝至所述从逻辑单元之前,所述方法包括: 检测所述待拷贝数据块的地址与写入链表中的写入地址是否存在冲突,所述写入链表中存储有未完成的主机1请求的写入地址; 若所述待拷贝数据块的地址与所述写入链表中的写入地址存在冲突,则等待所述写入链表中,与所述待拷贝数据块的地址冲突的写入地址所对应的主机1请求完成后,再执行将所述待拷贝数据块所存储的所述差异数据拷贝至所述从逻辑单元的步骤。
6.根据权利要求5所述的方法,其特征在于,若所述主机1请求的写入地址与所述拷贝区中的元素对应的后台拷贝的数据块的地址不存在冲突,所述方法还包括: 检测所述主机1请求的写入地址与所述缓存区中的元素对应的数据块的地址是否存在冲突; 若所述主机1请求的写入地址与所述缓存区中的元素对应的数据块的地址存在地址冲突,则将所述主机1请求的写入地址添加入所述写入链表。
7.根据权利要求6所述的方法,其特征在于,所述检测所述主机1请求的写入地址与所述缓存区中的元素对应的数据块的地址是否存在冲突,包括: 检测所述主机1请求的写入地址对应的数据块的标识是否存在于所述缓存区中; 若检测结果为所述主机1请求的写入地址对应的数据块的标识存在于所述缓存区中,则获取所述主机1请求的写入地址对应的数据块的位图,所述位图用于指示所述主机1请求的写入地址对应的数据块中的差异单元,所述差异单元为存储有所述差异数据的最小数据单元; 检测所述主机1请求的写入地址与所述差异单元的地址是否存在冲突; 若检测结果为所述主机1请求的写入地址与所述差异单元的地址存在冲突,则确定所述主机1请求的写入地址与所述缓存区中的元素对应的后台拷贝的数据块的地址存在冲突。
8.根据权利要求5至7任一所述的方法,其特征在于,所述方法还包括: 若所述主机1请求的写入地址对应的数据块的标识尚未被添加入所述拷贝队列,则检测所述主机1请求的写入地址对应的数据块中是否存储有所述差异数据; 若所述主机1请求的写入地址对应的数据块中存储有所述差异数据,则将所述主机1请求的写入地址添加入所述写入链表,立即执行所述主机1请求。
9.根据权利要求2至7任一所述的方法,其特征在于,所述方法还包括: 若所述主机1请求的写入地址为所述已拷贝区中的元素对应的数据块的地址,则立刻执行所述主机1请求。
10.根据权利要求1至7任一所述的方法,其特征在于,所述方法还包括: 在获取差异数据对应在主逻辑单元中的数据块的标识时,若返回的数据块的标识数目为0,则确定所述主逻辑单元与所述从逻辑单元之间的差异数据对应在主逻辑单元中的数据块的标识已经获取完成。
11.根据权利要求1至7任一所述的方法,其特征在于,所述方法还包括: 检测所述已拷贝区中的元素的个数是否达到预定阈值; 若所述已拷贝区中的元素的个数达到所述预定阈值,则将所述已拷贝区中的元素从差异信息中删除; 其中,所述差异信息包含于元数据中,且包含所述差异数据所在的各个数据块的标识;所述元数据用于描述所述主逻辑单元中存储的用户数据。
12.—种数据拷贝装置,其特征在于,所述装置包括: 标识获取模块,用于获取差异数据对应在主逻辑单元中的至少一个数据块的标识,所述差异数据为所述主逻辑单元与从逻辑单元之间存在差异的数据,所述从逻辑单元为所述主逻辑单元的备份; 标识添加模块,用于将所述至少一个数据块的标识依次添加至拷贝队列中的缓存区的末尾;所述拷贝队列包括已拷贝区、拷贝区和缓存区;所述已拷贝区中的元素为已经完成拷贝的数据块的标识,所述拷贝区中的元素为正在进行拷贝的数据块的标识,所述缓存区中的元素为尚未开始拷贝的数据块的标识; 拷贝模块,用于将待拷贝数据块所存储的所述差异数据拷贝至所述从逻辑单元;所述待拷贝数据块为所述缓存区中的第一个元素对应的数据块; 第一移动模块,用于将所述待拷贝数据块的标识移动至所述拷贝区; 第二移动模块,用于在所述拷贝区中的元素对应的数据块所存储的数据已拷贝完成后,将所述数据已拷贝完成的元素从所述拷贝区移动至所述已拷贝区。
13.根据权利要求12所述的装置,其特征在于,所述装置还包括: 判断模块,用于当所述主逻辑单元接收到主机1请求时,判断所述主机1请求的写入地址与所述拷贝区中的元素对应的后台拷贝的数据块的地址是否存在冲突;第一执行模块,用于若所述判断模块的判断结果为所述主机1请求的写入地址与所述拷贝区中的元素对应的后台拷贝的数据块的地址不存在冲突,则执行所述主机1请求;第二执行模块,用于若所述判断模块的判断结果为所述主机1请求的写入地址与所述拷贝区中的元素对应的后台拷贝的数据块的地址存在冲突,则等待与所述主机1请求的写入地址存在冲突的数据块拷贝完成后,再执行所述主机1请求。
14.根据权利要求13所述的装置,其特征在于,所述判断模块,包括: 第一检测单元,用于检测所述主机1请求的写入地址对应的数据块的标识是否存在于所述拷贝区中; 第一位图获取单元,用于若所述第一检测单元的检测结果为所述主机1请求的写入地址对应的数据块的标识存在于所述拷贝区中,则获取所述主机1请求的写入地址对应的数据块的位图,所述位图用于指示所述主机1请求的写入地址对应的数据块中的差异单元,所述差异单元为存储有所述差异数据的最小数据单元; 第二检测单元,用于检测所述主机1请求的写入地址与所述差异单元的地址是否存在冲突; 第一确定单元,用于若所述第二检测单元的检测结果为所述主机1请求的写入地址与所述差异单元的地址存在冲突,则确定所述主机1请求的写入地址与所述拷贝区中的元素对应的后台拷贝的数据块的地址存在冲突。
15.根据权利要求14所述的装置,其特征在于,所述拷贝模块,包括: 第二位图获取单元,用于获取所述待拷贝数据块的位图; 拷贝单元,用于根据所述待拷贝数据块的位图,将所述待拷贝数据块的差异单元中的数据拷贝至所述从逻辑单元。
16.根据权利要求13所述的装置,其特征在于,所述装置包括: 第一检测模块,用于在所述拷贝模块将待拷贝数据块所存储的所述差异数据拷贝至所述从逻辑单元之前,检测所述待拷贝数据块的地址与写入链表中的写入地址是否存在冲突,所述写入链表中存储有未完成的主机1请求的写入地址; 所述拷贝模块,用于若所述待拷贝数据块的地址与所述写入链表中的写入地址存在冲突,则等待所述写入链表中,与所述待拷贝数据块的地址冲突的写入地址所对应的主机1请求完成后,再执行将所述待拷贝数据块所述存储的所述差异数据拷贝至所述从逻辑单元的步骤。
17.根据权利要求16所述的装置,其特征在于,所述装置还包括: 第二检测模块,用于若所述判断模块的判断结果为所述主机1请求的写入地址与所述拷贝区中的元素对应的后台拷贝的数据块的地址不存在冲突,则检测所述主机1请求的写入地址与所述缓存区中的元素对应的数据块的地址是否存在冲突; 第一地址添加模块,用于若所述主机1请求的写入地址与所述缓存区中的元素对应的数据块的地址存在地址冲突,则将所述主机1请求的写入地址添加入所述写入链表。
18.根据权利要求17所述的装置,其特征在于,所述第二检测模块,包括: 第三检测单元,用于检测所述主机1请求的写入地址对应的数据块的标识是否存在于所述缓存区中; 第三位图获取单元,用于若所述第三检测单元的检测结果为所述主机1请求的写入地址对应的数据块的标识存在于所述缓存区中,则获取所述主机1请求的写入地址对应的数据块的位图,所述位图用于指示所述主机1请求的写入地址对应的数据块中的差异单元,所述差异单元为存储有所述差异数据的最小数据单元; 第四检测单元,用于检测所述主机1请求的写入地址与所述差异单元的地址是否存在冲突; 第二确定单元,用于若所述第四检测单元的检测结果为所述主机1请求的写入地址与所述差异单元的地址存在冲突,则确定所述主机1请求的写入地址与所述缓存区中的元素对应的后台拷贝的数据块的地址存在冲突。
19.根据权利要求16或18任一所述的装置,其特征在于,所述装置还包括: 第三检测模块,用于若所述主机1请求的写入地址对应的数据块的标识尚未被添加入所述拷贝队列,则检测所述主机1请求的写入地址对应的数据块中是否存储有所述差异数据; 第二地址添加模块,用于若所述主机1请求的写入地址对应的数据块中存储有所述差异数据,则将所述主机1请求的写入地址添加入所述写入链表; 第三执行模块,用于立即执行所述主机1请求。
20.根据权利要求13或18所述的装置,其特征在于,所述装置还包括: 第四执行模块,用于若所述主机1请求的写入地址为所述已拷贝区中的元素对应的数据块的地址,则立刻执行所述主机1请求。
21.根据权利要求12至18任一所述的装置,其特征在于,所述装置还包括: 确定模块,用于在所述标识获取模块获取差异数据对应在主逻辑单元中的至少一个数据块的标识时,若返回的数据块的标识数目为0,则确定所述主逻辑单元与所述从逻辑单元之间的差异数据对应在主逻辑单元中的数据块的标识已经获取完成。
22.根据权利要求12至18任一所述的装置,其特征在于,所述装置还包括: 第四检测模块,用于检测所述已拷贝区中的元素的个数是否达到预定阈值; 删除模块,用于若所述第四检测模块的检测结果为所述已拷贝区中的元素的个数达到所述预定阈值,则将所述已拷贝区中的元素从差异信息中删除; 其中,所述差异信息包含于元数据中,且包含所述差异数据所在的各个数据块的标识;所述元数据用于描述所述主逻辑单元中存储的用户数据。
【文档编号】G06F12/02GK104360953SQ201410548580
【公开日】2015年2月18日 申请日期:2014年10月16日 优先权日:2014年10月16日
【发明者】严俊 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1