一种远程数据复制方法及系统转让专利

申请号 : CN201610801665.1

文献号 : CN106407040B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 欧阳戟严华兵

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

摘要 :

一种远程数据复制方法及存储系统。生产阵列向灾备阵列发送数据复制请求,所述数据复制请求包括源对象的标识以及所述源对象对应的数据块,所述源对象包括用于承载文件或者目录的数据容器,所述数据块保存在所述生产阵列的硬盘的物理空间中。所述灾备阵列接收所述数据复制请求,确定所述灾备阵列没有包括与所述源对象的标识相同的对象时,创建目标对象,所述目标对象与所述灾备阵列的硬盘的一段或几段物理空间对应,所述目标对象的标识和所述源对象的标识相同,所述灾备阵列将所述数据块写入所述物理空间中,目标物理地址与源物理地址不同。可以减轻生产阵列和灾备阵列之间的带宽负担。

权利要求 :

1.一种远程数据复制方法,其特征在于,包括:

生产阵列向灾备阵列发送数据复制请求,所述数据复制请求包括源对象的标识以及所述源对象对应的数据块,所述源对象包括用于承载文件或者目录的数据容器,所述数据块保存在所述生产阵列的硬盘的物理空间中,所述数据块保存在所述生产阵列的物理空间中的地址为源物理地址,所述数据复制请求还包括所述数据块的逻辑地址,所述逻辑地址为所述数据块位于源对象内的位置;

所述灾备阵列接收所述数据复制请求,确定所述灾备阵列没有包括与所述源对象的标识相同的对象时,创建目标对象,所述目标对象与所述灾备阵列的硬盘的一段或几段物理空间对应,所述目标对象的标识和所述源对象的标识相同,所述灾备阵列将所述数据块写入所述物理空间中,所述数据块保存在所述物理空间中的地址为目标物理地址,所述目标物理地址与所述源物理地址不同,所述数据块保存在所述目标对象内的位置与所述数据块位于源对象内的位置相同;

所述方法还包括:

所述灾备阵列保存所述逻辑地址与所述目标物理地址的对应关系,以及所述目标对象的标识与所述目标物理地址的对应关系,所述逻辑地址与所述目标物理地址的对应关系不同于所述逻辑地址与所述源物理地址的对应关系,并且所述目标对象的标识与所述目标物理地址的对应关系不同于所述源对象的标识与所述源物理地址的对应关系。

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

所述生产阵列向所述灾备阵列发送增量数据复制请求,所述增量数据复制请求包括增量数据以及所述增量数据的地址信息,所述增量数据是用于对所述数据块进行更新的数据块,所述增量数据的地址信息包括所述源对象的标识以及所述逻辑地址。

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

所述灾备阵列接收所述增量数据复制请求,根据所述增量数据的地址信息中的所述源对象的标识,确定所述增量数据对应的对象是所述目标对象;根据所述增量数据的地址信息中的逻辑地址确定所述增量数据待写入的目标对象内的位置,将所述增量数据写入所述目标对象的所述逻辑地址中。

4.一种存储系统,其特征在于,包括生产阵列和灾备阵列;

所述生产阵列,用于向所述灾备阵列发送数据复制请求,所述数据复制请求包括源对象的标识以及所述源对象对应的数据块,所述源对象包括用于承载文件或者目录的数据容器,所述数据块保存在所述生产阵列的硬盘的物理空间中,所述数据块保存在所述生产阵列的物理空间中的地址为源物理地址,所述数据复制请求还包括所述数据块的逻辑地址,所述逻辑地址为所述数据块位于源对象内的位置;

所述灾备阵列,用于接收所述数据复制请求,确定所述灾备阵列没有包括与所述源对象的标识相同的对象时,创建目标对象,所述目标对象与所述灾备阵列的硬盘的一段或几段物理空间对应,所述目标对象的标识和所述源对象的标识相同,将所述数据块写入所述物理空间中,所述数据块保存在所述物理空间中的地址为目标物理地址,所述目标物理地址与所述源物理地址不同,所述数据块保存在所述目标对象内的位置与所述数据块位于源对象内的位置相同;

所述灾备阵列,还用于保存所述逻辑地址与所述目标物理地址的对应关系,以及所述目标对象的标识与所述目标物理地址的对应关系,所述逻辑地址与所述目标物理地址的对应关系不同于所述逻辑地址与所述源物理地址的对应关系,并且所述目标对象的标识与所述目标物理地址的对应关系不同于所述源对象的标识与所述源物理地址的对应关系。

5.根据权利要求4所述的存储系统,其特征在于,

所述生产阵列,还用于向所述灾备阵列发送增量数据复制请求,所述增量数据复制请求包括增量数据以及所述增量数据的地址信息,所述增量数据是用于对所述数据块进行更新的数据块,所述增量数据的地址信息包括所述源对象的标识以及所述逻辑地址。

6.根据权利要求5所述的存储系统,其特征在于,

所述灾备阵列,还用于接收所述增量数据复制请求,根据所述增量数据的地址信息中的所述源对象的标识,确定所述增量数据对应的对象是所述目标对象;根据所述增量数据的地址信息中的逻辑地址确定所述增量数据待写入的目标对象内的位置,将所述增量数据写入所述目标对象的所述逻辑地址中。

说明书 :

一种远程数据复制方法及系统

技术领域

[0001] 本发明实施例涉及存储技术领域,特别是一种远程数据复制方法及系统。

背景技术

[0002] 数据容灾,又称为远程数据复制技术,是指建立一个异地的数据系统,该系统是本地数据的一个可用复制。在本地数据及整个应用系统出现灾难时,系统至少在异地保存有一份可用的关键业务的数据。
[0003] 典型的数据容灾系统包括生产中心和灾备中心。在生产中心,部署有主机、存储阵列,用于正常的业务运行;在灾备中心,部署有主机、存储阵列,用于在生产中心发生灾难后,接管其业务。在某些应用场景下,生产中心和灾备中心的存储阵列均包含文件系统。生产中心的业务产生的数据写入生产阵列后,可以经容灾链路复制到灾备中心,写入灾备阵列。在现有技术中,远程数据复制是基于块语义的。也就是说,复制的时候可以不用考虑数据块上层的文件,直接将生产阵列的硬盘中所有的数据复制到灾备阵列中。这些数据不仅包括了业务数据,还包括描述业务数据的元数据,例如业务数据的属性以及业务数据在硬盘中的物理布局等。这就会导致容灾链路的负担较重。

发明内容

[0004] 本实施例提供了一种远程数据复制方法和存储系统,能够减轻生产阵列和灾备阵列之间的容灾链路的负担。
[0005] 第一方面,提供了一种远程数据复制方法。在该方法中,生产阵列向灾备阵列发送数据复制请求。所述数据复制请求包括源对象的标识以及所述源对象对应的数据块,所述源对象包括用于承载文件或者目录的数据容器,所述数据块保存在所述生产阵列的硬盘的物理空间中,所述数据块保存在所述生产阵列的物理空间中的地址为源物理地址。所述灾备阵列接收所述数据复制请求,确定所述灾备阵列没有包括与所述源对象的标识相同的对象时,创建目标对象。所述目标对象与所述灾备阵列的硬盘的一段或几段物理空间对应,所述目标对象的标识和所述源对象的标识相同。所述灾备阵列将所述数据块写入所述物理空间中,所述数据块保存在所述物理空间中的地址为目标物理地址,所述目标物理地址与所述源物理地址不同。
[0006] 利用本实施例第一方面提供的远程数据复制方法,生产阵列将源对象的标识以及源对象对应的数据块发送给灾备阵列。若灾备阵列确定没有包括与源对象的标识相同的对象时,创建目标对象,将所述源对象对应的数据块写入所述目标对象中。所谓写入所述目标对象是指将所述数据块写入与所述目标对象对应的物理空间中。与现有技术不同的是,本实施例中所述数据块保存灾备阵列中的物理地址与所述数据块保存在生产阵列中的物理地址不相同。因此,灾备阵列在存储所述数据块时相对比较灵活,生产阵列不需要将描述数据块保存在生产阵列中的物理地址,以及描述数据块在生产阵列中的物理地址与对象的标识之间的对应关系的数据复制到灾备阵列,节省了生产阵列与灾备阵列之间的带宽开销。
[0007] 另外,第一方面还可以有其他实现方式。例如,目标对象的标识与源对象的标识不相同,所述灾备阵列为所述目标对象分配标识之后,保存目标对象的标识与源对象的标识之间的对应关系,然后将所述对应关系发送给所述生产阵列。采用这种方式,灾备阵列在创建目标对象时可以更加灵活,不要求目标对象的标识与源对象的标识相同。
[0008] 在第一方面的一种具体实现中,所述数据复制请求还包括所述数据块的逻辑地址,所述逻辑地址为所述数据块位于源对象内的位置;所述数据块保存在所述目标对象内的位置与所述数据块位于源对象内的位置相同。
[0009] 在上述具体实现中,所述灾备阵列保存所述逻辑地址与所述目标物理地址的对应关系,以及所述目标对象的标识与所述目标物理地址的对应关系,所述逻辑地址与所述目标物理地址的对应关系不同于所述逻辑地址与所述源物理地址的对应关系,并且所述目标对象的标识与所述目标物理地址的对应关系不同于所述源对象的标识与所述源物理地址的对应关系。正是由于逻辑地址与目标物理地址的对应关系不同于所述逻辑地址与所述源物理地址的对应关系,并且所述目标对象的标识与所述目标物理地址的对应关系不同于所述源对象的标识与所述源物理地址的对应关系,所以灾备阵列可以相对灵活地在硬盘中布局所述目标对象。生产阵列也避免了将描述这些对应关系的数据发送给灾备阵列,减轻了链路负担。
[0010] 在上述任一种具体实现中,所述生产阵列向所述灾备阵列发送增量数据复制请求,所述增量数据复制请求包括增量数据以及所述增量数据的地址信息,所述增量数据是用于对所述数据块进行更新的数据块,所述增量数据的地址信息包括所述源对象的标识以及所述逻辑地址。当生产阵列对源对象中的数据块有更新时,也需要将用于更新所述数据块的增量数据发送给灾备阵列,以实现灾备阵列对目标对象的同步更新。
[0011] 在上面的具体实现中,所述灾备阵列接收所述增量数据复制请求,根据所述增量数据的地址信息中的所述源对象的标识,确定所述增量数据对应的对象是所述目标对象;根据所述增量数据的地址信息中的逻辑地址确定所述增量数据待写入的目标对象内的位置,将所述增量数据写入所述目标对象的所述逻辑地址中。由此,灾备阵列实现了对目标对象的更新。并且,生产阵列在将增量数据发送给灾备阵列时也不需要将描述所述增量数据在硬盘上如何布局的元数据发送给灾备阵列,而是由灾备阵列在将所述增量数据写入时重新生成布局元数据。因此,节省了生产阵列端与灾备阵列端之间的带宽开销。
[0012] 本实施例第二方面还提供了一种存储系统,包括生产阵列和灾备阵列,分别用于执行第一方面的远程数据复制方法。
[0013] 本实施例第三方面还提供了一种存储设备,包括控制器和硬盘,源文件系统和目标文件系统构建于所述硬盘上,其中源文件系统包括源对象,所述源对象包括用于承载文件或者目录的数据容器,所述源对象对应的数据块保存在源文件系统对应的物理空间中,所述源对象对应的数据块保存在物理空间中的地址为源物理地址。所述控制器用于确定目标文件系统中没有包括与所述源对象的标识相同的对象时,创建目标对象。为所述目标在目标文件系统对应的物理空间中分配物理空间。所述目标对象的标识与所述源对象的标识相同。所述控制器将所述数据块写入为所述目标对象分配的物理空间中,所述数据块保存在为所述目标对象分配的物理空间中的地址为目标物理地址,所述目标物理地址与所述源物理地址不同。
[0014] 另外,第三方面还可以有其他实现方式。例如,目标对象的标识与源对象的标识不相同,所述控制器为所述目标对象分配标识之后,保存目标对象的标识与源对象的标识之间的对应关系。
[0015] 在第三方面的一种具体实现中,所述控制器具体用于根据所述数据块位于源对象中的逻辑地址将所述数据块写入为所述目标对象分配的物理空间中,所述数据块保存在所述目标对象内的位置与所述数据块位于源对象内的位置相同。
[0016] 本实施例第四方面还提供了一种数据备份方法,用于第三方面提供的存储设备中。

附图说明

[0017] 为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍。
[0018] 图1是本发明实施例提供的系统架构示意图;
[0019] 图2是本发明实施例提供的生产阵列的结构图;
[0020] 图3是本发明实施例提供的灾备阵列的结构图;
[0021] 图4是本发明实施例提供的远程数据复制方法的流程示意图。

具体实施方式

[0022] 本发明实施例提出了一种远程数据复制方法及系统,能够减轻生产阵列和灾备阵列之间的容灾链路的负担。
[0023] 图1为本发明实施例提供的远程数据复制方法的系统架构示意图,如图1所示,生产中心包括生产主机、连接设备和生产阵列20;灾备中心的系统架构与生产中心类似,包括灾备主机、连接设备和灾备阵列30。在本发明实施例中,灾备中心可以不止一个。其中,生产中心与灾备中心可以通过IP(Internet Protocol)或者FC(Fiber Chanel)或者其他协议进行数据传输。生产中心和灾备中心之间可以有一个控制中心,所述控制中心可以部署在生产中心侧,也可以部署在灾备中心侧,还可以部署在生产中心和灾备中心之间的第三方设备中。所述控制中心用于当生产阵列20发生故障时,向灾备阵列30发出信号让其接替生产阵列20处理主机业务。
[0024] 生产主机和灾备主机均可以是任何计算设备,如服务器、台式计算机等等。在主机内部,安装有操作系统以及其他应用程序。
[0025] 连接设备可以是存储设备和主机之间的任何接口,如光纤交换机,或者其他现当前技术已知有的交换机。
[0026] 生产阵列20和灾备阵列30均可以是存储设备,如独立硬盘冗余阵列(Redundant Arrays of Inexpensive Disks,RAID)、硬盘簇(Just a Bunch Of Disks,JBOD)、直接存取存储器(Direct Access Storage Device,DASD)的一个或多个互连的硬盘驱动器,诸如磁带库、一个或多个存储单元的磁带存储设备。
[0027] 本实施例中的生产阵列20和灾备阵列30均是具有文件系统的存储设备,也就是说,存储介质中保存的数据是以文件为单位进行管理和访问的。文件系统是一种存储和组织数据的方法,它使得对数据的访问和查找变得容易,文件系统使用文件和树形目录的抽象逻辑概念代替了硬盘等物理设备使用的数据块的概念。生产阵列20在使用文件系统来保存数据后,用户不必关心数据实际保存在硬盘的地址为多少的数据块上,只需要记住这个文件的所属目录和文件名。同样的,在写入新数据之前,用户不必关心硬盘上的那个块地址没有被使用,硬盘上的存储空间管理(分配和释放)功能由文件系统自动完成,用户只需要记住数据被写入到了哪个文件中。需要说明的是,虽然存储在生产阵列20中的数据是以文件的形式呈现给用户的,然而文件在硬盘31中存储的单位仍然是数据块。因此,一个文件可以包含多个数据块。另外,本实施例引入了“对象”的概念,对象是用于存储文件或者目录的容器。每个对象在文件系统内具有唯一的标识(例如,ID)。
[0028] 生产阵列20和灾备阵列30的硬件结构是相同的。图2是本发明实施例生产阵列20的结构示意图,图3是本发明实施例灾备阵列30的结构示意图。
[0029] 如图2所示,生产阵列20包括控制器21和若干个硬盘31。控制器21可以包括任何计算设备,如服务器、台式计算机等等。在控制器内部,安装有文件系统以及其他应用程序。控制器21用于执行和对象相关的各种操作,例如创建文件、创建目录、读文件操作、写文件操作、发送数据复制请求等等。生产阵列20包含的若干个硬盘31用于提供存储空间保存文件。
[0030] 控制器21主要包括处理器(processor)118、缓存(cache)120、存储器(memory)122、通信总线(简称总线)126以及通信接口(Communication Interface)128。处理器118、缓存120、存储器122以及通信接口128通过通信总线126完成相互间的通信。
[0031] 通信接口128,用于与生产主机、灾备阵列以及硬盘31通信。
[0032] 存储器122,用于存放程序124,存储器122可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个硬盘存储器。可以理解的是,存储器122可以为随机存储器(Random-Access Memory,RAM)、磁碟、硬盘、光盘、固态硬盘(Solid State Disk,SSD)或者非易失性存储器等各种可以存储程序代码的非短暂性的(non-transitory)机器可读介质。
[0033] 程序124可以包括程序代码,所述程序代码包括上面描述的文件系统以及其他程序代码。
[0034] 缓存120(Cache)用于缓存从生产主机接收的数据或从硬盘中读取的数据。缓存120可以是RAM、ROM、闪存(Flash memory)或固态硬盘(Solid State Disk,SSD)等各种可以存储数据的非短暂性的(non-transitory)机器可读介质,在此不做限定。
[0035] 另外,存储器122和缓存120可以合设或者分开设置,本发明实施例对此不做限定。
[0036] 处理器118可能是一个中央处理器CPU,或者是特定集成电路ASIC(Application Specific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。
[0037] 如图3所示,灾备阵列30包括控制器41和若干个硬盘51。控制器41可以包括任何计算设备,如服务器、台式计算机等等。在控制器41内部,安装有文件系统以及其他应用程序。控制器41用于执行和对象相关的各种操作,例如创建文件、创建目录、读文件操作、写文件操作等等。灾备阵列30包含的若干个硬盘51用于提供存储空间保存文件。
[0038] 控制器41主要包括处理器(processor)218、缓存(cache)220、存储器(memory)222、通信总线(简称总线)226以及通信接口(Communication Interface)228。处理器218、缓存220、存储器222以及通信接口228通过通信总线226完成相互间的通信。
[0039] 通信接口228,用于与生产阵列、灾备主机以及硬盘51通信。
[0040] 存储器222,用于存放程序224,存储器222可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个硬盘存储器。可以理解的是,存储器222可以为随机存储器(Random-Access Memory,RAM)、磁碟、硬盘、光盘、固态硬盘(Solid State Disk,SSD)或者非易失性存储器等各种可以存储程序代码的非短暂性的(non-transitory)机器可读介质。
[0041] 程序224可以包括程序代码,所述程序代码包括上面描述的文件系统以及其他程序代码。
[0042] 缓存220(Cache)用于缓存从生产阵列接收的数据或从硬盘中读取的数据。缓存220可以是RAM、ROM、闪存(Flash memory)或固态硬盘(Solid State Disk,SSD)等各种可以存储数据的非短暂性的(non-transitory)机器可读介质,在此不做限定。
[0043] 另外,存储器222和缓存220可以合设或者分开设置,本发明实施例对此不做限定。
[0044] 处理器218可能是一个中央处理器CPU,或者是特定集成电路ASIC(Application Specific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。
[0045] 下面结合图1、图2和图3,描述本发明实施例一种远程数据复制方法。该方法应用在图1所示的异步远程复制的场景中,由生产阵列20和灾备阵列30执行。如图3所述,所述方法可以包括以下步骤:
[0046] 步骤1:生产阵列20向灾备阵列30发送数据复制请求。所述数据复制请求包括对象的ID,以及所述对象对应的数据块。
[0047] 对象是指用于承载文件或者目录的数据容器。对象在生产阵列20的硬盘31上面对应一段或几段物理空间。可以理解的是,将对象对应的数据块写入该对象实际上是将所述数据块写入所述物理空间。而对于外部设备而言,所述物理空间是不可见的,只能看到所述数据块位于一个数据容器中。在本实施例中,将数据块写入的所述物理空间的地址称为物理地址。需要说明的是,本实施例中的物理地址并不一定是数据块位于硬盘中的实际地址,只要是对外部设备屏蔽,反映物理空间的地址都称之为物理地址。与物理地址相对应的,数据块还具有逻辑地址。所述逻辑地址是指外部设备可以访问的,反映数据块在所述对象内的位置的地址。对象的元数据可以包括所述对象ID、所述对象对应的数据块的逻辑地址、所述数据块的物理地址、所述对象ID与物理地址的对应关系以及所述逻辑地址与物理地址的对应关系。在实际应用中,如果一个对象较大,那么该对象也可能对应硬盘31上面的几段物理空间。
[0048] 由于生产阵列20和灾备阵列30都保存有对象,为了区分两端保存的对象,在本实施例中,将生产阵列20中的对象称为源对象,将灾备阵列30的对象称为目标对象。同样的,源对象的逻辑地址称为源逻辑地址,源对象的物理地址称为源物理地址,目标对象的逻辑地址称为目标逻辑地址,目标对象的物理地址称为目标物理地址。
[0049] 另外,本实施例中所描述的远程数据复制是指异步远程复制。生产阵列20周期性地向灾备阵列30发送数据复制请求,远程复制的周期可以控制中心设置。例如,在控制中心中设置一个计时器(timer)。当预定时间达到时,控制中心给生产阵列20发送指令,指示生产阵列20执行数据复制任务。
[0050] 在步骤1中,生产阵列20向灾备阵列30发送的数据复制请求可以包括对象的ID,以及所述对象对应的数据块。在某些实施方式中,所述数据复制请求还可以包括数据块的逻辑地址。需要说明的是,生产阵列20并不需要将所述数据块的布局元数据发送给灾备阵列30。所谓数据块的布局元数据是指所述数据块的源物理地址、源对象的ID与源物理地址的对应关系以及源逻辑地址与源物理地址的对应关系。这意味着灾备阵列30接收所述数据块之后,并不需要按照与生产阵列30相同的布局方式来存储所述数据块。所述数据块存储在灾备阵列30的目标物理地址与所述数据块存储在生产阵列20的源物理地址不相同。
[0051] 具体的,步骤1可以由生产阵列20中的处理器118来执行。
[0052] 在步骤2中,灾备阵列30接收所述数据复制请求。灾备阵列30可以根据所述数据复制请求中携带的对象的ID判断其本地是否存在于与源对象的ID相同的对象。若存在ID相同的对象,那么所述数据复制请求是一个增量数据复制请求,接下来执行步骤6。所述增量数据复制请求用于更新所述对象。若判断的结果是不存在ID相同的对象,那么灾备阵列30就需要所述数据复制请求中创建一个目标对象,如步骤3所示。
[0053] 在步骤3中,灾备阵列30创建所述目标对象。所述目标对象的ID与所述源对象的ID可以相同,也可以不相同。若ID相同,那么无论对生产阵列20还是灾备阵列30而言都相对更容易查找到与源对象相对应的目标对象,或者与目标对象相对应的源对象。若ID不同,那么灾备阵列30在设定目标对象的ID之后,还需要保存源对象的ID与目标对象的ID之间的对应关系,并且将所述对应关系通知生产阵列20。采用这种方式,虽然查找起来相对复杂一点,但是灾备阵列30在创建目标对象时更为灵活。所以两者各有优势。另外,如前面对对象的描述可知,目标对象是逻辑上用于承载文件或者目录的数据容器,在灾备阵列30的硬盘上对应一段或几段物理空间。所述物理空间是创建所述目标对象时,为其分配的。
[0054] 在步骤4中,灾备阵列30将所述数据复制请求中携带的数据块写入所述物理空间中。所述数据块保存在所述物理空间中的地址为目标物理地址,目标物理地址与源物理地址不同。
[0055] 具体的,生产阵列20向灾备阵列30发送的所述数据复制请求中还可以包括所述数据块的逻辑地址。所述逻辑地址对于生产阵列20和灾备阵列30而言都是适用的。这意味着,所述数据块位于源对象的位置与所述数据块位于目标对象的位置相同。因此,灾备阵列30在将所述数据块写入所述物理空间时可以根据所述数据块的逻辑地址写入所述物理空间。可以理解的是,所述数据块实际占用的物理空间可以是为所述目标对象分配的物理空间的一部分,也可以是全部。
[0056] 在步骤5中,灾备阵列30在将所述数据块写入物理空间之后,生成并保存所述数据块的布局元数据。所述布局元数据包括目标对象的ID与目标物理地址的对应关系,以及逻辑地址与所述目标物理地址的对应关系。由于目标物理地址与源物理地址不同,那么相应的,灾备阵列端的布局元数据和生产阵列端的布局元数据也不相同。
[0057] 在执行步骤5之后,灾备阵列30可以向生产阵列20发送一个响应请求,以指示所述数据复制请求执行成功。至此,本实施例实现了将生产阵列中的对象以及所述对象对应的数据块复制到灾备阵列中。由于所述数据块存储在灾备阵列30中的目标物理地址与所述数据块存储在生产阵列20中的源物理地址不相同,生产阵列20并不需要指示灾备阵列30存储所述数据块的物理地址,因此生产阵列20也不需要将布局元数据发给灾备阵列30,节省了生产阵列与灾备阵列之间的带宽开销。
[0058] 具体的,步骤2-步骤5可以由灾备阵列30中的处理器218来执行。
[0059] 下面介绍增量数据复制请求的处理。
[0060] 在步骤2中,如果灾备阵列30判断出所述目标对象已经存在,那么步骤2中的数据复制请求就是一个增量数据复制请求。另外,在步骤5之后,在步骤6中(即创建所述目标对象之后)灾备阵列30也可能接收增量数据复制请求。所述增量数据复制请求用于对目标对象中的数据块进行更新。
[0061] 具体的,在完成一次复制任务之后生产阵列20可能会接收来自生产主机的增量数据,用于源对象对应的数据块进行更新。为了保持两端的数据的一致性,生产阵列20需要将所述增量数据发送给灾备阵列30。所述增量数据复制请求包括所述增量数据、源对象的标识(例如,ID)以及逻辑地址。与数据复制请求类似,增量数据复制请求也是周期性发送的,其周期可以和远程复制的周期相同。
[0062] 在实际应用中,生产阵列20在接收增量数据之后,可以保存为增量日志。所述增量日志可以描述为“源对象的ID+逻辑地址”。当复制任务触发时,生产阵列20根据所述增量日志读取所述增量数据,并将所述增量数据与所述逻辑地址发送给灾备阵列30。当生产阵列20中保存有多条增量日志时,生产阵列20可以将一个远程复制周期内的多条增量日志,一次性地或者分别发送给灾备阵列30,以实现灾备阵列端和生产阵列端数据的一致性。
[0063] 例如,在步骤6中,生产阵列20向灾备阵列30发送增量数据复制请求,灾备阵列30接收所述增量数据复制请求之后,根据源对象的ID查找待更新的目标对象。示例性的,目标对象的ID可以和源对象的ID相同,这种情况下,灾备阵列30可以直接根据所述源对象的ID查找到目标对象。另外,在其他实施方式中,目标对象的ID可以和源对象的ID不相同,那么灾备阵列30就需要根据所述源对象的ID和本地保存的目标对象的ID与源对象的ID之间的对应关系,查找到目标对象。
[0064] 在步骤7中,灾备阵列30根据所述增量数据复制请求中携带的逻辑地址确定所述目标对象内待更新的数据块的位置,将所述增量数据复制请求中携带的数据块写入该位置。灾备阵列30在将所述增量数据写入为所述目标对象对应的物理空间之后,生成并保存目标物理地址与所述逻辑地址之间的对应关系,以及所述目标物理地址与所述目标对象的ID之间的对应关系。
[0065] 具体的,步骤6-步骤7可以由灾备阵列30中的处理器218来执行。
[0066] 通过步骤6和步骤7,灾备阵列30完成了对目标对象的更新。并且,生产阵列20在将增量数据发送给灾备阵列30时也不需要将描述所述增量数据在硬盘上如何布局的元数据发送给灾备阵列30,而是由灾备阵列30在将所述增量数据写入时重新生成布局元数据。因此,节省了生产阵列端与灾备阵列端之间的带宽开销。
[0067] 在实际应用中,生产阵列20可能删除某个文件或者某个目录,或者截断某个文件,从而导致该文件或者目录所在的对象被删除,或者该对象的部分数据被删除,使对象实际占用的物理空间变小。这种场景下,生产阵列20也需要将删除文件或者目录、或截断文件的信息同步至灾备阵列30。
[0068] 示例性的,生产阵列20接收删除、截断指令之后,根据删除、截断指令中的逻辑地址将该逻辑地址的数据块释放,并且保存删除日志。所述删除日志可以描述为“源对象的ID+逻辑地址”。当复制任务触发时,生产阵列20根据所述删除日志读取对应位置的数据,若该位置对应的数据块被释放,则读取不到有效数据,在这种情况下,生产阵列将数据内容替换为某种特殊标记(如标记为全0),该标记的含义代表对应的逻辑地址的数据块需要被释放,并将所述含有特殊标记的数据、所述逻辑地址以及源对象的ID发送给灾备阵列30。
[0069] 灾备阵列30检测到接收的数据中含有特殊标记,根据源对象的ID确定待修改的目标对象,将所述目标对象的逻辑地址的数据块释放,从而实现删除对象、或删除对象的部分数据,即达到在目标文件系统中删除文件或目录,截断文件的效果。
[0070] 另外,本实施例还可以用于阵列内部源文件系统与目标文件系统之间的数据复制。在具体实现上,可以由阵列内部的控制器(参见图2所示的结构图)执行。
[0071] 例如,当源文件系统中的一个对象需要备份到目标文件系统时,控制器判断目标文件系统中是否有与源对象ID相同的目标对象,若没有则创建一个目标对象,所述目标对象的ID与源对象的ID相同,所述目标对象对应硬盘上的一段或几段物理空间。与图4所示的实施例不同之处在于,阵列内的备份,源对象和目标对象所对应的物理空间都位于该阵列内。而图4所示的实施例由于阵列间的数据复制,源对象对应的物理空间位于生产阵列中,目标对象对应的物理空间位于灾备阵列中。在目标对象创建完成之后,控制器再将所述源对象对应的数据块写入目标对象对应的物理空间中。
[0072] 示例性的,控制器可以根据所述数据块位于所述源对象的逻辑地址将所述数据块写入目标对象对应的物理空间中,以保证所述数据块在目标对象中保存的位置与源对象中保存的位置一致。
[0073] 其余的步骤,例如当源对象对应的数据有更新时,增量数据也需要备份给目标对象。具体的实施方式与图4所示的实施例类似,这里不再赘述。
[0074] 在某些基于文件语义的数据备份技术中,源文件系统将接收的数据记录到日志中。日志中按顺序记录所有的文件语义写操作和写数据,如创建文件、删除文件、移动文件、对文件写入数据、修改文件属性、创建目录、删除目录等。文件语义写操作具有顺序依赖性,例如,创建文件前,该文件所属的目录必须先存在,所以必须先创建目录,再创建文件。由于顺序依赖性的存在,使得备份时必须按照一系列的规则进行,从而使得基于文件语义的数据备份技术实现起来比较复杂。或者,周期性地对源文件系统创建快照,通过对比前后快照的差异,推导出两次快照之间源文件系统发生哪些文件语义写操作和写数据。然后,后台任务获取该记录,以文件语义写操作的形式发送给目标文件系统。目标文件系统按照类似于应用程序在灾备阵列的文件系统上重新执行的方式执行该写操作。这种方式导致灾备阵列在执行文件语义复制时,需要对每个文件执行相应的操作(例如open操作或者close操作),导致很多额外的开销,使得备份效率较低。而本发明实施例在实现时,不用考虑写操作之间的顺序依赖性。只需要将对象对应的数据块由源文件系统备份到目标文件系统,数据块之间没有依赖关系,不用考虑备份数据块的先后顺序,降低了方案复杂度。并且,在备份时,可以直接执行对对象的读取和写入,不需要执行额外的操作(例如open操作或者close操作),降低了系统开销,提高了备份效率。
[0075] 另外,在基于块语义的备份中,文件系统必须构建于卷上。卷提供的是块(block)语义的访问接口和地址空间,该语义只有读一段地址和写一段地址,没有复杂的文件操作。所以,基于块语义的备份,本质上是利用卷的复制方法实现。该方法周期性地对生产阵列中的源卷创建快照,比较前后快照之间哪些数据块发生了变化。然后,获取发生变化的数据块以及数据块的地址,发送给目标文件系统。目标文件系统将数据块写入相同地址的目标卷中。然而,基于块语义的备份,必须依赖于文件系统构建于卷上的基础架构,若不是基于这种架构则无法采用该技术。本发明实施例摆脱了文件系统需要构建于卷上的依赖,无论文件系统构建于何种物理空间之上,都可以实现文件的备份。
[0076] 需要说明的是,上述两段话中的源文件系统和目标文件系统可以是指一个阵列内的两个文件系统,也可以分别是两个阵列中的文件系统。
[0077] 最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制。