具体实施方案
现在针对本发明先前优选实施例进行介绍,在附图中举例进行说明。
持续数据保护(CDP,也称为持续备份或实时备份)涉及计算机数据的备份,通过对上述数据每次改变进行自动存储拷贝,实际上捕获用户所创建数据的每个版本。使用CDP可使用户和/或管理员能够基于所采用CDP的机制来将数据恢复到一时间点。
某些CDP机制可以使用快照途径,其中以频繁间隔自动进行关键数据的快照。快照机制可配置成只捕获在所述数据中相对原来数据的差别,而不是为每个快照创建一个完整的拷贝。快照机制也可使用一种“滑动窗口”途径,其中当为一逻辑单元(LU)所捕获的快照总数目达到指定阈值时可删除最旧的快照。
本公开涉及一种为一逻辑单元提供持续数据保护的方法。所述逻辑单元可以被映射成一虚拟卷,其可被概念地划分为多个相同大小的块。可在指定时间为所述虚拟卷创建时间点(PiT)实例。一PiT实例可包括一PiT临时虚拟卷(PTVV),其存储自上述PiT被创建后对所述虚拟卷进行的改变。每一PiT实例的PTVV可被配置用以存储在上述PiT实例活动时(一PiT实例在所述PiT实例创建时间和后续PiT实例创建时间之间是活动的)对所述虚拟卷的所有修改。这样,如果所述虚拟卷的特定块在一PiT实例活动时进行了5次更新,所述PiT实例的所述PTVV会存储所述特定块的数据内容的5个版本。在实施例中,存储在所述PTVV中的数据被禁止重写。
所述PiT实例可使用重新分配表来获得所述虚拟卷每块的最近版本。可使用持续数据保护(CDP)日志来提供到所述PTVV中所存储块的较旧版本的访问。这样,提供了创建在以前单独写操作粒度的指定时间的恢复实例的机制。
参照图1,显示了描述一虚拟卷配置的方框图。在实施例中,逻辑单元(LU)可被映射成存储装置(如,独立磁盘的存储阵列或冗余阵列)的虚拟卷102。配置在所述存储装置中的存储虚拟化管理器(SVM)可用来实施这样的映射。所述虚拟卷102可包括一个或多个虚拟卷段104。每一虚拟卷段104可表现为虚拟卷逻辑块地址(LBA)范围到虚拟驱动器LBA范围的映射。虚拟驱动器可对应于在所述存储装置中的存储分配。例如,虚拟驱动器可对应于RAID卷。
参照图2,显示了描述为一虚拟卷创建时间点(PiT)实例的快照机制的方框图。例如,所述SVM可被配置用以在第一指定时间(如,在上午8:00)创建虚拟卷202的第一PiT实例。早于上午8:00,由主机发布到虚拟卷202的写命令可以直接修改虚拟卷202的数据内容。但是,在上午8:00,所述虚拟卷的数据内容被冻结以及第一PiT临时虚拟卷(PTVV)206被创建以保存上午8:00的所述第一指定时间后对所述虚拟卷的所有改变。因此,早于上午8:00的虚拟卷202的数据内容在创建所述第一PiT实例时被保存为冻结图像208。所述冻结图像208保护虚拟卷202的内容并禁止从上午8:00开始对虚拟卷202的写访问。容易理解,为所述虚拟卷创建PiT实例的快照机制对访问所述虚拟卷的主机来说可以是透明的。在上述例中,所述PTVV206和冻结图像208一起可作为当前虚拟卷204,其对访问所述虚拟卷的主机来说可以是透明的。
所述SVM可进一步被配置用以创建所述虚拟卷的在第二指定时间(如,在上午11:00)的第二PiT实例。在本例中,在上午8:00和上午11:00之间对所述虚拟卷进行的修改可保存在所述第一PTVV 206中。在上午11:00,所述第一PTVV 206的数据内容冻结且第二PTVV 212被创建以替代所述第一PTVV 206用来保存所述第二指定时间即上午11:00后对所述虚拟卷的所有改变。因此,所述第一PTVV 206的内容在创建所述第二PiT实例时被保存为冻结图像214,与第一指定时间所用的原虚拟卷的冻结图像208一起。PTVV 212、第一PTVV的冻结图像214以及原虚拟卷的冻结图像208一起可用做当前虚拟卷210,其对访问所述虚拟卷的主机来说可以是透明的。
可为所述虚拟卷创建另外的PiT实例。每一PiT实例可包括保存所述PiT实例创建时间后对所述虚拟卷的改变。每一PiT实例可对原虚拟卷的冻结图像208和前面PTVV(如,所述第一PTVV的冻结图像214)的冻结图像进行读访问。可以预料的是上述PiT实例的创建时间可根据要求(如,通过命令)进行指定,或基于预定时间间隔(如,每小时)进行配置。
参照图3,显示PTVV为了保存对所述虚拟卷的改变而使用的重新分配表(RT)。在一个实施例中,所述虚拟卷的LBA范围可概念地被划分为相等大小的块。这些块的大小可对应于数据恢复粒度。例如,一个8字节大小的块可指示出所述数据恢复粒度是写给所述虚拟卷的每8字节数据。
可为每一PiT实例创建一重新分配表302。在实施例中,所述重新分配表302可包括所述虚拟卷中每个块的入口。当主机在所述PiT实例创建后写入一个块时,所述重新分配表中所述块的相应入口会被查找到并标记为“已分配”。所述块的数据内容可以在下一个可获得LBA的PTVV中被放置/存储。所述重新分配表302中的所述块的入口会与存储在所述PTVV中所述块的数据内容进行关联(如,通过索引或指针)。所述重新分配表可寻找用来表现所述块被写入/更新时间的每个入口的时间戳。
在图3所示的例子中,在接收发给块“j”的写命令时,所述PTVV会在所述重新分配表302中查找块“j”的入口并将所述入口标记为“已分配”。所述PTVV可将所述块“j”的数据内容存储在所述PTVV可访问的下一个可获得的LBA 304中。所述PTVV可进一步将所述重新分配表302中的块“j”入口和存储在LBA 304中的块“j”的数据内容进行关联。
后续对其它块的写入命令可以进行同样地处理。例如,在接收发给块“i”的写命令时,所述PTVV会在所述重新分配表302中查找块“i”的入口并将所述入口标记为“已分配”。所述PTVV可将所述块“i”的数据内容存储在所述PTVV可访问的下一个可获得的LBA 306中。所述PTVV可进一步将所述重新分配表302中的块“i”入口和存储在LBA 306中的块“i”的数据内容进行关联。容易理解在所述PTVV中放置/存储的块的顺序可以不必按照在原虚拟卷的它们的顺序。在实施例中,在所述PTVV中的块按照它们被写入的顺序放置,如图3所示。
在实施例中,在当前/活动PiT实例中特定块的重新分配表入口总是指向所述特定块(如,有效块)的最近版本。容易理解特定块的最近版本早于当前PiT实例创建前就被创建/更新。即,所述特定块的数据内容会被存储在先前PTVV中。所述重新分配表中入口和有效块的关系如图4所示。
在图4所示例中,块“j”可在当前PiT实例(如,在本例中的上午11:00后)创建后进行写入。因此,所述块“j”的数据内容可被存储在当前/活动PTVV中。块“i”可以是在上午8:00和上午11:00之间的某个时间最近地被写入。因此,块“i”的数据内容可以被存入活动在上午8:00和上午11:00之间的先前PTVV中,其现在是写命令进行保护的仍可以进行读访问。在当前PiT实例的重新分配表中块“i”的入口因此可指向存储在先前PTVV中的块“i”的数据内容以进行读访问。进一步地,块“k”可以在早于上午8:00时最近地写入,其早于本实施例中第一PiT实例的创建。因此,块“k”的数据内容可以被存入所述虚拟卷自身内,其现在写命令进行保护并仍可以进行读访问。在当前PiT实例的重新分配表中块“k”的入口因此可指向存储在原虚拟卷中的块“k”的数据内容以进行读访问。
在实施例中,块的数据内容一旦存储在PTVV中,所述数据内容将被保护并将无法重写。当处理对已经分配在所述重新分配表中的块的写操作时,所述块的先前/历史版本将在所述PTVV中被保持并将所述块的新版本存入所述PTVV中的一新位置(如,在下一个可获得的LBA)。可使用一CDP日志来保持并提供到所述块历史版本的访问。在实施例中,对每一PiT实例会保存CDP日志。所述CDP日志可使用一快速持续存储器来实现,如NVSRAM,电池后备缓存存储器,转储装置后备缓存存储器,固态硬盘(SSD),等。
参照图5,显示了对CDP日志502的说明。在实施例中,在所述重新分配表中一特定块的入口总是指向所述特定块的最近版本。当对块“i”的写命令被执行时,其已分配在所述重新分配表中,块“i”的更新数据内容512被存入在所述PTVV中下一个可获得位置,在所述重新分配表510中块“i”的入口被更新并指向更新数据内容512。块“i”的先前数据内容508会保存在所述PTVV中,但不能直接通过所述重新分配表进行访问。与块“i”的先前数据内容508有关的新记录504会被加入到所述CDP日志502。在实施例中,所述新记录504可包括块508的时间戳,被存入所述PTVV(如,提供给所述块的最初LBA)的指向块508数据内容的指针,以及与所述重新分配表入口的关系(如,指示上述CDP日志入口是提供给块“i”的块标识符,或指向所述重新分配表中入口的指针)。容易理解,执行在所述PTVV和CDP日志上的操作对所述写命令的发起者可以是透明的。以及可以根据上述操作的完成将所述写命令的状态报告给所述发起者。
同样地,当为块“i”处理第二个写命令时,块“i”的更新数据内容514被存入在所述PTVV中下一个可获得位置,在所述重新分配表510中块“i”的入口被更新并指向更新数据内容514。块“i”的先前数据内容,如块508和512,都会保留在所述PTVV中,但不能直接通过所述重新分配表进行访问。已存在的CDP日志入口504会保留,以及与所述块512有关的另一CDP日志入口506会被增加到所述CDP日志502中。
PiT实例的PTVV和CDP日志一起可提供创建在过去单独写操作粒度的指定时间的恢复实例的机制。例如,用户可通过指定一特定恢复时间(如,过去的某一时间)为所述虚拟卷创建一恢复实例。所创建的恢复实例会在所述用户指定的恢复时间影响所述虚拟卷的数据内容。
在一个实施例中,根据接收的指定恢复时间,所述恢复机制可识别并选出一具有早于所述恢复时间的最近创建时间的PiT实例。例如,如果所述虚拟卷具有创建在上午7:00、8:00和9:00的PiT实例,且用户指定的恢复时间是上午8:30,在上午8:00创建的PiT实例将因为其具有早于上午8:30的最近创建时间而被选择。
可使用所选PiT实例作为创建所述恢复实例的基础。例如,可将所述恢复机制配置为将所选PiT实例的重新分配表拷贝给所述恢复实例。所述恢复机制可随后更新所述重新分配表并将来自所选PiT实例的合适的块与基于所述CDP日志入口和指定恢复时间的恢复实例建立关联。例如,所述恢复机制可识别为所述虚拟卷的特定块所创建的CDP日志入口。所述恢复机制可随后识别的在这些CDP日志入口中的具有早于恢复时间的最近创建时间的特定日志入口。所述特定日志入口(可被参照为恢复日志入口)表现出在所述恢复时间的上述块的数据内容。所述恢复机制会在所述恢复实例的重新分配表中为所述块查询入口,并将所述块的入口与关联所述恢复日志入口的数据内容建立关系。可以预料,来自所述选择的PiT实例的合适的块的实际数据内容会被拷贝给所述恢复实例。可选地,一旦来自所选PiT实例的合适的块被识别,所述恢复实例会指向(如,通过索引或指针)使用所述恢复实例CDP日志入口的已识别的合适块。
应所述理解,所述恢复机制会为其它具有与它们相关的CDP日志入口的块重复所述过程。具有所述更新重新分配表的恢复实例会在指定恢复时间表现出所述虚拟卷内容。所述用户可选择去使用所述恢复实例来创建所述虚拟卷的视图或将所述虚拟卷恢复到所述恢复实例从而将所述虚拟卷内容改变成在指定恢复时间的那些内容。
可以预料,PiT实例可基于所述虚拟卷上的I/O模式而变化很快。例如,如果相同块频繁被“重写”,在所述PTVV中相同块可存在多个版本。可使用日程表控制PiT实例的活动持续时间。例如,日程表会指定出每小时创建一新PiT实例以频繁更新虚拟卷。在另一例中,不同日程表会指定出每三小时创建一新PiT实例以很少更新虚拟卷。
同样可以预料,可使用“滑动窗口”为虚拟卷保持特定可配置数目的PiT实例。在这样的配置中,一旦所述系统达到所述特定数目的PiT实例时,最旧的PiT实例会被除去/删除。在实施例中,当一PiT实例被删除时,所述PiT的相应PTVV中的块被重新恢复到先前PiT中或到所述虚拟卷本身中(如果不存在先前PiT)。
可以进一步地预想到,较旧的PiT实例可通过定位到一较粗时间粒度方式被“压缩”。例如,用户能够为最近3天内的任意指定时间来创建一恢复实例。但是,如果所述用户选择为一周前的特定时间创建一恢复实例,替代将所述恢复实例确切地提供给所述特定时间,而会为最近5分钟,30分钟,或甚至60分钟来创建具有较长粒度的恢复实例。应所述理解,越旧的PiT实例(如,一个月前创建)会被压缩的更多,例如,只针对最近一天。
在实施例中,较旧PiT实例的压缩可通过删除来自所述PiT(PTVV)的指定块版本以及相应地对其进行压缩的方式来完成。例如,在接收到一粒度定义(如,指示5分钟或30分钟的粒度,等)时,可对所述CDP日志进行遍历来确定上述PiT实例的时间粒度的可被移出块版本。如果所述粒度被设为每5分钟且在同一5分钟间隔内存在块的多于一个版本,在所述5分钟间隔内的最近版本会被保留而其它版本会被删除。应所述理解,所述压缩可在后台进程中执行且可应用于较旧PiT实例。
图6显示一流程图,用来说明根据本公开的持续数据保护方法600所执行的步骤。所述方法600可用来为虚拟卷提供持续数据保护。步骤602可以概念地将所述虚拟卷划分为多个相同大小的块。步骤604可在第一指定时间保存所述虚拟卷的内容和禁止对所述虚拟卷的直接写访问。步骤606可在所述第一指定时间为所述虚拟卷创建第一PiT实例。
所述第一PiT实例可包括一第一PTVV,其被配置用以存储所述第一指定时间后对虚拟卷修改,其中在所述第一PTVV中存储的数据被禁止重写。所述第一PiT实例可以也包括一第一重新分配表,所述第一重新分配表包括所述虚拟卷的多个块中每一个的入口。所述第一重新分配表可被配置用以提供到所述虚拟卷多个块中每一个的最近版本的读访问。所述第一PiT实例可进一步包括一第一CDP日志,所述第一CDP日志被构形用以提供存储在所述第一PTVV中的块的历史版本的读访问。
步骤608可以在所述虚拟卷的多个块中的一个被修改时更新所述第一PTVV。可以预料,可在一第二指定时间保存所述第一PiT实例,而且可以创建另外的PiT实例以替换所述第一PiT实例以保留持续修改。
图7显示一流程图,用来说明根据本公开的恢复方法700所执行的步骤。可使用所述方法700来为虚拟卷创建一恢复实例。步骤702可接收用户指定的恢复时间。步骤704可识别一PiT实例,所述PiT实例具有早于所述恢复时间的最近创建时间。步骤706可将所述识别的PiT实例的重新分配表拷贝到所述恢复实例的重新分配表。步骤708基于所述恢复时间的CDP日志更新所述恢复实例的重新分配表。
应注意到,按照本说明书教导,计算机领域的技术人员可以看出,通过使用编写程序的常见通用数字计算机将容易实现根据本发明的上述实施例。基于本公开的教导,软件领域的技术人员可以看出,熟练程序员会轻松编制好合适的软件编码。
应所述理解,本发明可通过软件包的形式容易进行实现。这样的软件包可以是计算机程序产品,其使用计算机可读存储介质,包括已存储的计算机代码,用来对计算机编程来执行本发明所公开的功能和步骤。所述计算机可读介质可包括但不限于:任意类型的常见软盘、光盘、CD-ROM、磁盘、硬盘、磁光盘、ROM、RAM、EPROM、EEPROM、磁卡或光卡、或任意其它可存储电子指令的合适媒体。
应所述理解上述公开方法中的步骤的指定顺序或层次是示例方法的例子。应当理解,基于设计偏好,所述方法中的步骤的指定顺序或层次可以重新排列,而仍在本公开的主题精神内。所附方法权利要求以样本顺序呈现了不同步骤的要素,并不必意味着仅限于所呈现的指定次序或层次。
应当相信,通过前述将理解本公开和许多其伴随的优点,显而易见,其组成的形式、结构和布置可以进行不同的变化,而不脱离本公开的范围和精神或不牺牲所有其物质优点。这里以前所述的形式只是示例说明,下列权利要求的目的是包含和包括此类变化。