一种记录存储数据发生变化的方法及装置转让专利

申请号 : CN201310594802.5

文献号 : CN103605617B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 严俊

申请人 : 华为技术有限公司

摘要 :

本申请公开了一种记录存储数据发生变化的方法及装置,其中,所述方法包括:确定逻辑单元号LUN中当前变化逻辑块所在的逻辑块区;查询位图集中是否已存在所述逻辑块区的对应位图;如果不存在,则在所述位图集中建立所述逻辑块区的对应位图,并在所述对应位图中记录所述当前变化逻辑块发生变化;如果存在,则直接在所述对应位图中记录所述当前变化逻辑块发生变化。通过上述方式,本申请能够减少位图占用的存储资源,降低对内存资源的浪费。

权利要求 :

1.一种记录存储数据发生变化的方法,其特征在于,所述方法包括以下步骤:确定逻辑单元号LUN中当前变化逻辑块所在的逻辑块区,其中,所述逻辑单元号LUN至少包括两个逻辑块区,所述逻辑块区包含多个逻辑块;

查询位图集中是否已存在所述逻辑块区的对应位图,其中,所述位图集用于放置多个位图,每个所述位图用于记录对应一个所述逻辑块区的逻辑块发生变化,所述逻辑块区的对应位图即为记录所述逻辑块区的逻辑块发生变化的位图,所述逻辑块区的对应位图在所述逻辑块区的逻辑块发生变化时才建立;所述逻辑块区的对应位图的每个位分别对应用于记录所述逻辑块区的一个逻辑块是否发生变化,每个位可被设置为第一标记或者第二标记,所述第一标记用于表示该位所对应的逻辑块发生了变化,所述第二标记用于表示该位所对应的逻辑块没有发生变化;

如果不存在,则在所述位图集中建立所述逻辑块区的对应位图,并在所述对应位图中记录所述当前变化逻辑块发生变化;

如果存在,则直接在所述对应位图中记录所述当前变化逻辑块发生变化;

所述方法还包括:

检测所述位图集中是否存在所有位均为所述第二标记的位图,如果存在,则将所述位图从位图集中删除。

2.根据权利要求1所述的方法,其特征在于,所述查询位图集中是否已存在所述逻辑块区的对应位图的步骤之前,所述方法还包括:将所述逻辑单元号LUN中的存储数据划分为多个逻辑块;

将所述多个逻辑块划分为第一数值个逻辑块区,其中,所述第一数值至少为2;

确定每个逻辑块区的对应位图信息,其中,所述逻辑块区的对应位图信息包括所述逻辑块区的对应位图的位数等于所述逻辑块区的逻辑块数。

3.根据权利要求2所述的方法,其特征在于,所述在所述对应位图中记录所述当前变化逻辑块发生变化的步骤包括:根据所述逻辑块区的对应位图信息,查找出所述对应位图中用于记录所述当前变化逻辑块是否发生变化的位,并将查找出的位设置为第一标记,记录所述当前变化逻辑块发生变化的时间。

4.根据权利要求3所述的方法,其特征在于,所述方法还包括:

在接收复制命令时,获取所述复制命令中的预设时间条件;

在所述位图集中搜索出所述逻辑块发生变化的时间符合所述预设时间条件的位图中的位;

将搜索出的位图中的位所对应的逻辑块进行复制操作,在复制完成后将所述搜索出的位图中的位设置为所述第二标记;

所述位图还设置有共享标识,所述共享标识用于标识共享从设备对所述位图记录的发生变化的逻辑块是否已进行共享;所述在复制完成后将所述搜索出的位图中的位设置为所述第二标记,包括:每当一共享从设备完成复制所述变化的逻辑块时,按照设定规则改变所述复制的逻辑块对应的位图中的共享标识;

当所述位图的共享标识改变为第一共享标识时,确定所有共享从设备均完成复制,并将所述搜索出的位图中的位设置为所述第二标记。

5.一种记录存储数据发生变化的装置,其特征在于,所述装置包括确定模块、查询模块、建立模块和记录模块,所述确定模块用于确定逻辑单元号LUN中当前变化逻辑块所在的逻辑块区,并将确定的逻辑块区发生给所述查询模块,其中,所述逻辑单元号LUN至少包括两个逻辑块区,所述逻辑块区包含多个逻辑块;

所述查询模块用于查询位图集中是否已存在所述逻辑块区的对应位图,并将查询结果发送给建立模块和记录模块,其中,所述位图集用于放置多个位图,每个所述位图用于记录对应一个所述逻辑块区的逻辑块发生变化,所述逻辑块区的对应位图即为记录所述逻辑块区的逻辑块发生变化的位图,所述逻辑块区的对应位图在所述逻辑块区的逻辑块发生变化时才建立;所述逻辑块区的对应位图的每个位分别对应用于记录所述逻辑块区的一个逻辑块是否发生变化,每个位可被设置为第一标记或者第二标记,所述第一标记用于表示该位所对应的逻辑块发生了变化,所述第二标记用于表示该位所对应的逻辑块没有发生变化;

所述建立模块用于在未查询到所述逻辑块区的对应位图时,在所述位图集中建立所述逻辑块区的对应位图,并将所述对应位图发送给所述记录模块;

所述记录模块用于在所述对应位图中记录所述当前变化逻辑块发生变化;

所述装置还包括删除模块,

所述删除模块用于检测所述位图集中是否存在所有位均为所述第二标记的位图,如果存在,则将所述位图从位图集中删除。

6.根据权利要求5所述的装置,其特征在于,还包括划分模块,

所述划分模块用于将所述逻辑单元号LUN中的存储数据划分为多个逻辑块,将所述多个逻辑块划分为第一数值个逻辑块区,确定每个逻辑块区的对应位图信息,并将所述每个逻辑块区的对应位图信息发送给所述记录模块,其中,所述第一数值至少为2,所述逻辑块区的对应位图信息包括所述逻辑块区的对应位图的位数等于所述逻辑块区的逻辑块数。

7.根据权利要求6所述的装置,其特征在于,所述记录模块具体用于根据所述逻辑块区的对应位图信息,查找出所述对应位图中用于记录所述当前变化逻辑块是否发生变化的位,并将查找出的位设置为第一标记,并记录所述当前变化逻辑块发生变化的时间。

8.根据权利要求7所述的装置,其特征在于,还包括复制模块,

所述复制模块用于在接收复制命令时,获取所述复制命令中的预设时间条件,在所述位图集中搜索出所述逻辑块发生变化的时间符合所述预设时间条件的位图中的位,将搜索出的位图中的位所对应的逻辑块进行复制操作,在复制完成后将所述搜索出的位图中的位设置为所述第二标记;

所述位图还设置有共享标识,所述共享标识用于标识共享从设备对所述位图记录的发生变化的逻辑块是否已进行共享;

所述复制模块还用于:

每当一共享从设备完成复制所述变化的逻辑块时,按照设定规则改变所述复制的逻辑块对应的位图中的共享标识;

当所述位图的共享标识改变为第一共享标识时,确定所有共享从设备均完成复制,并将所述搜索出的位图中的位设置为所述第二标记。

说明书 :

一种记录存储数据发生变化的方法及装置

技术领域

[0001] 本申请涉及存储技术领域,特别是涉及一种记录存储数据发生变化的方法及装置。

背景技术

[0002] 现有技术中,通常使用位图(Bitmap)技术来记录逻辑单元号(Logic Unit Number,简称LUN)中数据是否发生变化。具体,在内存中申请一块容量固定的内存作为记录LUN中逻辑块(chunk)变化情况的位图,其中,所述位图所需的容量由LUN的最大容量和位图中的位所对应的逻辑块的大小共同决定的。例如,如图1所示,设定位图中一位对应记录一个逻辑块中的数据变化情况,LUN的最大容量为64TB,LUN中每个逻辑块的大小为64KB,则需要容量为1G bit的位图,在LUN没有任何数据发生变化是,位图所有位的数值为“0”,当LUN中逻辑块chunk0、chunk1、chunk2和chunk9中的数据发生了变化,则相应地,位图中第1、2、3及9位被置“1”。故通过确定位图中数值为1的位所在的位置,则可获知LUN中哪些逻辑块发生数据变化。
[0003] 然而,对于目前多样化的存储技术,特别是可动态扩展的存储技术,如精简配置技术,其对LUN的容量可按需分配,且通常情况下其实际容量远小于最大容量。若仍使用现有的位图技术,则存在如下问题:位图的容量是固定的,如果要确保能够记录LUN中的所有逻辑块是否发生变化,则位图容量必须根据LUN的最大支持容量进行申请,而非LUN的实际容量,故造成对申请的内存资源的浪费。而且,在一般系统中支持多个LUN,如支持1024个LUN的情况下,根据上例,每个1TB的LUN需要申请1G bit容量的位图,则一个系统共需要1024*1G bit=1T bit的内存用作位图,显然,仅用于记录变化的位图也占用了大量的内存资源,如果规格继续增大,如此大内存需求,是存储系统难以支撑的。

发明内容

[0004] 本申请主要解决的技术问题是提供一种记录存储数据发生变化的方法及装置,能够减少位图占用的存储资源,降低对内存资源的浪费。
[0005] 为解决上述技术问题,本申请第一方面提供一种记录存储数据发生变化的方法,所述方法包括以下步骤:确定逻辑单元号LUN中当前变化逻辑块所在的逻辑块区,其中,所述逻辑单元号LUN至少包括两个逻辑块区,所述逻辑块区包含多个逻辑块;查询位图集中是否已存在所述逻辑块区的对应位图,其中,所述位图集用于放置多个位图,每个所述位图用于记录对应一个所述逻辑块区的逻辑块发生变化,所述逻辑块区的对应位图即为记录所述逻辑块区的逻辑块发生变化的位图;如果不存在,则在所述位图集中建立所述逻辑块区的对应位图,并在所述对应位图中记录所述当前变化逻辑块发生变化;如果存在,则直接在所述对应位图中记录所述当前变化逻辑块发生变化。
[0006] 结合第一方面,本申请第一方面第一种可能的实施方式为:所述查询位图集中是否已存在所述逻辑块区的对应位图的步骤之前,所述方法还包括:将所述逻辑单元号LUN中的存储数据划分为多个逻辑块;将所述多个逻辑块划分为第一数值个逻辑块区,其中,所述第一数值至少为2;确定每个逻辑块区的对应位图信息,其中,所述逻辑块区的对应位图信息包括所述逻辑块区的对应位图的位数等于所述逻辑块区的逻辑块数,所述逻辑块区的对应位图的每个位分别对应用于记录所述逻辑块区的一个逻辑块是否发生变化,每个位可被设置为第一标记或者第二标记,所述第一标记用于表示该位所对应的逻辑块发生了变化,所述第二标记用于表示该位所对应的逻辑块没有发生变化。
[0007] 结合第一方面的第一种可能的实施方式,本申请第一方面第二种可能的实施方式为:所述在所述对应位图中记录所述当前变化逻辑块发生变化的步骤包括:根据所述逻辑块区的对应位图信息,查找出所述对应位图中用于记录所述当前变化逻辑块是否发生变化的位,并将查找出的位设置为第一标记,记录所述当前变化逻辑块发生变化的时间。
[0008] 结合第一方面的第二种可能的实施方式,本申请第一方面第三种可能的实施方式为:所述方法还包括:在接收复制命令时,获取所述复制命令中的预设时间条件;在所述位图集中搜索出所述逻辑块发生变化的时间符合所述预设时间条件的位图中的位;将搜索出的位图中的位所对应的逻辑块进行复制操作,在复制完成后将所述搜索出的位图中的位设置为所述第二标记。
[0009] 结合第一方面的第一至三任一种可能的实施方式,本申请第一方面第四种可能的实施方式为:所述方法还包括:检测所述位图集中是否存在所有位均为所述第二标记的位图,如果存在,则将所述位图从位图集中删除。
[0010] 为了解决上述技术问题,本申请第二方面提供一种记录存储数据发生变化的装置,所述装置包括确定模块、查询模块、建立模块和记录模块,所述确定模块用于确定逻辑单元号LUN中当前变化逻辑块所在的逻辑块区,并将确定的逻辑块区发生给所述查询模块,其中,所述逻辑单元号LUN至少包括两个逻辑块区,所述逻辑块区包含多个逻辑块;所述查询模块用于查询位图集中是否已存在所述逻辑块区的对应位图,并将查询结果发送给建立模块和记录模块,其中,所述位图集用于放置多个位图,每个所述位图用于记录对应一个所述逻辑块区的逻辑块发生变化,所述逻辑块区的对应位图即为记录所述逻辑块区的逻辑块发生变化的位图;所述建立模块用于在未查询到所述逻辑块区的对应位图时,在所述位图集中建立所述逻辑块区的对应位图,并将所述对应位图发送给所述记录模块;所述记录模块用于在所述对应位图中记录所述当前变化逻辑块发生变化。
[0011] 结合第二方面,本申请第二方面第一种可能的实施方式为:还包括划分模块,所述划分模块用于将所述逻辑单元号LUN中的存储数据划分为多个逻辑块,将所述多个逻辑块划分为第一数值个逻辑块区,确定每个逻辑块区的对应位图信息,并将所述每个逻辑块区的对应位图信息发送给所述记录模块,其中,所述第一数值至少为2,所述逻辑块区的对应位图信息包括所述逻辑块区的对应位图的位数等于所述逻辑块区的逻辑块数,所述逻辑块区的对应位图的每个位分别对应用于记录所述逻辑块区的一个逻辑块是否发生变化,每个位可被设置为第一标记或者第二标记,所述第一标记用于表示该位所对应的逻辑块发生了变化,所述第二标记用于表示该位所对应的逻辑块没有发生变化。
[0012] 结合第二方面的第一种可能的实施方式,本申请第二方面第二种可能的实施方式为:所述记录模块具体用于根据所述逻辑块区的对应位图信息,查找出所述对应位图中用于记录所述当前变化逻辑块是否发生变化的位,并将查找出的位设置为第一标记,并记录所述当前变化逻辑块发生变化的时间。
[0013] 结合第二方面的第二种可能的实施方式,本申请第二方面第三种可能的实施方式为:还包括复制模块,所述复制模块用于在接收复制命令时,获取所述复制命令中的预设时间条件,在所述位图集中搜索出所述逻辑块发生变化的时间符合所述预设时间条件的位图中的位,将搜索出的位图中的位所对应的逻辑块进行复制操作,在复制完成后将所述搜索出的位图中的位设置为所述第二标记。
[0014] 结合第二方面的第一至三任一种可能的实施方式,本申请第二方面第四种可能的实施方式为:还包括删除模块,所述删除模块用于检测所述位图集中是否存在所有位均为所述第二标记的位图,如果存在,则将所述位图从位图集中删除。
[0015] 通过上述方案,本申请采用位图集来实现记录LUN的存储数据的变化,并在逻辑块发生变化时,才建立该逻辑块的对应位图,区别于固定采用一个位图记录LUN所有存储数据的变化情况的现有技术,本申请采用动态位图方式,使得位图总占用的存储空间与LUN发生变化的逻辑块数对应,实现了位图的按需分配,减少占用存储资源,同时,也提高了位图的利用效率,减少对位图内存资源的浪费。

附图说明

[0016] 图1是现有技术中LUN中逻辑块与位图间的对应关系图;
[0017] 图2是本申请记录存储数据发生变化的方法一实施方式的流程图;
[0018] 图3是本申请记录存储数据发生变化的方法另一实施方式的流程图;
[0019] 图4是图3所示的记录存储数据发生变化的方法中预先设置每个逻辑块区的逻辑块信息和对应位图信息的流程图;
[0020] 图5是本申请记录存储数据发生变化的装置进行异步远程复制一实施方式中位图集的结构示意图;
[0021] 图6是本申请记录存储数据发生变化的装置进行同步远程复制一实施方式中位图集的结构示意图;
[0022] 图7是本申请记录存储数据发生变化的装置一实施方式的结构示意图;
[0023] 图8是本申请记录存储数据发生变化的装置另一实施方式的结构示意图;
[0024] 图9是本申请记录存储数据发生变化的装置再一实施方式的结构示意图。

具体实施方式

[0025] 下面结合附图和具体的实施方式进行说明。
[0026] 请参阅图2,图2是本申请记录存储数据发生变化的方法一实施方式的流程图。本实施方式中,所述方法包括以下步骤:
[0027] 步骤S201:记录存储数据发生变化的装置确定LUN中当前变化逻辑块所在的逻辑块区。
[0028] 本实施方式中,LUN采用精简配置(thin)技术,所述LUN可进行动态扩展。其中,所述LUN作为存储空间,至少包括两个逻辑块区,所述逻辑块区包含多个逻辑块,每个逻辑块定义为一定容量大小的存储数据。本实施方式中,LUN中每个逻辑块均分配有不同的逻辑块号,将每个逻辑块区的逻辑块信息预先保存在本地,例如,第一逻辑块区包含逻辑块0和1,第二逻辑块区包含逻辑块2和3……如此类推。在LUN中的逻辑块发生变化时,记录存储数据发生变化的装置获取LUN中当前变化逻辑块的逻辑块号,预设的逻辑块区与逻辑块间的关系为每个逻辑块包括两个逻辑块,确定所述当前变化逻辑块所在的逻辑块区。
[0029] 步骤S202:查询位图集中是否已存在所述逻辑块区的对应位图。
[0030] 本申请中,LUN中的逻辑块上的存储数据发生变化即为LUN中的逻辑块发生变化。在LUN中的逻辑块发生变化时,记录存储数据发生变化的装置采用所述位图集记录所述LUN中逻辑块发生变化的情况。所述位图集可以不同的数据结构方式(如树结构、列表)保存在存储介质中,优化地,所述装置也可将位图集暂存在缓存中,以加速位图空间的处理,并定时将缓存中的位图集数据存放在永久存储介质,例如硬盘、flash。具体地,所述位图集用于放置多个位图,其中,每个所述位图用于记录对应一个所述逻辑块区的逻辑块发生变化。
[0031] 具体,所述装置本地预设有LUN中每个逻辑块区的对应位图信息。当LUN中的逻辑块发生变化时,记录存储数据发生变化的装置根据预设的对应位图信息获得当前变化逻辑块所在的逻辑块区的对应位图信息,并查询位图集中是否包括获取的对应位图信息,如果不包括,即位图集中不存在当前变化逻辑块的逻辑块区的对应位图,则执行步骤S203,如果包括,即位图集中已存在当前变化逻辑块的逻辑块区的对应位图,则执行步骤S204。其中,所述逻辑块区的对应位图即为记录所述逻辑块区的逻辑块发生变化的位图。
[0032] 举例说明,LUN中划分为16个逻辑块区,每个逻辑块区包括8个逻辑块。记录存储数据发生变化的装置预先设置每个逻辑块区的对应位图信息为第一逻辑块区的对应位图为第一位图,第二逻辑块区的对应位图为第二位图……如此类推,且每个位图包括8个位,每个位用于记录一个逻辑块是否发生变化。对应地,第一位图对应用于记录第一逻辑块区,即第1到8个逻辑块,第二位图对应用于记录第二逻辑块区,即第9到16个逻辑块,第三位图对应用于记录第三逻辑块区,即第17到24个逻辑块……如此类推。在LUN中的第10、15个逻辑块发生变化时,所述装置确定所述当前变化的逻辑块位于第二逻辑块区,根据上述预设的逻辑块区对应位图信息,获得所述第二逻辑块区的对应位图信息为第二位图,所述装置查询当前的位图集中建立的位图的信息是否包括第二位图信息,如果包括,则位图集中已建立第二逻辑块区的对应位图,如果不包括,则位图集中未建立第二逻辑块区的对应位图。
[0033] 步骤S203:在所述位图集中建立所述逻辑块区的对应位图,并在所述对应位图中记录所述当前变化逻辑块发生变化。
[0034] 如果在位图集中未查询到所述当前变化逻辑块所在的逻辑块区的对应位图,则记录存储数据发生变化的装置在所述位图集中建立所述当前变化逻辑块所在的逻辑块区的对应位图,并且在所述对应位图中记录所述当前变化逻辑块发生变化,例如,将对应位图中对应当前变化逻辑块的位设置为第一标记,以标识该位对应的逻辑块发生变化,而对应位图中对应没有发生变化的逻辑块的位则设置为第二标记,以标识该位所对应的逻辑块没有发生变化。
[0035] 步骤S204:直接在所述对应位图中记录所述当前变化逻辑块发生变化。
[0036] 如果在位图集中查询到所述当前变化逻辑块所在的逻辑块区的对应位图,则记录存储数据发生变化的装置在所述对应位图中记录所述当前变化逻辑块发生变化,例如,将对应位图中对应当前变化逻辑块的位设置为第一标记,以标识该位对应的逻辑块发生变化,而对应位图中对应没有发生变化的逻辑块的位则设置为第二标记,以标识该位所对应的逻辑块没有发生变化。
[0037] 本实施方式中,采用位图集方式记录LUN中的逻辑块是否发生变化,将LUN分为多个逻辑块区,一个逻辑块区对应一个位图,且位图集中的位图产生条件为:在逻辑块发生变化时,才建立所述逻辑块所在的逻辑块区的对应位图,无需产生没有发生变化的逻辑块区的对应位图,实现了位图按需分配,减少对位图空间的浪费,同时,也减少了总位图占用的存储资源。
[0038] 需要说明的是,本实施方式中的LUN采用精简配置技术,但在其他实施方式中,所述LUN还可采用其他可进行动态扩展的技术,或者LUN的不可进行动态扩展,其容量固定大小,其LUN的具体种类并不影响本申请方法的实施,故在此不对LUN进行具体限定。
[0039] 请参阅图3,图3是本申请记录存储数据发生变化的方法另一实施方式的流程图。本实施方式中,所述方法包括以下步骤:
[0040] 步骤S301:记录存储数据发生变化的装置确定LUN中当前变化逻辑块所在的逻辑块区。
[0041] 具体地,请参阅图4,在采用位图集以记录逻辑块发生变化情况之前,本方法还包括预先设置每个逻辑块区的逻辑块信息和对应位图信息,具体为:
[0042] 步骤S401:将所述LUN中的存储数据划分为多个逻辑块。
[0043] 记录存储数据发生变化的装置将LUN中的存储数据划分为多个逻辑块,例如,LUN当前分配的容量为1GB,所述装置将LUN划分为1024个容量为1KB的逻辑块,每个逻辑块分配有不同的逻辑块号,例如,逻辑块0、逻辑块1、逻辑块2等。
[0044] 步骤S402:将所述多个逻辑块划分为第一数值个逻辑块区,其中,所述第一数值至少为2。
[0045] 例如,LUN中包括有1024个逻辑块,将1024个逻辑块划分为128个逻辑块区,每个逻辑块区包括8个逻辑块,如第一逻辑块区包括逻辑块0至7、第二逻辑块区包括逻辑块8至15……如此类推。
[0046] 当然,所述装置未必按顺序划分逻辑块,在其他实施方式中,根据实际情况需要,可将LUN中不是连续的逻辑块划分在一个逻辑块区,而且,每个逻辑块区的逻辑块数并不限定为全部相同,此时,在所述装置划分好逻辑块区后,需将每个逻辑块区的逻辑块信息(如逻辑块号)保存在本地,以使所述装置能够根据保存的逻辑块信息确定LUN中逻辑块所在的逻辑块区。
[0047] 步骤S403:确定每个逻辑块区的对应位图信息。
[0048] 所述装置为LUN中每个逻辑块区对应设置一个对应位图信息,并将每个逻辑块区的对应位图信息保存在本地,其中,所述逻辑块区的对应位图信息包括所述逻辑块区的对应位图的位数等于所述逻辑块区的逻辑块数,所述逻辑块区的对应位图的每个位分别对应用于记录所述逻辑块区的一个逻辑块是否发生变化,每个位可被设置为第一标记或者第二标记,所述第一标记用于表示该位所对应的逻辑块发生了变化,所述第二标记用于表示该位所对应的逻辑块没有发生变化。例如,所述第一标记为1,第二标记为0,当逻辑块发生变化时,则将对应该逻辑块的位置1,如果逻辑块没有发生变化,则将对应该逻辑块的位置0,通过判断该位为0还是1,则可知道该位对应的逻辑块是否发生变化。
[0049] 记录存储数据发生变化的装置通过上述步骤S401-S403,进行预设每个逻辑块区的逻辑块信息和对应位图信息后,所述装置在逻辑块发生变化时,则执行步骤S301-S308,以采用位图集记录发生变化的逻辑块情况。
[0050] 本实施方式中,在LUN中的逻辑块发生变化时,记录存储数据发生变化的装置获取当前变化的逻辑块信息,并根据预设逻辑块区与逻辑块间的关系或者保存的每个逻辑块区的逻辑块信息,确定LUN中当前变化逻辑块所在的逻辑块区。例如,LUN中逻辑块顺序分配为多个逻辑块区,且每个逻辑块区均包括8个逻辑块,即第一逻辑块区包括逻辑块0-7,第二逻辑块区包括逻辑块8-16……当逻辑块20发生变化时,所述装置获取发生变化的逻辑块号为20,根据预设逻辑块区与逻辑块间的关系为每个逻辑块区均包括8个逻辑块,即可计算出发生变化的逻辑块所在的逻辑块区为第三逻辑块区。或者,在本地保存有每个逻辑块区的逻辑块信息时,所述装置可直接根据保存的信息,确定当前变化逻辑块所在的逻辑块区。
[0051] 步骤S302:查询位图集中是否已存在所述逻辑块区的对应位图。
[0052] 本实施方式中,在LUN中的逻辑块发生变化时,记录存储数据发生变化的装置采用所述位图集记录所述LUN中逻辑块发生变化的情况。所述位图集可以不同的数据结构方式(如树结构、列表)保存在存储介质中,优化地,所述装置也可将位图集暂存在缓存中,并定时将缓存中的位图集数据存放在永久存储介质,例如硬盘、flash。具体地,所述位图集用于放置多个位图,其中,每个所述位图用于记录对应一个所述逻辑块区的逻辑块发生变化。
[0053] 具体,当LUN中的逻辑块发生变化时,记录存储数据发生变化的装置根据预设的每个逻辑块区的对应位图信息,获得当前变化逻辑块所在的逻辑块区的对应位图信息,并查询位图集中是否已存在当前变化逻辑块的逻辑块区的对应位图,如果不存在,则执行步骤S303,如果存在,则执行步骤S304。其中,所述逻辑块区的对应位图即为记录所述逻辑块区的逻辑块发生变化的位图。
[0054] 步骤S303:在所述位图集中建立所述逻辑块区的对应位图,根据所述逻辑块区的对应位图信息,查找出所述对应位图中用于记录所述当前变化逻辑块是否发生变化的位,并将查找出的位设置为第一标记,记录所述当前变化逻辑块发生变化的时间。
[0055] 如果在位图集中未查询到所述当前变化逻辑块所在的逻辑块区的对应位图,则所述装置在位图树中插入节点,该插入的节点携带所述当前变化逻辑块所在的逻辑块区的对应位图,以实现在所述位图集中建立所述当前变化逻辑块的对应位图。并且,所述装置根据所述逻辑块区的对应位图信息中对应位图每个位对应的逻辑块信息,查找出所述对应位图中用于记录所述当前变化逻辑块是否发生变化的位,并将查找出的位设置为第一标记,记录所述当前变化逻辑块发生变化的时间。
[0056] 另外,本实施方式中,将当前变化逻辑块发生变化的时间以列表形式记录在内存中,当然,在其他实施方式中,还可以其他方式记录当前变化逻辑块发生变化的时间,在此不作限定。
[0057] 步骤S304:根据所述逻辑块区的对应位图信息,查找出所述对应位图中用于记录所述当前变化逻辑块是否发生变化的位,并将查找出的位设置为第一标记,记录所述当前变化逻辑块发生变化的时间。
[0058] 如果在位图集中查询到所述当前变化逻辑块所在的逻辑块区的对应位图,则记录存储数据发生变化的装置根据所述逻辑块区的对应位图信息中对应位图每个位对应的逻辑块信息,查找出所述对应位图中用于记录所述当前变化逻辑块是否发生变化的位,并将查找出的位设置为第一标记,记录所述当前变化逻辑块发生变化的时间。
[0059] 步骤S305:在接收复制命令时,获取所述复制命令中的预设时间条件。
[0060] 进一步地,本申请记录存储数据发生变化的方法应用于远程复制技术(如异步远程复制、同步远程复制等)时,即如果主机上LUN的逻辑块数据发生变化,则执行上述步骤S301至S304以记录所述逻辑块发生变化,并且将主机上发生变化的逻辑块复制到从机上的LUN中。记录存储数据发生变化的装置接收到将主机发生变化的逻辑块复制到从机中的复制命令时,对所述复制命令进行解析,获得命令中包括的预设时间条件。
[0061] 步骤S306:在所述位图集中搜索出所述逻辑块发生变化的时间符合所述预设时间条件的位图中的位。
[0062] 记录存储数据发生变化的装置遍历记录的所述位图集中所有位图的所有位上对应记录的逻辑块发生变化的时间,并搜索出逻辑块发生变化的时间符合预设时间条件的位图中的位。
[0063] 步骤S307:将搜索出的位图中的位所对应的逻辑块进行复制操作,在复制完成后将所述搜索出的位图中的位设置为所述第二标记。
[0064] 记录存储数据发生变化的装置根据搜索出的位图中的位,查找出所述搜索出的位图中的位对应的LUN中的逻辑块,并将查找出的逻辑块复制到从机中,在复制完成后,将所述搜索出的位图中的位设置为所述第二标记。
[0065] 进一步地,在所述方法应用于一主多从远程分享的实施方式中,所述位图还设置有共享标识,所述共享标识用于标识共享从设备对所述位图记录的发生变化的逻辑块是否已进行共享,其中,所述共享标识为第一共享标识时,则表示所有共享从设备对所述位图记录的发生变化的逻辑块已进行共享,所述共享标识为第二共享标识时,则表示共享从设备对所述位图记录的发生变化的逻辑块未完成共享。所述记录存储数据发生变化的装置在将查找出的逻辑块复制到从机后,如果判断所述共享标识为第一共享标识,即表示所有共享从设备对所述位图记录的发生变化的逻辑块已进行共享,则将所述搜索出的位图中的位设置为所述第二标记。例如,一主五从的远程复制中,主机LUN的逻辑块发生变化并记录在对应位图上,且将所述位图的共享标识设置为5。每个从机从主机LUN中完成复制所述变化的逻辑块时,将共享标识减1,当五个从机均完成复制时,所述共享标识为0。当所述装置检测到所述共享标识为0时,则将所述搜索出的位图中的位设置为所述第二标记。本申请可以通过在位图中设置共享标识,使得位图中携带各共享从设备的共享情况,而无需对每个共享从设备配置位图集,减少了对存储资源的占用。
[0066] 本实施方式中,在进行对发生变化的逻辑块进行复制时,以逻辑块发生变化的时间为基准,选择将某一段时间段或者某一时刻的逻辑块进行复制,提高了复制的灵活性,且在将时间条件设置为执行复制的时间之前时,可使所述装置对复制过程中发生变化的逻辑块不作复制处理,以避免复制与逻辑块发生变化同步发生时,容易出现遗漏对同步发生的部分逻辑块进行复制,或者在对某一逻辑块完成复制时,所述逻辑块再次发生变化,进而无法实现从机对应逻辑块数据的更新等情况。
[0067] 步骤S308:检测所述位图集中是否存在所有位均为第二标记的位图,如果存在,则将所述位图从位图集中删除。
[0068] 记录存储数据发生变化的装置定时或者在接收到检测命令时,检测位图集中是否存在所有位均为第二标识的位图,如果存在,则表示所述位图对应的逻辑块当前均无发生变化,故将所述所有位均为第二标识的位图从位图集中删除。
[0069] 举第一例进行说明,请参阅图5,本申请方法应用在异步远程复制中,其中,异步远程复制即为每隔一段时间,将主机上LUN中发生变化的存储数据复制到从机LUN中。同时,每当主机上LUN中的逻辑块数据发生变化,所述装置执行上述步骤S301至S304,以记录当前变化逻辑块发生了变化和发生变化的时间。如图5,t0、t1、t2、t3表示每个位图对应逻辑块发生变化的时间,其中t0
[0070] 举第二例进行说明,请参阅图6,本申请方法应用在同步远程复制中,其中,同步远程复制即为当主机上LUN中存储数据发生变化时,立刻将主机上LUN中发生变化的存储数据复制到从机LUN中。与第一例类似,位图集分两个区:同步区(t4对应的位图)和未同步区(t5对应的位图),其中,t4对应的位图为当前变化逻辑块所在逻辑块区对应的位图,t5对应的位图为同步过程中发生变化的逻辑块所在逻辑块区的对应位图。在主机上LUN中存储数据发生变化时,所述装置执行上述步骤S301至S304,以记录当前变化逻辑块发生了变化和发生变化的时间t4,并且,所述装置执行复制命令,所述复制命令的预设时间条件即为当前发生变化的时间t4或之前,本例的位图集中满足该条件的只有t4对应的位图,故将t4放入同步区。所述装置根据复制命令将同步区中t4的位图对应的主机LUN中逻辑块数据复制到从机LUN上,实现主从数据的同步,其中,每同步一个逻辑块,则将该逻辑块所在逻辑块区的对应位图的对应位设置为第二标记,当所述装置检测到位图集中有位图的所有位均为第二标记时,则删除该位图。并且,在同步过程中,如果主机LUN逻辑块发生变化,则将对应位图(即t5对应的位图)记录在未同步区。
[0071] 需要说明的是,上述举例中,本申请记录存储数据发生变化的方法应用在远程复制中,但并不以此作为限定,本申请所述方法还可应用在其他任意需要记录存储数据发生变化的情况中。
[0072] 另外,本申请在记录逻辑块发生变化时,未必限定为需记录发生变化的时间,以区分不同时间段变化的逻辑块。必须申明的是,本申请方法可根据实际情况记录逻辑块的其他信息作为区分,如记录逻辑块所在存储位置等,故在此本申请对记录逻辑块发生变化的具体步骤不作任何限定。
[0073] 再者,本实施方式中,所述位图集保存在记录存储数据发生变化的装置的外部,但在其他实施方式中,所述位图集也可保存在本申请所述装置中,在此不作限定。而且,本申请所述位图集还可暂时保存在缓存中。由于缓存相对于内存,具有更高的读写速度,进而提高了本申请记录存储数据是否发生变化的速度。并且,在所述缓存满足一定情况下,如缓存容量大于预设容量,发生断电的情况下,会自动将缓存中的位图集保存在内存中。
[0074] 本实施方式中,采用位图集方式记录LUN中的逻辑块是否发生变化,同时,在逻辑块发生变化时,才建立所述逻辑块所在逻辑块区的对应位图,实现了位图按需分配,提高了位图中空间的利用率,减少对位图空间的浪费,同时,也减少了位图占用的存储资源。进一步地,在位图中所有位为第二标记时,将位图删除,实现了对位图占用的存储资源的释放,更进一步地减少了位图占用的存储资源。
[0075] 请参阅图7,图7是本申请记录存储数据发生变化的装置一实施方式的结构示意图。本实施方式中,所述记录存储数据发生变化的装置包括确定模块710、查询模块720、建立模块730和记录模块740。
[0076] 确定模块710用于LUN中当前变化逻辑块所在的逻辑块区,并将确定的逻辑块区发生给所述查询模块720。
[0077] 本实施方式中,LUN采用精简配置(thin)技术,所述LUN可进行动态扩展。其中,所述LUN作为存储空间,至少包括两个逻辑块区,所述逻辑块区包含多个逻辑块,每个逻辑块定义为一定容量大小的存储数据。本实施方式中,LUN中每个逻辑块均分配有不同的逻辑块号,将每个逻辑块区的逻辑块信息预先保存在本地,例如,第一逻辑块区包含逻辑块0和1,第二逻辑块区包含逻辑块2和3……如此类推。在LUN中的逻辑块发生变化时,确定模块710获取LUN中当前变化逻辑块的逻辑块号,根据预设的逻辑块区与逻辑块间的关系为每个逻辑块包括两个逻辑块,确定所述当前变化逻辑块所在的逻辑块区。
[0078] 查询模块720用于查询位图集中是否已存在所述逻辑块区的对应位图,并将查询结果发送给建立模块730和记录模块740。
[0079] 本实施方式中,在LUN中的逻辑块上的存储数据,即该逻辑块发生变化时,记录存储数据发生变化的装置采用所述位图集记录所述LUN中逻辑块发生变化的情况。所述位图集可以不同的数据结构方式(如树结构、列表)保存在存储介质中,优化地,所述装置也可将位图集暂存在缓存中,以加速位图空间的处理,并定时将缓存中的位图集数据存放在永久存储介质,例如硬盘、flash。具体地,所述位图集用于放置多个位图,其中,每个所述位图用于记录对应一个所述逻辑块区的逻辑块发生变化。
[0080] 具体,所述装置本地预设有LUN中每个逻辑块区的对应位图信息。当LUN中的逻辑块发生变化时,查询模块720根据预设的对应位图信息获得当前变化逻辑块所在的逻辑块区的对应位图信息,并查询位图集中是否包括获取的对应位图信息,其中,所述逻辑块区的对应位图即为记录所述逻辑块区的逻辑块发生变化的位图。
[0081] 举例说明,LUN中划分为16个逻辑块区,每个逻辑块区包括8个逻辑块。记录存储数据发生变化的装置预先设置每个逻辑块区的对应位图信息为第一逻辑块区的对应位图为第一位图,第二逻辑块区的对应位图为第二位图……如此类推,且每个位图包括8个位,每个位用于记录一个逻辑块是否发生变化。对应地,第一位图对应用于记录第一逻辑块区,即第1到8个逻辑块,第二位图对应用于记录第二逻辑块区,即第9到16个逻辑块,第三位图对应用于记录第三逻辑块区,即第17到24个逻辑块……如此类推。在LUN中的第10、15个逻辑块发生变化时,确定模块710确定所述当前变化的逻辑块位于第二逻辑块区,根据上述预设的逻辑块区对应位图信息,获得所述第二逻辑块区的对应位图信息为第二位图,查询模块720查询当前的位图集中建立的位图的信息是否包括第二位图信息,并将查询结果发送给建立模块730和记录模块740。
[0082] 建立模块730用于在未查询到所述逻辑块区的对应位图时,在所述位图集中建立所述逻辑块区的对应位图,并将所述对应位图发送给所述记录模块740。
[0083] 在位图集中未查询到所述当前变化逻辑块所在的逻辑块区的对应位图时,建立模块730在所述位图集中建立所述当前变化逻辑块所在的逻辑块区的对应位图,例如,所述位图集为树结构,则再位图树中插入携带所述对应位图的节点,以建立所述对应位图。
[0084] 记录模块740用于在所述对应位图中记录所述当前变化逻辑块发生变化。
[0085] 记录模块740在所述对应位图中记录所述当前变化逻辑块发生变化,例如,将对应位图中对应当前变化逻辑块的位设置为第一标记,以标识该位对应的逻辑块发生变化,而对应位图中对应没有发生变化的逻辑块的位则设置为第二标记,以标识该位所对应的逻辑块没有发生变化。
[0086] 本实施方式中,采用位图集方式记录LUN中的逻辑块是否发生变化,将LUN分为多个逻辑块区,一个逻辑块区对应一个位图,且位图集中的位图产生条件为:在逻辑块发生变化时,才建立所述逻辑块所在的逻辑块区的对应位图,无需产生没有发生变化的逻辑块区的对应位图,实现了位图按需分配,减少对位图空间的浪费,同时,也减少了总位图占用的存储资源。
[0087] 需要说明的是,本实施方式中的LUN采用精简配置技术,但在其他实施方式中,所述LUN还可采用其他可进行动态扩展的技术,或者LUN的不可进行动态扩展,其容量固定大小,其LUN的具体种类并不影响本申请方法的实施,且所述LUN可设置在本申请记录存储数据发生变化的装置内部,也可设置在外部设备中,在此不对LUN进行具体限定。
[0088] 请参阅图8,图8是本申请记录存储数据发生变化的装置另一实施方式的结构示意图。本实施方式中,所述记录存储数据发生变化的装置810包括确定模块811、查询模块812、建立模块813、记录模块814、划分模块815、复制模块816及删除模块817。
[0089] 划分模块815用于将所述LUN中的存储数据划分为多个逻辑块,将所述多个逻辑块划分为第一数值个逻辑块区,确定每个逻辑块区的对应位图信息,并将所述每个逻辑块区的对应位图信息发送给所述记录模块,其中,所述第一数值至少为2,所述逻辑块区的对应位图信息包括所述逻辑块区的对应位图的位数等于所述逻辑块区的逻辑块数,所述逻辑块区的对应位图的每个位分别对应用于记录所述逻辑块区的一个逻辑块是否发生变化,每个位可被设置为第一标记或者第二标记,所述第一标记用于表示该位所对应的逻辑块发生了变化,所述第二标记用于表示该位所对应的逻辑块没有发生变化。
[0090] 例如,LUN当前分配的容量为1GB,划分模块815将LUN划分为1024个容量为1KB的逻辑块,每个逻辑块分配有不同的逻辑块号,例如,逻辑块0、逻辑块1、逻辑块2等。划分模块815将1024个逻辑块划分为128个逻辑块区,每个逻辑块区包括8个逻辑块,如第一逻辑块区包括逻辑块0至7、第二逻辑块区包括逻辑块8至15……如此类推。划分模块815为LUN中每个逻辑块区对应设置一个对应位图信息,如第一逻辑块区的对应位图为容量为8位的第一位图,第一位图中的每一位依序对应用于记录逻辑块0-7,其他逻辑块区的对应位图信息同上理。位图中每一位可设置为第一或第二标记,所述第一标记为1,第二标记为0,当逻辑块发生变化时,则将对应该逻辑块的位置1,如果逻辑块没有发生变化,则将对应该逻辑块的位置0,通过判断该位为0还是1,则可知道该位对应的逻辑块是否发生变化。
[0091] 确定模块811用于确定LUN中当前变化逻辑块所在的逻辑块区。在LUN中的逻辑块发生变化时,确定模块811获取当前变化的逻辑块信息,并根据划分模块815所预设逻辑块区与逻辑块间的关系或者保存的每个逻辑块区的逻辑块信息,确定LUN中当前变化逻辑块所在的逻辑块区。
[0092] 查询模块812用于查询位图集820中是否存在所述逻辑块区的对应位图,并将查询结果发送给建立模块813和记录模块814。
[0093] 所述位图集820可以不同的数据结构方式(如树结构、列表)保存在存储介质中,优化地,所述装置也可将位图集820暂存在缓存中,并定时将缓存中的位图集数据存放在永久存储介质,例如硬盘、flash。具体地,所述位图集820用于放置多个位图,其中,每个所述位图用于记录对应一个所述逻辑块区的逻辑块发生变化。
[0094] 具体,当LUN中的逻辑块发生变化时,查询模块812根据预设的每个逻辑块区的对应位图信息,获得当前变化逻辑块所在的逻辑块区的对应位图信息,并查询位图集820中是否已存在当前变化逻辑块的逻辑块区的对应位图。
[0095] 建立模块813用于未查询到所述逻辑块区的对应位图时,在所述位图集820中建立所述当前变化逻辑块的对应位图,并将所述对应位图发送给所述记录模块814。例如,所述位图集820为树结构,则再位图树中插入携带所述对应位图的节点,以建立所述对应位图。
[0096] 记录模块814用于根据所述逻辑块区的对应位图信息,查找出所述对应位图中用于记录所述当前变化逻辑块是否发生变化的位,并将查找出的位设置为第一标记,记录所述当前变化逻辑块发生变化的时间。
[0097] 另外,本实施方式中,将当前变化逻辑块发生变化的时间以列表形式记录在本申请装置内部或外部内存中,当然,在其他实施方式中,还可以其他方式记录当前变化逻辑块发生变化的时间,在此不作限定。
[0098] 复制模块816用于在接收复制命令时,获取所述复制命令中的预设时间条件,在所述位图集820中搜索出所述逻辑块发生变化的时间符合所述预设时间条件的位图中的位;将搜索出的位图中的位所对应的逻辑块进行复制操作,在复制完成后将搜索出的位图中的位设置为所述第二标记。
[0099] 进一步地,本申请记录存储数据发生变化的装置还可实现远程复制(如异步远程复制、同步远程复制等),即如果主机上LUN的逻辑块数据发生变化,则通过确定模块811、查询模块812、建立模块813和记录模块814记录所述逻辑块发生变化,同时,复制模块816还将主机上发生变化的逻辑块复制到从机上的LUN中。复制模块816接收到将主机发生变化的逻辑块复制到从机中的复制命令时,对所述复制命令进行解析,获得命令中包括的预设时间条件。
[0100] 复制模块816遍历记录的所述位图集820中所有位图的所有位上对应记录的逻辑块发生变化的时间,并搜索出逻辑块发生变化的时间符合预设时间条件的位图中的位。
[0101] 复制模块816根据搜索出的位图中的位,查找出所述搜索出的位图中的位对应的主机LUN中的逻辑块,并将查找出的逻辑块复制到从机中,在复制完成后,将所述搜索出的位图中的位设置为所述第二标记。
[0102] 进一步地,在本申请装置实现一主多从远程分享的实施方式中,所述位图还设置有共享标识,所述共享标识用于标识共享从设备对所述位图记录的发生变化的逻辑块是否已进行共享,其中,所述共享标识为第一共享标识时,则表示所有共享从设备对所述位图记录的发生变化的逻辑块已进行共享,所述共享标识为第二共享标识时,则表示共享从设备对所述位图记录的发生变化的逻辑块未完成共享。复制模块816在将查找出的逻辑块复制到从机后,如果判断所述共享标识为第一共享标识,即表示所述所有共享从设备对所述位图记录的发生变化的逻辑块已进行共享,则在将所述搜索出的位图中的位设置为所述第二标记。
[0103] 本实施方式中,在进行对发生变化的逻辑块进行复制时,以逻辑块发生变化的时间为基准,选择将某一段时间段或者某一时刻的逻辑块进行复制,提高了复制的灵活性,且在将时间条件设置为执行复制的时间之前时,可使所述装置对复制过程中发生变化的逻辑块不作复制处理,以避免复制与逻辑块发生变化同步发生时,容易出现遗漏对同步发生的部分逻辑块进行复制,或者在对某一逻辑块完成复制时,所述逻辑块再次发生变化,进而无法实现从机对应逻辑块数据的更新等情况。
[0104] 删除模块817用于检测所述位图集820中是否存在所有位均为所述第二标记的位图,如果存在,则将所述位图从位图集820中删除。
[0105] 删除模块817定时或者在接收到检测命令时检测位图集820中的是否存在所有位均为第二标识的位图,如果存在,则表示所述位图对应的逻辑块当前均无发生变化,故将所述所有位均为第二标识的位图从位图集820中删除。
[0106] 举第一例进行说明,请参阅图5,本申请装置能够实现异步远程复制,其中,异步远程复制即为每隔一段时间,将主机上LUN中发生变化的存储数据复制到从机LUN中。同时,每当主机上LUN中的逻辑块数据发生变化,所述装置通过确定模块811、查询模块812、建立模块813及记录模块814,记录当前变化逻辑块发生了变化和发生变化的时间。如图5,t0、t1、t2、t3表示每个位图对应逻辑块发生变化的时间,其中t0
[0107] 举第二例进行说明,请参阅图6,本申请装置能够实现同步远程复制,其中,同步远程复制即为当主机上LUN中存储数据发生变化时,立刻将主机上LUN中发生变化的存储数据复制到从机LUN中。与第一例类似,位图集820分两个区:同步区(t4对应的位图)和未同步区(t5对应的位图),其中,t4对应的位图为当前变化逻辑块所在逻辑块区的对应位图,t5对应的位图为同步过程中发生变化的逻辑块所在逻辑块区的对应位图。在主机上LUN中存储数据发生变化时,所述装置通过确定模块811、查询模块812、建立模块813及记录模块814,记录当前变化逻辑块发生了变化和发生变化的时间t4,并且,复制模块816执行复制命令,所述复制命令的预设时间条件即为当前发生变化的时间t4或之前,本例的位图集820中满足该条件的只有t4对应的位图,故将t4放入同步区。复制模块816根据复制命令将同步区中t4的位图对应的主机LUN中逻辑块数据复制到从机LUN上,实现主从数据的同步,其中,每同步一个逻辑块,复制模块816将该逻辑块所在逻辑块区的对应位图的对应位设置为第二标记。当删除模块817检测到位图集820中有位图的所有位均为第二标记时,则删除该位图。并且,在同步过程中,如果主机LUN逻辑块发生变化,则记录模块814将对应位图(即t5对应的位图)记录在未同步区。
[0108] 需要说明的是,本申请在记录逻辑块发生变化时,未必限定为需记录发生变化的时间,以区分不同时间段变化的逻辑块。必须申明的是,本申请可根据实际情况记录逻辑块的其他信息作为区分,如记录逻辑块所在存储位置等,故在此本申请对记录逻辑块发生变化的具体方式不作任何限定。
[0109] 另外,本实施方式中,所述位图集保存在记录存储数据发生变化的装置的外部,但在其他实施方式中,所述位图集也可保存在本申请所述装置中,在此不作限定。而且,本申请所述位图集还可暂时保存在缓存中。由于缓存相对于内存,具有更高的读写速度,进而提高了本申请记录存储数据是否发生变化的速度。并且,在所述缓存满足一定情况下,如缓存容量大于预设容量,发生断电的情况下,会自动将缓存中的位图集保存在内存中。
[0110] 本实施方式中,采用位图集方式记录LUN中的逻辑块是否发生变化,同时,在逻辑块发生变化时,才建立所述逻辑块所在逻辑块区的对应位图,实现了位图按需分配,提高了位图中空间的利用率,减少对位图空间的浪费,同时,也减少了位图占用的存储资源。进一步地,在位图中所有位为第二标记时,将位图删除,实现了对位图占用的存储资源的释放,更进一步地减少了位图占用的存储资源。
[0111] 请参阅图9,图9是本申请记录存储数据发生变化的装置再一实施方式的结构示意图。本实施方式中,所述记录存储数据发生变化的装置包括处理器910及存储介质920,其中所述处理器910与存储介质920通过总线930连接。
[0112] 存储介质920用于存储处理器910执行的计算机指令以及处理器910工作时所需存储的数据。
[0113] 处理器910执行存储介质920存储的计算机指令,用于确定LUN中当前变化逻辑块所在的逻辑块区,查询位图集中是否已存在所述逻辑块区的对应位图,在未查询到所述逻辑块区的对应位图时,在所述位图集中建立所述当前变化逻辑块的对应位图,并在所述对应位图中记录所述当前变化逻辑块发生变化,在查询到所述逻辑块区的对应位图时,直接在所述对应位图中记录所述当前变化逻辑块发生变化。
[0114] 本实施方式中,处理器910预先将所述LUN中的存储数据划分为多个逻辑块,将所述多个逻辑块划分为第一数值个逻辑块区,并确定每个逻辑块区的对应位图信息。其中,所述第一数值至少为2,所述逻辑块区的对应位图信息包括所述逻辑块区的对应位图的位数等于所述逻辑块区的逻辑块数,所述逻辑块区的对应位图的每个位分别对应用于记录所述逻辑块区的一个逻辑块是否发生变化,每个位可被设置为第一标记或者第二标记,所述第一标记用于表示该位所对应的逻辑块发生了变化,所述第二标记用于表示该位所对应的逻辑块没有发生变化。例如,所述第一标记为1,第二标记为0,当逻辑块发生变化时,则将对应该逻辑块的位置1,如果逻辑块没有发生变化,则将对应该逻辑块的位置0,通过判断该位为0还是1,则可知道该位对应的逻辑块是否发生变化。
[0115] 在LUN中的逻辑块发生变化时,处理器910确定LUN中当前变化逻辑块所在的逻辑块区,并根据确定每个逻辑块区的对应位图信息,查询位图集中是否已存在所述逻辑块区的对应位图。所述位图集保存在存储介质中,优化地,所述装置也可将位图集暂存在缓存中,以加速位图空间的处理,并定时将缓存中的位图集数据存放在永久存储介质中,其中,所述位图集用于放置多个位图,每个所述位图为所述树的节点,共同构成所述树结构。具体地,每个所述位图用于记录对应一个所述逻辑块区的逻辑块发生变化。
[0116] 另外,处理器910记录对应所述当前变化逻辑块发生了变化的方式具体为:处理器910根据所述逻辑块区的对应位图信息,查找出所述对应位图中用于记录所述当前变化逻辑块是否发生变化的位,并将查找出的位设置为第一标记,记录所述当前变化逻辑块发生变化的时间。本实施方式中,处理器910将当前变化逻辑块发生变化的时间以列表形式记录在本申请装置内部或外部内存中,当然,在其他实施方式中,还可以其他方式记录当前变化逻辑块发生变化的时间,在此不作限定。
[0117] 优化地,处理器910还用于在接收复制命令时,获取所述复制命令中的预设时间条件;在所述位图集中搜索出所述逻辑块发生变化的时间符合所述预设时间条件的位图中的位;将搜索出的位图中的位所对应的逻辑块进行复制操作,在复制完成后将搜索出的位图中的位设置为所述第二标记。
[0118] 进一步地,本申请记录存储数据发生变化的装置还可实现远程复制(如异步远程复制、同步远程复制等),即如果主机上LUN的逻辑块数据发生变化,处理器910记录所述逻辑块发生变化,同时,还将主机上发生变化的逻辑块复制到从机上的LUN中。处理器910接收到将主机发生变化的逻辑块复制到从机中的复制命令时,对所述复制命令进行解析,获得命令中包括的预设时间条件。
[0119] 处理器910遍历记录的所述位图集中所有位图的所有位上对应记录的逻辑块发生变化的时间,并搜索出逻辑块发生变化的时间符合预设时间条件的位图中的位。
[0120] 处理器910根据搜索出的位图中的位,查找出所述搜索出的位图中的位对应的主机LUN中的逻辑块,并将查找出的逻辑块复制到从机中,在复制完成后,将所述搜索出的位图中的位设置为所述第二标记。本实施方式中,在进行对发生变化的逻辑块进行复制时,以逻辑块发生变化的时间为基准,选择将某一段时间段或者某一时刻的逻辑块进行复制,提高了复制的灵活性,且在将时间条件设置为执行复制的时间之前时,可使所述装置对复制过程中发生变化的逻辑块不作复制处理,以避免复制与逻辑块发生变化同步发生时,容易出现遗漏对同步发生的部分逻辑块进行复制,或者在对某一逻辑块完成复制时,所述逻辑块再次发生变化,进而无法实现从机对应逻辑块数据的更新等情况。
[0121] 进一步优化地,处理器910还用于检测所述位图集中是否存在所有位均为所述第二标记的位图,如果存在,则将所述位图从位图集中删除。
[0122] 处理器910定时或者在接收到检测命令时检测位图集中的是否存在所有位均为第二标识的位图,如果存在,则表示所述位图对应的逻辑块当前均无发生变化,故将所述所有位均为第二标识的位图从位图集中删除。
[0123] 需要说明的是,本申请在记录逻辑块发生变化时,未必限定为需记录发生变化的时间,以区分不同时间段变化的逻辑块。必须申明的是,本申请可根据实际情况记录逻辑块的其他信息作为区分,如记录逻辑块所在存储位置等,故在此本申请对记录逻辑块发生变化的具体方式不作任何限定。
[0124] 另外,本实施方式中,所述位图集保存在记录存储数据发生变化的装置的外部,但在其他实施方式中,所述位图集也可保存在本申请所述装置的存储介质,在此不作限定。而且本申请所述位图集还可暂时保存在缓存中。由于缓存相对于内存,具有更高的读写速度,进而提高了本申请记录存储数据是否发生变化的速度。并且,在所述缓存满足一定情况下,如缓存容量大于预设容量,发生断电的情况下,会自动将缓存中的位图集保存在内存中。
[0125] 通过上述方案,本申请采用位图集来实现记录LUN的存储数据的变化,并在逻辑块发生变化时,才建立该逻辑块的对应位图,区别于固定采用一个位图记录LUN所有存储数据的变化情况的现有技术,本申请采用动态位图方式,使得位图总占用的存储空间与LUN发生变化的逻辑块数对应,实现了位图的按需分配,减少占用存储资源,同时,也提高了位图的利用效率,减少对位图内存资源的浪费。
[0126] 在本申请所提供的几个实施方式中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施方式仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
[0127] 所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施方式方案的目的。
[0128] 另外,在本申请各个实施方式中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0129] 所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施方式所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储介质(ROM,Read-Only Memory)、随机存取存储介质(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。