连续备份的制作方法

文档序号:6570090阅读:217来源:国知局
专利名称:连续备份的制作方法
技术领域
本发明涉及计算机存储设备,特别是涉及有选择地维护和修改保 存在计算机存储设备上并对应于特定时间点的数据部分的领域。2. 背景技术主处理机系统可使用存储设备保存和检索数据,存储设备包含多 个主机接口装置(主机适配器)、磁盘驱动器、及磁盘接口装置(磁盘适配器)。例如,这样的存储设备可由麻萨诸塞州H叩kinton的伊 姆西公司提供,且其在授权给Yanai等的美国专利5, 206, 939、授权 给Galtzur等的美国专利5, 778, 394、授权给Vishlitzky等的美国 专利5, 845, 147、及授权给0fek等的美国专利5, 857, 208中公开。 主机系统通过多个随其提供的通道访问存储设备。主机系统通过存储 设备通道提供数据和访问控制信息,存储设备也通过通道提供数据给 主机系统。主机系统不直接寻址存储设备的磁盘驱动器,而是访问对 主机系统表现为多个逻辑巻的装置。逻辑巻可以也可不对应于实际的 磁盘驱动器。数据备份服务可用于保护数据免遭损失。所述服务可定期(例如 一天一次或两次)执行。当主系统上的数据丢失时,其可从备份介质 恢复。这样的数据备份服务有多个缺点,包括其只可能恢复对应于在定 期备份时保存的数据。例如,如果每日在上午9点和下午3点备份数 据,则用户不能恢复如上午11点的数据。如果用户想要上午11点的 数据版本,其最佳解决方式是获得上午9点备份的数据版本的副本, 然后执行一些步骤以构建上午11点的数据(例如,通过人工重构数 据)。对该问题的一种解决方案是更频繁地执行备份。然而,增加备份 频率将增加用于备份数据的内存需求,从而增加备份数据的开销和复 杂性。理想地,通过使系统具有连续或接近连续的备份功能从而能获 得任何先前时间的数据是符合需要的,所述连续或接近连续的备份不 因备份频率增加而增加内存需求或复杂性。发明内容根据本发明,提供存储设备的连续备份,包括将所述存储设备 细分为多个分区,提供定期修改的时间指示符,及响应于在特定时间 向所述存储设备的特定分区写新数据的请求,根据所述特定分区及根 据所述指示符在所述特定时间的值保留被所述新数据盖写的数据。所 述分区可以是磁道。保留被盖写的数据可包括构建每一分区的数据部 分的链表。所述数据部分可具有可变的大小。响应于在所述指示符的 特定值时对特定分区的两个数据写操作,如果第二数据写操作的数据 是第一数据写操作的数据的子集,则两个数据写操作中的每一写操作 所写数据可被组合。提供存储设备的连续备份还可包括通过将保留 的数据写到存储设备而将所述存储设备恢复到其在特定时间点的状 态。将保留的数据写到存储设备可包括通过将对应于相同分区的分 开的数据部分进行组合而构建所述数据的分区。提供存储设备的连续 备份还可包括通过遍历对应于特定分区的数据获得适当的插入点, 在特定时间点插入特定分区的数据。提供存储设备的连续备份还可包 括通过遍历对应于特定分区的数据并读存储设备的数据、保留的数 据、及保留数据和存储设备数据的组合,在特定时间点读特定分区的 数据。提供存储设备的连续备份还可包括通过组合分区的相继部分压 縮数据。进一步根据本发明,存储介质中的、提供存储设备的连续备份的 计算机软件,包括获得定期修改的时间指示符的值的可执行代码, 及响应于在特定时间向所述存储设备的特定分区写新数据的请求,根 据所述特定分区及根据所述指示符在所述特定时间的值保留被所述5新数据盖写的数据的可执行代码。所述分区可以是磁道。保留被盖写 数据的可执行代码可构建每一分区的数据部分的链表。所述数据部分 可具有可变的大小。响应于在所述指示符的特定值时对特定分区的两 个数据写操作,如果第二数据写操作的数据是第一数据写操作的数据 的子集,则两个数据写操作中的每一写操作所写数据可被组合。所述 计算机软件还可包括通过将保留的数据写到存储设备而将所述存储 设备恢复到其在特定时间点的状态的可执行代码。将保留的数据写到 存储设备的可执行代码可通过将对应于相同分区的分开的数据部分 进行组合而构建所述数据的分区。所述计算机软件还可包括通过遍 历对应于特定分区的数据获得适当的插入点,在特定时间点插入特定 分区的数据的可执行代码。所述计算机软件还可包括通过遍历对应 于特定分区的数据并读存储设备的数据、保留的数据、及保留数据和 存储设备数据的组合,在特定时间点读特定分区的数据的可执行代 码。所述计算机软件还可包括通过组合分区的相继部分而压縮数据的 可执行代码。进一步根据本发明,提供存储设备的连续备份包括将所述存储 设备细分为多个分区,提供包含存储设备上在开始连续备份时的数据 的副本的存储设备镜像设备,提供定期修改的时间指示符,及响应于 在特定时间向所述存储设备的特定分区写新数据的请求,根据所述特 定分区及根据所述指示符在所述特定时间的值保留被所述新数据盖 写的数据,其中,对于开始连续备份后的第一写,来自镜像设备的数 据用于保留被盖写的数据。所述分区可以是磁道。保留被盖写的数据 可包括构建每一分区的数据部分的链表。所述数据部分可具有可变的 大小。响应于在所述指示符的特定值时对特定分区的两个数据写操 作,如果第二数据写操作的数据是第一数据写操作的数据的子集,则 两个数据写操作中的每一写操作所写数据可被组合。提供存储设备的 连续备份还可包括通过将保留的数据写到存储设备而将所述存储设 备恢复到其在特定时间点的状态。将保留的数据写到存储设备可包 括通过将对应于相同分区的分开的数据部分进行组合而构建所述数据的分区。提供存储设备的连续备份还可包括通过遍历对应于特定 分区的数据获得适当的插入点,在特定时间点插入特定分区的数据。 提供存储设备的连续备份还可包括通过遍历对应于特定分区的数据 并读存储设备的数据、保留的数据、及保留数据和存储设备数据的组 合,在特定时间点读特定分区的数据。提供存储设备的连续备份还可 包括通过组合分区的相继部分压縮数据。进一步根据本发明,存储介质中的、提供存储设备的连续备份的 计算机软件,包括获得定期修改的时间指示符的值的可执行代码, 及响应于在特定时间向所述存储设备的特定分区写新数据的请求,根 据所述特定分区及根据所述指示符在所述特定时间的值保留被所述 新数据盖写的数据的可执行代码,其中,对于开始连续备份后的第一 写,用于保留被盖写数据的数据来自存储设备的镜像设备,所述镜像 设备包含在开始连续备份时所述存储设备上的数据的副本。所述分区 可以是磁道。保留被盖写数据的可执行代码可构建每一分区的数据部 分的链表。所述数据部分可具有可变的大小。响应于在所述指示符的 特定值时对特定分区的两个数据写操作,如果第二数据写操作的数据 是第一数据写操作的数据的子集,则两个数据写操作中的每一写操作 所写数据可被组合。所述计算机软件还可包括通过将保留的数据写 到存储设备而将所述存储设备恢复到其在特定时间点的状态的可执 行代码。将保留的数据写到存储设备的可执行代码可通过将对应于相 同分区的分开的数据部分进行组合而构建所述数据的分区。所述计算 机软件还可包括通过遍历对应于特定分区的数据获得适当的插入 点,在特定时间点插入特定分区的数据的可执行代码。所述计算机软 件还可包括通过遍历对应于特定分区的数据并读存储设备的数据、 保留的数据、及保留数据和存储设备数据的组合,在特定时间点读特 定分区的数据的可执行代码。所述计算机软件还可包括通过组合分区 的相继部分而压縮数据的可执行代码。进一步根据本发明,提供从本地存储设备到远程存储设备的连续 备份,包括将所述本地存储设备细分为多个分区,提供定期修改的时间指示符,及响应于在特定时间向所述本地存储设备的特定分区写 新数据的请求,根据所述特定分区及根据所述指示符在所述特定吋间 的值在远程存储设备保留被所述新数据盖写的数据。所述分区可以是 磁道。保留被盖写的数据可包括构建每一分区的数据部分的链表。所 述数据部分可具有可变的大小。响应于在所述指示符的特定值时对特 定分区的两个数据写操作,如果第二数据写操作的数据是第一数据写 操作的数据的子集,则两个数据写操作中的每一写操作所写数据可被 组合。提供从本地存储设备到远程存储设备的连续备份还可包括通 过将保留的数据写到远程存储设备并将所述数据从远程存储设备传 到本地存储设备而将所述本地存储设备恢复到其在特定时间点的状 态。将保留的数据写到存储设备可包括通过将对应于相同分区的分 开的数据部分进行组合而构建所述数据的分区。提供从本地存储设备 到远程存储设备的连续备份还可包括通过遍历对应于特定分区的数 据获得适当的插入点,在特定时间点插入特定分区的数据。提供从本 地存储设备到远程存储设备的连续备份还可包括在本地存储设备提 供虚拟存储设备,其中所述虚拟存储设备提供对保留在远程存储设备 处的数据的访问,及通过遍历远程存储设备处对应于特定分区的数据 并读本地存储设备的数据、保留的数据、及保留数据和本地存储设备 数据的组合,在特定时间点读特定分区的数据,其中所保留的数据通 过所述虚拟存储设备进行访问。提供从本地存储设备到远程存储设备 的连续备份还可包括通过组合分区的相继部分压縮数据。进一步根据本发明,存储介质中的、提供从本地存储设备到远程 存储设备的连续备份的计算机软件,包括获得定期修改的时间指示 符的值的可执行代码,及响应于在特定时间向所述本地存储设备的特 定分区写新数据的请求,根据所述特定分区及根据所述指示符在所述 特定时间的值在远程存储设备保留被所述新数据盖写的数据的可执 行代码。所述分区可以是磁道。保留被盖写数据的可执行代码可构建 每一分区的数据部分的链表。所述数据部分可具有可变的大小。响应 于在所述指示符的特定值时对特定分区的两个数据写操作,如果第二数据写操作的数据是第一数据写操作的数据的子集,则两个数据写操 作中的每一写操作所写数据可被组合。所述计算机软件还可包括通 过将保留的数据写到远程存储设备并将所述数据从远程存储设备传 到本地存储设备而将所述本地存储设备恢复到其在特定时间点的状 态的可执行代码。将保留的数据写到存储设备的可执行代码可通过将 对应于相同分区的分开的数据部分进行组合而构建所述数据的分区。 所述计算机软件还可包括通过遍历对应于特定分区的数据获得适当 的插入点,在特定时间点插入特定分区的数据的可执行代码。所述计 算机软件还可包括通过遍历远程存储设备处对应于特定分区的数据 并读本地存储设备的数据、保留的数据、及保留数据和本地存储设备数据的组合,在特定时间点读特定分区的数据的可执行代码,其中所 保留的数据通过在所述本地存储设备提供的虚拟存储设备进行访问 以访问保留在远程存储设备处的数据。所述计算机软件还可包括通过 组合分区的相继部分而压縮数据的可执行代码。


图1为连同在此描述的系统一起使用的多个主机及数据存储设 备的示意图。图2为根据在此描述的系统的存储设备、内存、多个导控器及通 信模块的示意图。图3为连同在此描述的系统一起使用的不同逻辑巻的存储图。图4为根据在此描述的系统的虚拟设备的使用图。图5为根据在此描述的系统的多个虚拟设备的使用图。图6为连同在此描述的系统一起使用的设备表的图。图7为根据在此描述的系统,读连同虚拟设备使用的表的流程图。图8根据在此描述的系统,向连同虚拟设备使用的表进行写的流程图。9图9为根据在此描述的系统,修改虚拟设备表及建立虚拟设备的 流程图。图10为根据在此描述的系统,修改用于处理日志设备的磁道的 数据结构的流程图。图11为根据在此描述的系统,连同读虚拟设备执行的步骤的流 程图。图12为根据在此描述的系统,连同向已建立虚拟设备的标准逻 辑设备写由磁盘适配器执行的步骤的流程图。图13为根据在此描述的系统,连同向已建立虚拟设备的标准逻 辑设备写由主机适配器执行的步骤的流程图。图14为根据在此描述的系统,连同向虚拟设备进行写执行的步 骤的流程图。图15为根据在此描述的系统,连同去除虚拟设备执行的步骤的流程图。图16为根据在此描述的系统的连续备份虚拟设备的示意图。 图17为根据在此描述的系统,连同连续备份虚拟设备使用的数 据结构图。图18为根据在此描述的系统,连同连续备份虚拟设备使用的链 表图。图19为根据在此描述的系统,处理数据写操作的流程图。 图20为根据在此描述的系统,处理数据读操作的流程图。 图21为根据在此描述的系统,从较早时间点读数据的流程图。 图22为根据在此描述的系统,将存储设备还原到较早时间点状 态的流程图。图23为根据在此描述的系统,向处于较早点状态的存储设备写 数据的流程图。图24为根据在此描述的系统的实施例,在恢复过程期间连同从 标准逻辑设备读数据或向标准逻辑设备写数据执行的步骤的流程图。图25为根据在此描述的系统,为连续数据备份同歩多个存储设 备的示意图。图26为连同在此描述的系统使用的主机、本地存储设备和远程 存储设备的示意图。图27为根据在此描述的系统,用于在远程存储设备上备份的连续备份虚拟设备示图。图28为连同在此描述的系统使用的主机、本地存储设备及远程 数据存储设备之间的数据流的示意图。图29为根据在此描述的系统,示出用于构建和利用本地存储设 备上的数据块的项目的示意图。图30示出了连同在此描述的系统使用的本地存储设备上的槽的 数据结构。图31为根据在此描述的系统,响应于主机向本地存储设备进行 写所执行的处理的流程图。图32为根据在此描述的系统,将数据从本地存储设备传输到远 程存储设备的流程图。图33为根据在此描述的系统,所执行的与本地存储设备增加序 号有关的步骤的流程图。图34为根据在此描述的系统的另一实施例,用于构建和利用本 地存储设备上的数据块的项目的示意图。图35为根据在此描述的系统的另一实施例,响应于主机向本地 存储设备进行写所执行的处理的流程图。图36为根据在此描述的系统的另一实施例,将数据从本地存储 设备传输到远程存储设备的流程图。图37为根据在此描述的系统,多个本地和远程存储设备与主机 的示意图。图38为连同在此描述的系统使用的多盒模式(皿lti-boxmode)表。图39为根据在此描述的系统修改多盒模式表的流程图。图40为根据在此描述的系统,主机转换周期的流程图。图41为根据在此描述的系统连同本地存储设备递增序号所执行的步骤的流程图。图42为根据在此描述的系统,将数据从本地存储设备传输到远程存储设备的流程图。图43为根据在此描述的系统的另一实施例,将数据从本地存储设备传输到远程存储设备的流程图。图44为使用本地存储设备和远程存储设备将数据恢复到特定时 间点的流程图。图45为在本地存储设备处的虚拟设备访问远程存储设备处的CB 虚拟设备的图示。图46为根据在此描述的系统,用于在远程存储设备上备份的连 续备份虚拟设备和本地镜像存储设备的图示。
具体实施方式
参考图1,示图20示出了连接到数据存储设备24的多个主机 22a-22c。数据存储设备24包括内部内存26,如本文别处所述,其 有助于存储设备24的运行。数据存储设备还包括多个主机适配器 (HA) 28a-28c,其处理主机22a-22c和存储设备24之间的读和写数 据。尽管示图20示出主机22a-22c中的每一个分别连接到HA 28a_28c 之一,本领域技术人员应当意识到,HA 28a-28c中的一个或多个可 连接到其它主机。存储设备24可包括一个或多个RDF适配器单元(RA) 32a-32c。 RA 32a-32c连接到RDF链路并与HA 28a-28c类似,但用于在存储设 备24及同样连接到RDF链路34的其它存储设备(未示出)之间传送 数据。除RDF链路34之外,存储设备24还可连接到另外的RDF链路 (未示出)。存储设备24还可包括一个或多个磁盘36a-36c,每一磁盘包含 保存在存储设备24上的不同数据部分。磁盘36a-36c中的每一个可连接到多个磁盘适配器单元(DA) 38a-38c中的相应磁盘适配器单元, 其向相应磁盘36a-36c提供数据并从相应磁盘36a-36c接收数据。应 注意,在一些实施例中, 一个以上磁盘将由一个DA服务是可能的, 及一个以上DA服务一个磁盘也是可能的。存储设备24中对应于磁盘36a-36c的逻辑存储空间可被细分为 多个巻或逻辑设备。逻辑设备可以也可不对应于磁盘36a-36c的物理 存储空间。因而,例如,磁盘36a可包含多个逻辑设备,或者,单一 逻辑设备可跨两个磁盘36a、 36b 。主机22a-22c可被配置成独立于 磁盘36a-36c上的逻辑设备位置访问逻辑设备的任何组合。一个或多个内部逻辑数据通路存在于DA 38a-38c、 HA 28a_28c、 RA 32a-32c和内存26之间。在一些实施例中,可使用一个或多个内 部总线和/或通信模块。在一些实施例中,内存26可用于帮助数据在 DA 38a-38c、 HA 28a-28c和RA 32a-32c之间传送。内存26可包含 将由DA 38a-38c、 HA 28a-28c和RA 32a_32c中的一个或多个执行的 任务,及包含用于从磁盘36a-36c中的一个或多个取回的数据的高速 缓存。内存26的使用将在下文中详细描述。存储设备24可被提供为连接到主机22a-22c的独立设备,如图 l中所示;或者,存储设备24可以是存储区网络(SAN)的一部分, 所述存储区网络包括多个其它存储设备及路由器、网络连接等。存储 设备可连接到SAN结构和/或可以是SAN结构的一部分。在此描述的 系统可使用软件、硬件和/或软件及硬件的结合实施,其中软件可保 存在适当的存储介质中并可由一个或多个处理器运行。参考图2,示图50示出了存储设备24的实施例,其中多个导控 器52a-52c中的每一个连接到内存26。每一导控器52a_52c表示HA 28a-28c、 RA 32a_32c和DA 38a-38c之一。在于此公开的实施例中, 可以有高达64个导控器连接到内存26。当然,对于其它实施例,可 以有更高或更低最大数量的导控器被使用。示图50还示出了可选通信模块(CM) 54,其在导控器52a-52c 之间提供备选通信路径。每一导控器52a-52c可连接到CM54,使得导控器52a-52c中的任一导控器可向导控器52a-52c中的任何其它导 控器发送消息和/或数据,而不需要经过内存26。 CM54可使用传统 MUX/路由器技术实施,其中导控器52a-52c中的发送导控器提供适当 的地址以使消息和/或数据将由导控器52a-52c中的预定接收导控器 接收。CM54的部分或全部功能可使用一个或多个导控器52a-52c实 施,例如,使得导控器52a-52c可与每一导控器52a-52c上提供的互 连功能直接互连。此外,导控器52a-52c中的发送导控器能够同时向 所有其它导控器52a-52c传播消息。参考图3,存储设备24被示为包括多个标准逻辑设备61-68。每 一标准逻辑设备61-68可对应于可由连接到存储设备24的一个或多 个主机访问的巻。每一标准逻辑设备61-68可以或者也可不对应于磁 盘驱动器36a-36c之一。因而,例如,标准逻辑设备61可对应于磁 盘驱动器36a、可对应于磁盘驱动器36a的一部分、或者可对应于磁 盘驱动器36a的一部分及磁盘驱动器36b的一部分。每一标准逻辑设 备61-68对主机表现为连续的磁盘存储块,即使每一标准逻辑设备 61-68可以或者也可不对应于磁盘驱动器36a-36c的实际连续物理存 储。存储设备24还可包括多个虚拟设备71-74。虚拟设备71-74对 连接到存储设备24的主机表现为包含连续数据存储块的巻。每一虚 拟设备71-74可代表标准逻辑设备61-68之一整个、标准逻辑设备 61-68之一的部分或者标准逻辑设备61-68中的整个标准逻辑设备及 标准逻辑设备的部分的结合的时间点副本。然而,如本文别处详细描 述的,虚拟设备71-74不包含来自标准逻辑设备61-68的磁道数据。 而是,每一虚拟设备71-74连接到保存部分或全部磁道数据的日志设 备76或日志设备78,如本文别处所详述的那样。虚拟设备71-74包 含指向标准逻辑设备61-68或日志设备76、 78之任一上的数据磁道 的表。在某些情形下,单一虚拟设备可将数据保存在一个以上日志设 备上。虚拟设备71可代表标准逻辑设备61的时间点副本。如本文别处所详述的,虚拟设备71连接到包含磁道数据的日志设备76以帮助虚 拟设备71对主机表现为标准逻辑设备61的时间点副本。 一个以上虚 拟设备使用单一日志设备是可能的。因而,虚拟设备72-74被示为连 接到日志设备78。类似地, 一个以上虚拟设备代表单一标准逻辑设 备的时间点副本是可能的。因而,虚拟设备72、 73被示为标准逻辑 设备64的时间点副本。虚拟设备72、 73可代表标准逻辑设备64的 同一时间点副本,或者,可代表在不同时间发生的标准逻辑设备64 的时间点副本。注意,标准逻辑设备61-68只有部分被示为与相应虚 拟设备71-74相关联,而标准逻辑设备61-68的其它标准逻辑设备不 与其关联。在一些实施例中,使用存储区而不是存储设备实施在此描述的系 统是可能的。因而,例如,虚拟设备71-74可以是虚拟存储区,标准 逻辑设备61-68可以是标准逻辑区,日志设备76、 78可以是日志区。 在一些情形下,这样的实施使能混合逻辑/虚拟设备,其中单一逻辑 设备具有用作标准逻辑设备的部分、用作虚拟设备的部分、和/或用 作日志设备的部分。因而,应当理解,在适当的情况下,在这里的论 述中提及设备也可应用于存储区,其可以也可不与存储设备直接对 应。参考图4,图中示出了标准逻辑设备82、虚拟设备84和日志设 备86。如上所述,虚拟设备84可代表标准逻辑设备82的全部或部 分的时间点副本。连接到访问虚拟设备84的存储设备的主机可以与 主机访问标准逻辑设备82同样的方式访问虚拟设备84。然而,虚拟 设备84不包含标准逻辑设备82的任何磁道数据。而是,虚拟设备包 括多个指向标准逻辑设备82或日志设备86之任一上的磁道的表项。当虚拟设备84被建立时(例如当标准逻辑设备82的时间点副本 被形成时),虚拟设备84被创建并被提供适当的表项,所述表项在 建立时指向标准逻辑设备82的磁道。访问虚拟设备84以读磁道的主机应基于指向标准逻辑设备82的磁道的虚拟设备84的表项从标准逻辑设备82读适当的磁道。在虚拟设备84已被建立之后,对于主机将数据写到标准逻辑设 备82是可能的。在该情形下,保存在标准逻辑设备82上的先前数据 被复制到日志设备86,先前指向标准逻辑设备82的磁道的虚拟设备 84的表项被修改为指向所述数据已被复制到其的日志设备86的新磁 道。因而,访问虚拟设备84的主机或从标准逻辑设备82读自虚拟设 备84建立以来尚未变化的磁道,或者,从日志设备86读包含在虚拟 设备84建立之后从标准逻辑设备82复制的数据的相应磁道。调整数 据和指针及从标准逻辑设备82和虚拟设备84读和向其写将在本文别 处详细描述。在这里描述的实施例中,主机不能直接访问日志设备86。艮口, 日志设备86连同虚拟设备84 (及在本文别处详细描述的其它虚拟设 备)独占使用。此外,对于在此描述的实施例,标准逻辑设备82、 虚拟设备84及日志设备86可被提供在单一存储设备24上。然而, 在例如使用RDF协议或其它远程通信协议互连的分开的存储设备上 提供不同的逻辑设备和日志设备也是可能的。此外,使标准逻辑设备 82、虚拟设备84和/或日志设备86中的一个或多个的部分提供在适 当互连的、分开的存储设备上也是可能的。参考图5,使用虚拟设备的另一例子示出了标准逻辑设备92、多 个虚拟设备94-97和日志设备98。在图5的例子中,虚拟设备94代 表标准逻辑设备92在上午10点的时间点副本。类似地,虚拟设备 95代表标准逻辑设备92在中午12点的副本,虚拟设备96代表标准 逻辑设备92在下午2点的副本,及虚拟设备97代表标准逻辑设备 92在下午4点的副本。注意,所有虚拟设备94-97可共享日志设备 98。此外,对于一个以上虚拟设备94-97的表项或虚拟设备94-97的 表项的子集,指向日志设备98的相同磁道是可能的。例如,虚拟设 备95和虚拟设备96被示为具有指向日志设备98的相同磁道的表项。在于此描述的实施例中,日志设备98和在此描述的其它日志设 备由存储设备24管理的一池日志设备提供。在该情形下,由于虚拟 设备需要另外的日志设备磁道,虚拟设备使得使用日志设备池机制创 建更多的日志设备存储(现有日志设备的更多磁道或新日志设备的形 式)。以这种方式池化存储设备资源在本领域是众所周知的。不使用 池化的其它技术也可用于提供日志设备存储。参考图6,示图100示出了用于跟踪设备信息的表。第一表102 对应于存储设备或存储设备的元件如HA和/或DA使用的所有设备。 表102包括多个逻辑设备项106-108,其对应于存储设备(或存储设 备的一部分)使用的所有逻辑设备。表102中的项包括标准逻辑设备、 虚拟设备、日志设备及其它类型逻辑设备的描述。表102的每一项106-108对应于另一包含每一逻辑设备的信息的 表。例如,项107可对应于表112。表112包括包含内务操作信息的 首部。表112还包括用于逻辑设备的每一柱面的项116-118。在于此 公开的实施例中,逻辑设备可包含任何数量的柱面,其取决于逻辑设 备被怎样初始化。然而,在其它实施例中,逻辑设备包含固定数量的 柱面。表112被示为包括用于额外磁道字节的部分119。额外磁道字节 119以本文别处描述的方式连同日志设备一起使用。在于此公开的实 施例中,对于日志设备的每一磁道有八个额外磁道字节。对于不是日 志设备的设备,可不使用额外磁道字节119。每一柱面项116-118对应于磁道表。例如,项117可对应于磁道 表122,其包括具有内务操作信息的首部124。磁道表122还包括用 于每一磁道的项126-128。在于此公开的实施例中,对于每一柱面有 十五磁道。然而,对于其它实施例,每一柱面具有不同数量的磁道甚 至每一柱面具有可变数量的磁道是可能的。对于标准逻辑设备和日志 设备,每一项126-128中的信息包括(或直接或间接)指向存储设备 24(或者远程存储设备,如果系统那样配置的话)的磁盘驱动器42-44 之一上的物理地址的指针。因而,磁道表122可用于将对应于表102、112、 122的逻辑设备逻辑地址映射到存储设备24的磁盘驱动器42-44 上的物理地址。对于虚拟设备,表122的每一项126-128指向相应标 准逻辑设备或相应日志设备的磁道。然而,对于其它实施例,使用不 同的机制是可能的,其中表102、 112、 122仅用于包含数据磁道的标 准逻辑设备,而另一类型的表如简单的磁道阵列由虚拟设备用于将虚 拟设备的磁道映射到对应标准逻辑设备或日志设备的磁道。日志设备的每一磁道或空闲,意味着其未被虚拟设备使用,或已 被分配,意味着磁道被一个或多个虚拟设备中的表项指向。在于此公 开的实施例中,日志设备的磁道通过首先创建日志设备的所有空闲磁 道的双向链表进行管理。双向链表的指针由表112的额外磁道字节 119提供,使得日志设备的额外磁道字节119对日志设备的每一磁道 包含八个字节。对于日志设备的每一空闲磁道,额外的八个字节包括 指向日志设备的下一空闲磁道的向前指针及指向日志设备的前一空 闲磁道的向后指针。以这种方式使用双向链表有助于访问日志设备的 空闲磁道。此外,如果日志设备的磁道已被分配(即已由一个或多个虚拟设 备使用),该磁道的相应额外磁道字节119可用于指回标准逻辑设备 的相应磁道。因而,当在虚拟设备己建立之后对标准逻辑设备执行写 时,标准逻辑设备的数据被复制到日志设备的新磁道,对应于日志设 备的新磁道的额外磁道字节被使得指回所述数据来自其的标准逻辑 设备的磁道。使日志设备的每一磁道指回标准逻辑设备的相应磁道是 有用的,例如,在数据恢复情形这非常有用。此外,对于在此公开的实施例,对于已分配磁道每磁道额外八个 字节的指针也与数据一起保存。S卩,当日志设备的特定磁道被分配时, 指回到标准逻辑设备的相应磁道的指针与额外磁道字节119 一起保 存,此外,指针与磁道数据本身一起保存在日志设备的磁道上。对于 CKD格式化的磁道,额外八个字节可保存在块零中。对于FBA格式化 的磁道,额外八个字节可保存在追加在磁道末端上的另外的块中。在 于此公开的实施例中,块为512个字节,FBA磁道包含40个块,当追加另外的块时其增加到41。不同的磁道格式已被公开,例如,已在授予Yanai等的美国专利5, 206, 939中公开,其通过引用组合于此。图6的表102、 112、 122可保存在存储设备24的全局存储器46 中。此外,对应于由特定主机访问的设备的表可保存在HA 32-36中 的相应HA的局部存储器中。此外,RA 48和/或DA 36-38也可使用 和局部保存表102、 112、 122的部分。参考图7,流程图140示出了当主机从对应于可通过虚拟设备访 问的磁道的设备表读数据时执行的步骤。即,流程图140示出获得关 于由虚拟设备的表项指向的磁道的信息。处理开始于测定步骤142,确定感兴趣的磁道(即对应于被读表 项的磁道)是在标准逻辑设备上还是日志设备上。这通过访问虚拟设 备的设备表项并确定感兴趣的磁道的表项是指向标准逻辑设备还是 指向日志设备进行确定。如果在测定步骤142确定虚拟设备的表中的 指针指向标准逻辑设备,则控制从步骤142转到步骤148,读感兴趣 的表项。在步骤148之后,处理结束。如果在测定步骤142确定虚拟设备的设备表中感兴趣的磁道的 指针指向日志设备,则控制从步骤142转到步骤158,读感兴趣的日 志表项。在步骤158之后,处理结束。注意,在某些情形下,对数据的访问可由标志或锁控制,其防止 多个进程同时访问数据。这在设备表正被读或修改的情形时特别有 用。在此公开的系统可以预见用于控制多个进程对数据的访问的多种 机制中的任何一种,包括传统的软件和/或硬件锁的结合,也被称为 "标志"或"信号量"。在某些情形下,访问数据的进程可能需要等 待,直到另一进程释放该数据为止。在一实施例中,硬件锁控制对软 件锁(标志)的访问,使得进程首先获得硬件锁的控制、测试软件锁, 然后,如果软件锁清零,则所述进程置位软件锁然后释放硬件锁。如 果进程获得硬件锁并确定软件锁未清零,则所述进程释放硬件锁,使 得已置位软件锁的另一进程可在随后时间清零软件锁。进一步应注 意,在某些情形下,首先读对应于特定磁道的表项、将所述磁道读入高速缓存槽(如果所述磁道尚未在高速缓存中)、锁定高速缓存槽、 然后重读相应的表项是有用的。
参考图8,流程图170示出了连同向对应于标准逻辑设备或日志 设备的虚拟设备的设备表写信息执行的步骤。处理开始于第一步骤 172,确定对应于被写的设备表项的特定磁道是在标准逻辑设备上还 是在日志设备上。如果确定感兴趣的特定磁道在标准逻辑设备上,控
制从步骤172转到步骤178,对应于被写的设备表项的磁道被锁定。 在步骤178锁定所述磁道防止其它进程能够访问所述磁道,并在当前 进程正修改对应于所述磁道的设备表项时防止其它进程修改相应的 表项。在步骤178之后是步骤182,执行写操作。在步骤182之后是 步骤1S4,解锁所述磁道。在步骤184之后,处理结束。
如果在测定步骤172确定对应于正被修改的虚拟设备表项的磁 道指向日志设备,则控制从测定步骤172转到步骤194,日志设备对 应于正被写的设备表项的磁道被锁定。在步骤194之后是步骤196, 执行写操作。在步骤196之后是步骤198,解锁所述磁道。在步骤198 之后,处理结束。
参考图9,流程图210示出了连同修改对应于虚拟设备的设备表 执行的歩骤。这可与图8的流程图170形成对比,流程图170示出了 修改由用于虚拟设备的设备表的磁道的项指向的标准逻辑设备或日 志设备的设备表。在流程图210中,虚拟设备的设备表被修改,与标 准逻辑设备的设备表或日志设备的设备表相反。
处理开始于第一步骤212,确定对表的修改是否涉及建立虚拟设 备。如本文别处所述,建立虚拟设备包括在创建虚拟设备之后使虚拟 设备可被主机访问。建立虚拟设备使得虚拟设备与标准逻辑设备相关 联(因而代表标准逻辑设备在建立时的时间点副本)。在与标准逻辑 设备关联之前,虚拟设备不被建立且不可被主机访问。在建立之后, 虚拟设备可被主机访问。如果在步骤212确定对表的修改涉及建立虚拟设备,则控制从歩
骤212转到步骤214,置位虚拟设备的设备锁以防止其它进程访问该
表。设备锁可与高速缓存槽锁比较,如本文别处所述。
在步骤214之后是步骤216,虚拟设备表的指针被使得指向标准 逻辑设备的磁道,并置位标准逻辑设备的对应于所建立虚拟设备的每 一磁道的保护位。在于此公开的实施例中,标准逻辑设备的每一磁道 具有16个可设为保护位的位,对标准逻辑设备建立的每一虚拟设备 l位。在一些实施例中,保护位可具有与虚拟设备无关的用处。建立 的新虚拟设备可在16位字段中被分配一新的位位置,同时对于标准 逻辑设备的每一磁道的位均可被置位。如本文别处所详述的,保护位 被置位表明需要进行特殊处理以使建立的虚拟设备适应标准逻辑设 备,保护位置位后随后即对标准逻辑设备进行写。所述特殊处理将在 本文别处详细描述。同样在步骤216,虚拟设备的设备表的磁道项全 被修改以指向标准逻辑设备的相应磁道。因而,当虚拟设备被首先建 立时,虚拟设备的设备表的所有指针均指向标准逻辑设备的磁道。
在步骤216之后是步骤217,虚拟设备被设为就绪状态,因而使 虚拟设备可由主机访问。在步骤217之后是步骤218,解锁虚拟设备, 因而使能由其它进程访问。在步骤218之后,处理结束。
如果在测定步骤212确定未正建立虚拟设备(即正执行一些其它 操作),则控制从测定步骤212转到步骤222,锁定对应于正被修改 的虚拟设备的设备表的项的磁道。注意,在步骤222锁定的磁道或可 是标准逻辑设备上的磁道(如果虚拟设备的设备表中的感兴趣的项指 向标准逻辑设备),或可是日志设备的磁道(如果感兴趣的项指向日 志设备)。在步骤222之后是步骤224,修改虚拟设备的设备表。在 步骤224之后是步骤226,解锁所述磁道。在步骤226之后,处理结 束。
参考图10,流程图230示出了连同操作日志设备的磁道执行的 步骤。如上所述,日志设备的磁道通过创建日志设备的空闲磁道(即 可用于接受新数据的磁道)的双向链表进行维护。因而,如果一个或多个磁道需要连同相应的虚拟设备一起使用,从所述双向链表获得空 闲磁道,其以传统方式进行修改以表明供虚拟设备使用的这些磁道不 再空闲。相反,如果由一个或多个虚拟设备使用的一个或多个磁道不 再被需要,则按传统方式将这些磁道返回到双向链表,以指明这些磁 道空闲。图10的流程图230示出了控制操作所述磁道的多个进程对 所述磁道(及磁道指针)的访问所执行的步骤。
处理开始于测定步骤232,确定所执行的操作是否仅修改空闲列
表上的磁道。注意,例如,通过将空闲磁道从列表的一部分转移到另 一部分或从一个空闲列表转移到另一空闲列表(多个空闲列表情况) 而仅修改空闲列表上的磁道不涉及对应于任何数据的磁道的修改。如
果在测定步骤232确定所执行的修改不仅仅涉及空闲列表上的磁道, 则控制从步骤232转到步骤234,锁定所述磁道以防止由其它进程访 问。
在步骤234之后,或者如果未到达步骤234则在步骤232之后, 是测定步骤236,确定所述操作是否仅涉及已分配的磁道。对于任何 仅涉及已分配的磁道的操作,不必锁定日志设备空闲磁道列表。如果 在步骤236确定所执行的操作不仅仅操作己分配的磁道,则控制从步 骤236转到步骤238,锁定日志设备空闲磁道列表以防止由其它进程 访问。在步骤238之后,或者如果步骤238未被执行则在步骤236之 后,是步骤242,执行修改。
在步骤242之后是测定步骤244,确定所述操作是否仅涉及已分 配的磁道。如果在测定步骤244确定所执行的修改不仅仅涉及已分配 的磁道,则控制从步骤244转到步骤246,解锁日志设备空闲列表。 在步骤246之后,或者如果未到达步骤246则在步骤244之后,是测 定步骤248,确定所执行的操作是否仅修改空闲列表上的磁道。如果 在步骤248确定所执行的操作仅修改空闲列表上的磁道,则控制从歩 骤248转到步骤252,解锁所述磁道或在步骤234锁定的磁道。在歩 骤252之后,或者如果步骤252未被执行则在步骤248之后,处理结 束。参考图11,流程图280示出了连同从虚拟设备读数据执行的步
骤。处理开始于测定步骤282,确定感兴趣的虚拟设备磁道的设备表 项是指向标准逻辑设备还是指向日志设备。如果在测定步骤282确定 所述表指向标准逻辑设备,则控制从步骤282转到步骤284,从标准 逻辑设备读所述磁道。在步骤284之后,处理结束。或者,如果在测 定步骤282确定虚拟设备的设备表指向日志设备,则控制从歩骤282 转到步骤286,从日志设备读感兴趣的磁道。在歩骤286之后,处理结束。
注意,在某些情形下,可能在测定步骤282之前确定被读的感兴 趣的磁道已经在高速缓存存储器(全局存储器)中。在这种情况下, 可从所述高速缓存存储器获得所述磁道,而无须执行步骤282、 284、 286。
参考图12,流程图300示出了在向先前已对其建立虚拟设备的 标准逻辑设备的磁道进行写时由M执行的步骤。处理开始于第一步 骤302,确定标准逻辑设备上的被写磁道的任何保护位是否己被置位。 如果在测定步骤302确定保护位未被置位,则控制从步骤302转到步 骤304,执行正常的写操作。即,在步骤304,数据按传统方式写到 标准逻辑设备,而不管先前已对标准逻辑设备建立的虚拟设备的存 在。在步骤304之后,处理结束。
如果在测定步骤302确定一个或多个保护位已在标准逻辑设备 的被写磁道上置位,控制从步骤302转到步骤306,获取日志设备的 空闲磁道。需要日志设备的空闲磁道以从标准逻辑设备的磁道复制数 据。同样,如本文别处所详述的,日志设备的空闲磁道可使用空闲磁 道的双向链表进行管理。因而,在步骤306,可通过遍历日志设备的 空闲磁道列表并适当修改指针以移动空闲磁道之一而获取空闲磁道。
在步骤306之后是步骤308,对于对应于在测定步骤302已被确 定置位的保护位的每一虚拟设备,虚拟设备的指针,其初始指向标准 逻辑设备上的被写磁道,在步骤308被修改为指向在步骤306获得的 日志设备空闲磁道。如上所述,可能对标准逻辑设备建立一个以上虚拟设备。对于已对特定标准逻辑设备建立的每一虚拟设备,对于标准 逻辑设备的每一磁道,特定保护位将被置位。因而,在步骤308,对
于对应于在步骤302检测的置位保护位的所有虚拟设备,改变磁道指 针。虚拟设备的设备表中的磁道指针被修改为指向在步骤306获得的 新的磁道。
在步骤308之后是步骤312,数据被使得从标准逻辑设备复制到 在步骤306获得的日志设备上的新磁道。在于此公开的实施例中,通
过将数据从磁盘存储器移到存储设备的全局存储器(例如移入高速缓 存槽)、然后置位写未决指示符以使数据复制到在步骤306获得的曰 志设备的磁道而复制数据。步骤312表示从标准逻辑设备的磁道复制 数据,所述数据被写到在步骤306获得的新的日志设备磁道。由于在 步骤308修改所有指针,在磁道被写之前已对标准逻辑设备建立的任 何虚拟设备现在指向旧数据(即,在建立虚拟设备时存在于标准逻辑 设备的磁道上的数据)。还应注意,在复制所述磁道时,标准逻辑设 备磁道的保护位被复制到用于日志设备上的磁道的虚拟设备映射位, 这将在本文别处详细描述。
在步骤312之后是步骤314,在步骤306获得的日志设备磁道被
修改,使得表中的额外字节(本文别处描述)被使得指回到标准逻辑 设备的被写磁道。使日志设备的磁道指向数据从其提供的标准逻辑设 备的相应磁道在许多情况下是有用的。例如,在数据恢复时非常有用。 在步骤314之后是步骤316,被写标准逻辑设备的磁道的保护位被清 零。在步骤316之后是步骤318,向HA发送状态。在步骤318之后, 处理结束。
注意, 一旦HA接收到状态,HA可执行正常写操作,在这种情况 下,在测定步骤302,保护位将不被置位,因为所述位在步骤316被 清零。执行写操作的HA看见在步骤302置位的保护位并将保护请求 发送给适当的DA。之后,HA可与DA断开连接并等待状态从DA到达, 所述状态表明可执行正常写。在HA与DA断开连接并等待状态的同时, DA可执行在流程图300中公开的步骤。这将在下面详细描述。参考图13,流程图320示出了在向已对其建立一个或多个虚拟
设备的标准逻辑设备进行写时由HA执行的步骤。处理开始于第一测 定步骤322,对标准逻辑设备的被写磁道,确定任何保护位是否置位。 如果在测定步骤322确定没有保护位被置位,则控制从步骤322转到 步骤324,执行正常的写。在步骤324之后,处理结束。
如果在测定步骤322确定对于标准逻辑设备的被写磁道一个或 多个保护位被置位,控制从步骤322转到步骤326, HA向DA发送请 求,所述请求表明,对所述磁道,保护位被置位。当DA接收到在步 骤326发送的请求时,DA执行在图12的流程图300中提出的操作, 如上所述。在步骤326之后是步骤328, HA断开与DA的连接,以使 (可能无关的)操作能由其它进程和/或其它HA用所述DA执行。
在步骤328之后是步骤332, HA等待DA执行在图12的流程图 300中提出的操作并向HA发送状态,该状态表明适当的步骤已被执 行以处理置位保护位。在步骤332之后,处理转回到步骤322,再次 测试标准逻辑设备的磁道的保护位。注意,在第二次重复执行时,预 期标准逻辑设备的被写磁道的保护位已在步骤322清零,因为DA在 执行流程图300的步骤时已清零保护位。当然,总是可能在DA清零 保护位和再次执行步骤322之间对标准逻辑设备建立新的虚拟设备。 然而,通常预计,对于标准逻辑设备的特定磁道,步骤322的第二次 重复执行将确定所有保护位清零,及控制将从步骤322转到步骤324 以执行正常的写。
参考图14,流程图340示出了连同向虚拟设备写执行的步骤。 流程图340代表HA和DA执行的步骤,因而可被提供为两个流程图, 类似于图12的流程图300和图13的流程图320。然而,本领域一般 技术人员应当理解,流程图340可代表与流程图300、 320中提出的 步骤类似并在说明书的相应部分描述的那些步骤的分支。
处理开始于第一步骤342,确定虚拟设备是否指向标准逻辑设备。 如果是,则控制从测定步骤342转到步骤344,获取日志设备的空闲 磁道。在步骤344之后是步骤346,来自对应于被写磁道的标准逻辑设备的数据被使得从标准逻辑设备复制到在步骤344获得的日志设备的磁道。在步骤346之后是步骤348,所述磁道的虚拟设备指针被 调整为指向在步骤344获得的磁道。在步骤348之后是步骤352,在 标准逻辑设备的磁道数据中对应于虚拟设备的保护位被清零,因而表 明当向标准逻辑设备的磁道进行写时不需要代表虚拟设备的特殊处 理。在步骤352之后是步骤354,执行写。在步骤354,将要写的数 据可以是被写到在步骤344获得的磁道或磁道的一部分。在步骤354 之后,处理结束。如果数据对应于整个磁道,则可能排除步骤346, 这将数据从标准逻辑设备的磁道复制到新的日志设备磁道,因为在步 骤354写整个磁道的数据将盖写在步骤346复制的所有数据。如果在测定步骤342确定被写的虚拟设备磁道的指针未指向标 准逻辑设备,则控制从步骤342转到测定步骤356,确定是否已对标 准逻辑设备建立一个以上虚拟设备。如果否,则控制从步骤356转到 步骤358,对日志设备的磁道执行正常写操作。如果在测定步骤356 确定已对标准逻辑设备建立一个以上虚拟设备,则控制从步骤356转 到步骤362,从日志设备获取空闲磁道。在步骤362之后是步骤364,对应于被写虚拟设备磁道的数据被 复制到在步骤362获得的磁道。在步骤364之后是步骤366,虚拟设 备指针被调整为指向新的磁道。在一实施例中,正被写的虚拟设备的 指针被使得指向新的磁道。或者,不改变正被写的虚拟设备的指针也 是可能的,而是在步骤366调整指向所述磁道的所有其它虚拟设备的 所有指针。在步骤366之后是步骤368,修改日志设备磁道的虚拟设备映射 位。对于日志设备磁道,虚拟设备映射位可用于指明哪些虚拟设备指 向每一磁道,在一实施例中,有16个虚拟设备映射位且每一位对应 于特定虚拟设备。因而,在步骤356的测试可检査磁道的虚拟设备映 射位。在步骤368之后是步骤369,执行写。注意,是对在步骤362获 得的磁道执行写还是对被写虚拟设备初始指向的磁道执行写取决于在步骤366怎样调整指针。然而,在所有情况下,数据被写到虚拟设备指向的磁道,其中数据正被写到所述虚拟设备。在步骤369之后,处理结束。参考图15,流程图370示出了删除(即消除)虚拟设备所执行 的步骤。 一旦虚拟设备已被建立并用于其预定目的,删除虚拟设备可 能是符合需要的。处理开始于第一步骤372,指针被设为指向虚拟设 备的第一磁道。通过检查对应于虚拟设备的每一磁道删除虚拟设备。在步骤372之后是步骤374,确定正被检査的虚拟设备磁道是否 指向标准逻辑设备。如果是,则控制从步骤374转到步骤376,清零 对应于所删除虚拟设备的标准逻辑设备磁道上的保护位。在步骤376 之后是步骤378,为了继续通过检查下一磁道进行处理,指针指向虚 拟设备的下一磁道。在步骤378之后是步骤382,确定处理是否结束 (即虚拟设备的所有磁道均已被处理)。如果否,则控制从步骤382 转回到测定步骤374,如上所述。如果在测定步骤374确定被检査的虚拟设备磁道不指向标准逻 辑设备,则控制从步骤374转到步骤384,对应于所删除虚拟设备的 日志设备磁道上的虚拟设备映射位被清零。日志设备的每一磁道可具 有一组虚拟设备映射位,其指明哪些虚拟设备使用日志设备磁道。因 而,在步骤384,对应于所删除虚拟设备的虚拟设备映射位被清零。在步骤384之后是测定步骤386,确定在步骤384清零的所述位 是否是为所述磁道设定的最后一虚拟设备映射位。换言之,测定歩骤 386确定是否有其它虚拟设备正使用日志设备上的磁道。如果在测定 步骤386确定最后一虚拟设备映射位已在步骤384清零(因而没有其 它虚拟设备使用所述磁道),则控制从步骤386转到歩骤388,曰志 设备的磁道被返回到日志设备空闲磁道列表,如本文别处所述。在步 骤388之后,或者如果确定在步骤384清零的位不是日志设备磁道的 最后一虚拟设备映射位则在步骤386之后,是步骤378,如上所述, 指向虚拟设备的下一磁道以进行随后的检査。 一旦对应于虚拟设备的 所有磁道均已被处理,与虚拟设备相关联的表及其它数据结构也可被删除,尽管在一些实施例中,来自所述虚拟设备的表和其它数据结构 可被保留,只要在虚拟设备去建立之后所述虚拟设备不可由主机使用 即可。在一些情形下,提供连续或近乎连续的数据备份的机制是符合需 要的。当然,上述系统可简单地通过在每一时间增量T创建新的虚拟 设备而提供该功能,其中T是相当短的时间量。类似地,在每次写数 据时创建新的虚拟设备也是可能的。然而,创建大量新的虚拟设备将 耗费大量开销及存储空间,这不合需要。参考图16,示图400示出了与上面结合图1-15所述的虚拟设备 类似的连续备份(CB)虚拟设备402,但其在多个方面不同(下述), 这有助于数据的连续或近乎连续备份。CB虚拟设备402包含指向标 准逻辑设备404的多个磁道的指针,使得对于任何特定磁道,如果 CB虚拟设备402指向标准逻辑设备404的相应磁道,则所述相应磁 道自CB虚拟设备402创建以来尚未改变。在该方面,CB虚拟设备402 与上面结合图卜15所述的虚拟设备类似。注意,任何分区,包括磁 道,均可用于实施在此描述的系统。因而,应当理解,在下面的讨论 中,尽管提及磁道,具有另外大小包括可变大小的其它数据单位均可 使用。CB虚拟设备402还包含指向日志设备406的多个相应磁道的指 针。日志设备406包含自CB虚拟设备402创建以来已改变的磁道的 数据。然而,连同日志设备406使用的内容和数据结构不同于上面结 合图1-15所述的那些内容和数据结构。日志设备406将在下面详细 描述。示图400还示出了 1/0模块408,其处理来自及去往其它模块的 输入和输出处理,如图1中所示的DA 38a-38c和HA 28a-28c做出的 输入和输出请求。I/O模块408的操作将在下文中详细描述。I/O模块408被提供以来自循环计数器412和/或计时器414的 数据。循环计数器412和/或计时器414的使用将在下文中详细描述。 可选地,循环计数器412和/或计时器414可由外部进程416控制,所述进程可用于同步多个存储设备(即一致组)的存储。这同样在下 文中详细描述。参考图17,示出了可用于将数据保存在日志设备406中的数据结构450。数据结构450包括设备信息字段452。设备信息字段包括 设备信息如设备标识符、柱面、磁头、及长度标识符和磁道ID表。 当然,对于不同的实施例,在设备信息字段452中可提供不同的设备{曰息。数据结构450还可包括计时器字段454和/或循环计数器字段 456。计时器字段454可对应于上面结合图16的示图400所述的计时 器数据元414。类似地,循环计数器字段456可对应于图16的示图 400的循环计数器数据元412。在字段454、 456中提供的值为相应数 据元412、 414在对应于数据结构450的每一数据例图被创建时的值。 有效地,这是时间戳。数据字段462对应于保存在日志设备406上的特定数据(用户写 的数据)。在这里的实施例中,数据字段462可具有可变的大小,使 得随每一数据元提供的数据量变化。在这里的实施例中,在数据字段 462中提供的数据不跨多个磁道,因而不比单一磁道大。数据结构450 还包括向前指针字段464和向后指针字段466,用于创建数据元的双 向链表,如本文别处所述。参考图18,日志设备406被示为包括多个双向链表482-484。每 一链表482-484包含一个或多个数据元,每一数据元具有与图17中 所示及上面所述相似的结构。在这里的实施例中,每一链表482-484 对应于标准逻辑设备的特定磁道(因而对应于CB虚拟设备的特定磁 道)。当然,也可使用其它数据结构,如单向链表。在自创建CB虚 拟设备402之后尚没有数据被写到特定磁道的情况下,没有相应的链 表保存在日志设备406中。否则,CB虚拟设备402中的适当表项指 向每一链表482-484的第一数据元。在这里的实施例中,每一链表 482-484的第一数据元是最近写的数据元,下一数据元是紧接最近写 的数据元,依此类推。当然,任何适当的数据元安排均可使用。如本29文别处所提及的,每一链表482-484的每一数据元可包含部分磁道的 数据。因而, 一个或多个链表482-484不包含完整磁道的数据是可能 的。参考图19,流程图500示出了连同根据在此描述的系统的数据 写操作执行的步骤。处理开始于第一测定步骤502,确定被写数据对 于特定磁道是否为第一数据(g卩,自开始连续备份以来先前未执行过 写)。如果被写数据不是第一写,则控制从步骤502转到步骤504, 确定循环计数器412的当前值是否等于数据正被添加到其的链表的 最近数据元的循环计数器值。在这里的实施例中,CB虚拟设备402 指向最近数据元。因而,对于向特定磁道进行写,检査日志设备406 中相应链表482-484中的第一数据元以看循环计数器字段456是否包 含等于循环计数器数据元412中保存的值的值。在这里的实施例中, 在同一循环计数器值期间发生的写操作被视为同时发生。因此,连续 备份的间隔是循环计数器更新之间的时间。更新循环计数器将在下文 中详细描述。如果在测定步骤504确定循环计数器的当前值等于随数据正被 写到其的那一链表482-484的最近数据元保存的循环计数器值,则控 制从步骤504转到测定步骤506,确定当前执行的写是否包含将填充 在最近数据元的数据字段462内的数据(即,第二写操作的数据是否 是第一数据写操作的数据的子集)。如本文别处所述,数据字段462 长度可变,并可以也可不仅仅是磁道的一部分。因而,在步骤506的 测试,确定当前所写的数据是否可盖写最近数据元的数据字段462。 如果是,则控制从测定步骤506转到步骤507,数据被盖写。在步骤 507之后是步骤508,设备信息字段被更新(例如磁道ID表被更新) 以反映步骤507的盖写。在步骤508之后,处理结束。如果在测定步骤506确定当前所写数据不填充在所述磁道的最 近数据元的数据字段462内,或者如果在测定步骤504确定循环计数 器的当前值不等于最近数据元的循环计数器字段456中的值,则控制 转到步骤512,分配新的数据元。在步骤512分配新的数据元包括为数据结构450获得足够的空间。注意,数据结构450的大小可以是被写入数据字段462的数据量的函数。在这里的实施例中,这与图10 的分配分案不类似,其假设数据大小固定。另一方面,图10的分案 适于适应连同步骤512使用的可变数据大小,但在一些情形下,在对 同一磁道的在前分配不足够大时其可用于日志设备上分配新的磁道 以保存数据。在步骤512之后是步骤514,新分配的数据元通过使数据写到字 段462及为设备信息字段452、计时器字段454和循环计数器字段456 提供信息而被填满。在步骤514之后是步骤516,向前指针字段464 被设为指向链表482-484之一的第一数据元(或者,如果链表为空则 为空值),向后指针字段466被设为等于空值。在步骤516之后是步 骤518,适当调整其它指针(例如,链表的第一数据元的向后指针字 段466被设为指向新分配的数据元)。在步骤518之后是步骤522, 来自CB虚拟设备402的适当的表被设为指向新分配的数据元。在步 骤522之后,处理结束。如果在测定步骤502确定被写数据是自开始连续备份以来所写 的第一数据,则控制从步骤502转到步骤524,为整个磁道的数据分 配空间。在这里的实施例中,对标准逻辑设备404进行第一写使得整 个磁道的数据均被复制而不是仅仅复制对应于所述写的数据量,如在 步骤512、 514所进行的那样。在其它实施例中,可从标准逻辑设备 404复制不同的数据量,甚至在对特定磁道进行第一写时也可这样。 在步骤524之后是步骤526,复制整个磁道的数据。注意,在步骤526 复制的数据是标准逻辑设备404任何修改之前的数据。在步骤526之 后是如上所述的步骤512。值得注意的是,在图19的流程图500中图示的处理可在写已被 主机接受和确认之后进行。这样做使所述处理能在更方便的时间进行 (例如,在存储设备不太忙时)并通过使主机写能被立即确认而避免 任何明显的响应时间损失。参考图20,流程图540示出了连同读当前数据(即,读存储设 备当前状态中的数据)的读操作所执行的步骤。处理开始于第一步骤542,确定CB虚拟设备402是否指向标准逻辑设备404。如果是,则 控制从测定步骤542转到步骤544,标准逻辑设备用于取回所读数据。 在步骤544之后,处理结束。如果在测定步骤542确定CB虚拟设备402不指向标准逻辑设备 404,则控制从测定步骤542转到步骤546,用于迭代通过日志设备 406的链表的指针(迭代指针)被设为指向所处理列表(即,对应于 正从其读数据的磁道的列表)的第一数据元。在步骤546之后是步骤 548,来自迭代指针所指向数据元的数据用于填充变量或用于接受所 读数据的数据空间。注意,为了读数据,必须按相反的年代顺序处理 数据元,假定优先于更近的数据。由于链表482-484的数据元中的每 一个不必然包含整个磁道的数据,遍历多个数据元以构建连同读操作 请求的数据是必要的。在步骤548之后是测定步骤552,确定所有所请求的数据是否均 己被取回。如果是,则处理结束。否则,控制从测定步骤552转到歩 骤554,用于迭代通过链表数据元的指针被使得指向下一数据元(即 使用向前指针字段464)。在步骤554之后是测定步骤556,确定用 于迭代通过链表数据元的指针是否已通过链表的末端(即等于空值)。 如果否,则控制从测定步骤556转到步骤548以填充另外的数据,如 上所述。否则,控制从测定步骤556转到步骤558,以用来自底部磁 道的数据填充其余(缺失)数据,所述底部磁道在创建CB虚拟设备 402之后对标准逻辑设备404进行第一写时创建。使用步骤558的数 据意味着在创建CB虚拟设备402之后没有写相应的数据。在步骤558 之后,处理结束。参考图21,流程图570示出了连同从存储设备的在前状态(在 前时间)读数据以获得在特定时间(目标时间)存在的数据所执行的 步骤。在此描述的系统可提供连续或接近连续的数据备份,使得可读任何时间点(自启动系统之后)的数据。流程图570图示的步骤对应 于读(恢复) 一直到特定时间点所写的数据。处理开始于第一测定步骤572,确定正从其读数据的磁道在CB 虚拟设备402中是否具有指向标准逻辑设备404的项。如本文别处所 述,如果特定磁道的项指向标准逻辑设备404,则自启动系统以来特 定磁道尚未被写。如果在测定步骤572确定所请求的数据不在标准逻 辑设备404上(即,CB虚拟设备402中的相应项不指向标准逻辑设 备404),则控制从测定步骤572转到步骤574,用于迭代通过链表 482-484之一的数据元的指针(即迭代指针)被设为指在链表的第一 数据元。在步骤574之后是测定歩骤576,确定迭代指针所指向的数据元 是否对应于在目标时间之后所写的数据。注意,计时器字段454或者 循环计数器字段456均可用于指定感兴趣的特定时间及确定当前数 据是否在目标时间之后。计时器和循环计数器的使用将在下文中详细 描述。如果在测定步骤576确定由用于迭代通过链表数据元的指针指 向的数据元对应于目标时间之后写的数据,则控制从测定步骤576转 到步骤578,迭代指针被使得指向下一数据元。在歩骤578之后是测 定步骤582,确定迭代指针是否指向链表末端。如果否,则控制从测 定步骤582转回到测定步骤576,如上所述。如果在测定步骤582确定迭代指针指向数据元列表的末端(即指 向空值),则控制从测定步骤582转到步骤584,标准逻辑设备404 被用于提供所请求的数据。在这种情形下,所有写操作均在目标时间 之后发生,使得所想要的数据保存在标准逻辑设备404上。在步骤 584之后,处理结束。注意,如果确定CB虚拟设备402中的项指向 标准逻辑设备404,其表明自启动系统以来未对特定磁道进行写,则 也可从测定步骤572到达步骤584。如果在测定步骤576确定迭代指针指向不是在目标时间之后的 数据,则控制从测定步骤576转到步骤588,来自迭代指针所指向数据元的数据用于填充变量或用于接受所读数据的数据空间。注意,为 了读数据,必须按相反的年代顺序处理数据元,假定优先于更近的数据。然而,由于链表482-484的数据元中的每一个不必然包含整个磁道的数据,遍历多个数据元以构建连同读操作请求的数据是必要的。在步骤588之后是测定步骤592,确定是否所有所请求数据均已 被取回。如果是,则处理结束。否则,控制从测定步骤592转到歩骤 594,迭代指针被使得指向下一数据元(即使用向前指针字段464)。 在步骤594之后是测定步骤596,确定迭代指针是否已通过链表的末 端(即等于空值)。如果否,则控制从测定步骤596转到步骤588以 填充另外的数据,如上所述。否则,控制从测定步骤596转到步骤 598,以用来自底部磁道的数据填充其余(缺失)数据,所述底部磁 道在创建CB虚拟设备402之后对标准逻辑设备404进行第一写时创 建。使用步骤598的数据意味着在创建CB虚拟设备402之后没有写 相应的数据。在步骤598之后,处理结束。参考图22,流程图610示出了将数据还原到其在特定感兴趣时 间(目标时间)的状态、向所还原的数据写新数据、甚或插入新数据 就像其已在先前时间点被写一样所执行的步骤。处理开始于第一步骤 612,用于迭代通过所有磁道的指针(磁道迭代指针)被设为指向CB 虚拟设备402的第一磁道。在步骤612之后是测定步骤614,确定CB 虚拟设备402的相应项是否指向标准逻辑设备404。如果否,则控制 从测定步骤614转到步骤616,用于迭代通过日志设备406的相应数 据元的指针(数据元迭代指针)被设为指向对应于磁道迭代指针所指 向的特定磁道的链表的最后(最近)数据元。在步骤616之后是测定步骤618,确定数据元迭代指针是否指向 具有在目标时间(所需恢复时间)之后的时间的数据元。如果是,则 控制从测定步骤618转到步骤622,数据元迭代指针指向的数据元被 处置(即数据元使用的内存被释放以按与所使用内存管理分案一致的 方式使用)。在步骤622之后是步骤624,调整适当的指针。在步骤 624,数据元迭代指针被使得指向下一最近数据元。此外,如果数据在步骤622被处置,则CB虚拟设备402、日志设备406等的数据结构使用的指针也可被调整。然而,如下面更详细论述的,对于备选实 施例,不处置任何数据。在步骤624之后,控制转回到步骤618,进 行下一迭代。注意,目标时间可根据循环计数器的特定值或计时器的 特定值进行表示。当数据元迭代指针指向具有在所需恢复时间之后的时间的数据 元时,备选实施例由从步骤618直接到歩骤624的通路625图示。在 该实施例中,在恢复时间之后的数据不被丢弃。如果在测定步骤618确定数据元迭代指针所指向的数据元具有 与其关联的、不在目标时间之后的时间,则控制从测定步骤618转到 步骤626,对应于将被写回到标准逻辑设备404的数据累积数据以使 标准逻辑设备404还原到其在目标时间的状态。在步骤626累积数据 可包括以将被写的新数据开始(如果有),然后例如使用与图21的 流程图570所示类似的处理填充任何间隙(如,磁道的未正用新数据 写的部分)。在步骤626之后是步骤627,在步骤626累积的数据被 写到标准逻辑设备404。在步骤627的写可以是常规写或连续备份写。 在步骤627之后是步骤628,如上所述。注意, 一旦CB虚拟设备402已被恢复到特定状态,则可能继续 操作,包括向系统提供新的数据写。在一些情形下,在特定目标时间 插入新数据(写新数据)或从特定目标时间删除数据是符合需要的。 注意,这两个操作可按使用户能插入数据、测试其结果、随后删除所 插入数据的方式一起使用。例如,用户可能在下午5点发现数据库数 据不一致,并可能试图通过模拟在下午3点的写另外的数据(或不同 数据)来解决不一致问题。然而,如果其并没有解决问题,则用户可 能希望撤消所模拟的写并尝试其它方式。当然,在不同时间点插入和 删除数据的能力可具有任何数量的用途。参考图23,流程图650示出了在特定时间点插入新数据(即, 写数据就像其在当前时间之前和随后的数据写操作之前的特定目标 时间发生一样)或从特定目标时间删除数据所执行的步骤。流程图650的处理开始于第一测定步骤652,确定CB虚拟设备402的磁道的 项是否指向标准逻辑设备404。如果是,则控制从测定步骤652转到 测定步骤653,确定是否正执行数据插入。如果是,则控制从歩骤653 转到步骤654,执行正常的写操作。注意,在可能删除数据的情况下, 如果CB虚拟设备402指向标准逻辑设备404,则没有数据将要删除。 在步骤654之后,处理结束。如果在测定步骤652确定CB虚拟设备402的磁道不指向标准逻 辑设备404,则控制从测定步骤652转到步骤656,数据元迭代指针 被使得指向对应于所述磁道的数据元链表中的第一数据元。在步骤 656之后是测定步骤658,确定数据元迭代指针是否指过链表末端。 如果否,则控制从测定步骤658转到测定步骤662,确定数据元迭代 指针是否指向具有与其关联的、在目标时间之后的时间的数据元。如 果是,则控制从测定步骤662转到步骤664,数据元迭代指针被使得 指向下一数据元。在步骤664之后,控制转回到测定步骤658,如上 所述。如果在测定步骤658确定数据元迭代指针指过链表末端,或者如 果在测定步骤662确定数据元迭代指针指向具有与其关联的、不在目 标时间之后的时间的数据元,则控制转到步骤666,添加对应于将要 插入的数据的新数据元或者删除所指向的数据元。在其它实施例中, 将要删除的数据元可被特别标记(如,在插入时)或者有多种技术中 的任一技术用于识别将被删除的数据元。在步骤666之后是步骤668,调整链表的指针以适应新数据元的 添加或一个或多个数据元的删除。在步骤668之后,处理结束。注意,在删除数据元或添加多个数据元的情况下,可能反复执行 图23的流程图650所示的部分或全部步骤。例如,为删除具有特定 特征或标记的所有数据例图,对每一感兴趣的磁道均可执行流程图 650的步骤。参考图24,流程图680示出了在标准逻辑设备404正被返回到 对应于较早时间点的状态的同时从标准逻辑设备404进行读或向标准逻辑设备进行写所执行的步骤。在一些实施例中,在正执行像图 22的流程图610所示的恢复操作时可能暂停所有I/O操作,如上所述。然而,在其它情况下,暂停i/o操作可能不可接受,在必要的情况下,在正执行恢复时使能i/o操作。流程图680的处理开始于测定步骤682,确定所访问磁道是否需 要被恢复。在一些情形下,所访问磁道可能已经被恢复或者可能由于 磁道从未被修改而不需要恢复。在任何情况下,如果在测定步骤682 确定所访问磁道需要被恢复(即磁道被修改但尚未被恢复),则控制 从步骤682转到步骤684,执行该磁道的恢复操作。在步骤684执行 的恢复操作与上面连同图22的流程图610所述的恢复操作类似。在 步骤684之后,或者如果不需要恢复而在步骤682之后,是步骤686, 对标准逻辑设备的(现在恢复的)磁道执行正常的读或写操作。在步 骤686之后,处理结束。参考图25,示图700示出了连接到图16的示图400中所示的外 部进程的多个存储设备702-704。存储设备702-704可以是一致性组 的一部分。外部进程416可用于通过同步计时器414和/或循环计数 器412同步存储设备702-704。在这里的实施例中,同步可通过在更 新计时器414和/或循环计数器412之前暂时暂停写操作进行。或者, 外部进程416可在更新计时器414和/或循环计数器412之前等待对 存储设备702-704的写操作静止。注意,在此描述的系统的初始化可简单地通过创建CB虚拟设备 402、将循环计数器412和计时器414设为适当的初始值、及开始操 作进行。在使用外部进程416的实施例中,外部进程也可被初始化且 也可用于同时开始多个存储设备的连续备份操作。不同地,在不使用 外部进程416 (或等效功能)的实施例中,更新循环计数器412和/ 或计时器414可由任何适当的手段执行,包括由处理输入和输出操作 的进程408执行。在一些情形下,可能希望对不同于主机所写存储设备的存储设备 提供连续备份。主机可连接到第一 (本地)存储设备,第一存储设备可连接到第二 (远程)存储设备,所述第二存储设备保留在此描述的 连续备份数据。在一些实施例中,连续备份可被保留在本地存储设备 和远程存储设备上,而在其它实施例中,连续备份仅可保留在远程存 储设备上。参考图26,示图820示出了主机822、本地存储设备824和远程 存储设备826之间的关系。存储设备824、 826可与如上所述的存储 设备24类似。主机822从本地存储设备824读数据及向其写数据。 尽管示图820仅示出了一个主机822,本领域技术人员应当意识到, 多个主机也是可能的。来自本地存储设备824的数据可经其间的链路 转移到远程存储设备826。尽管只示出了一个链路,在存储设备824、 826之间具有另外的链路及在存储设备824、 826之一或二者与其它 存储设备(未示出)之间具有链路也是可能的。在这里的实施例中,从主机822写到本地存储设备824的数据使 用与在此连同图19-24所述类似的在远程存储设备826处的处理连续 备份在远程存储设备826。在一些实施例中,所述数据也可被连续备 份在本地存储设备824,而在其它实施例中,所述数据均被连续备份 在远程存储设备826。如本文别处详细描述的,主机822所写的数据 与本地存储设备824的特定循环号相关联。本地存储设备分配的循环 号对应于上面结合图17所述的循环计数器字段456。所述数据及与 其相关联的循环号被传给远程存储设备826,所述远程存储设备具有 用于连续备份的标准逻辑设备、CB虚拟设备及日志设备。使主机822 所写数据与循环号相关联及将数据从本地存储设备824转移到远程 存储设备826将在本文别处详细描述。参考图27,示图830示出了与本文别处所述的CB虚拟设备402 相似的连续备份(CB)虚拟设备832。 CB虚拟设备832包含指向标准逻 辑设备834的多个磁道的指针,使得对于任何特定磁道,如果CB虚 拟设备832指向标准逻辑设备834的相应磁道,则所述相应磁道自创 建CB虚拟设备832创建以来尚未改变。CB虚拟设备832还包含指向 日志设备836的多个相应磁道的指针。日志设备836包含自创建CB虚拟设备832以来已发生改变的磁道的数据并与上述日志设备406类 似。CB虚拟设备832、标准逻辑设备834和日志设备836全部均可提 供在远程存储设备826上。示图830还示出了处理远程存储设备826接收的数据的接收和存 储以进行连续备份存储的I/O模块838。 I/O模块838的操作与本文 别处所述的I/O模块408的操作相似。I/O模块838被提供以保存在 远程存储设备826的临时存储器842中的数据。临时存储器842例如 可使用远程存储设备826的易失性存储器和/或远程存储设备826的 专用磁盘存储空间实现。临时存储器842内的数据被从本地存储设备 824提供给远程存储设备826,如本文别处详细所述。下面的描述涉及在远程存储设备826上提供本地存储设备824上 的数据的连续备份。公开了不同方式的多个实施例,其中具有适当序 号(循环号)的数据可从本地存储设备824提供给远程存储设备826。参考图28,其示出了从主机822到本地存储设备824和远程存 储设备826的数据通路。如本地存储设备824的数据元851所示,从 主机822写到本地存储设备824的数据被本地保存。本地保存数据可 包括将数据直接写到本地存储设备824的逻辑存储设备和/或在本地 存储设备824处提供在此所述的连续备份功能。由主机822写到本地 存储设备824的数据还被本地存储设备824保留并由本地存储设备 824发送给远程存储设备826。在这里描述的系统中,主机822的每一数据写(如记录、多个记 录、磁道等的写)均被分配以序号(循环号)。序号可在与写相关联 的适当数据字段中提供。在图28中,主机822的写被示为被分配以 序号N。由主机822执行的、被分配以序号N的所有写均被收集在一 个数据块852中。数据块852代表由主机822执行的、几乎在同时发 生的多个单独的写。通常,本地存储设备824积聚一个序号的数据块,同时将先前积 聚的数据块(具有在前的序号)传输给远程存储设备826。因而,在 本地存储设备824正积聚来自主机822的、被分配以序号N的写的同39时,已发生的、在前序号(N_l)的写由本地存储设备824传输给远程存储设备826。数据块854代表来自主机822的、被分配以序号N 一l的、尚未传输给远程存储设备826的写。远程存储设备826从对应于被分配以序号N_ 1的写的数据块854 接收数据并为具有序号N—l的主机写建立新的数据块856。当远程 存储设备826已从数据块854接收所有的数据时,本地存储设备824 发送提交信息给远程存储设备826以提交被分配以N_l序号的所有 数据,其对应于数据块856。通常, 一旦对应于特定序号的数据块被 提交,该数据块可被写到远程存储设备826的逻辑存储设备和/或用 于在远程存储设备826处提供连续备份。这在图28中用数据块858 图示,其对应于被分配以序号N—2 (即,主机822到本地存储设备 824的写正使用的当前序号之前的第二个序号)的写。在图28中,数据块858被示出为正被写到数据元862,其代表 远程存储设备826的磁盘存储和/或连续备份。因而,远程存储设备 826正接收和积聚对应于序号N—1的数据块856,同时对应于在前序 号(N—2)的数据块858正被写到远程存储设备826的磁盘存储和/ 或用于远程连续备份,如数据元862所示。因此,在运行中,主机822写数据到本地存储设备824,该数据 被本地保存在数据元851中,可能在本地存储设备824被连续备份, 及被积聚在数据块852中。 一旦特定序号的所有数据均已被积聚(在 本文的其它地方描述),本地存储设备824递增序号。对应于小于当 前序号的数据块854的数据从本地存储设备824传输到远程存储设备 826。数据块858对应于已由本地存储设备824通过发送消息给远程 存储设备826进行提交的序号的数据。数据块858的数据被写到远程 存储设备826的磁盘存储和/或在远程存储设备826处被连续备份。参考图29,示图870示出了用于构建和保留数据块852、 854的 项目。提供在本地存储设备824上的标准逻辑设备872包含由主机 822写入的数据并对应于图28的数据元851。标准逻辑设备872包含 由主机822写到本地存储设备824的数据。两个指针的链表874、 876与标准逻辑设备872 —起使用。链表 874包含多个指针881-885,每一指针指向与本地存储设备824 —起 使用的数据部分。所述数据可被提供在本地存储设备824的高速缓存 器888中。类似地,链表876包含多个指针891-895,每一指针指向 高速缓存器888中提供的数据部分。高速缓存器888包含多个缓存槽 902-904,其可连同向标准逻辑设备872写一起使用,同时,可连同 链表874、 876 —起使用。链表874、 876中的每一个均可用于数据块852、 854之一,使得 链表874可对应于序号N的数据块852,而链表876可对应于序号N —1的数据块854。因而,当数据由主机822写到本地存储设备824 时,数据被提供给高速缓存器888,在某些情况下(在本文其它地方 描述),链表874的适当指针被产生。应注意,数据将不会从高速缓 存器888删除,直到数据被降级(destage)到标准逻辑设备872且 数据不再被链表874的任一指针881-885指向为止,如本文其它地方 所述。在这里的实施例中,链表874、 876之一被视为"活动态",而另 一个被视为"非活动态"。因此,当序号N为偶数时,链表874可以 是活动态,而链表876是非活动态。链表874、 876中的活动态链表 处理来自主机822的写,而非活动态链表对应于正从本地存储设备 824传输到远程存储设备826的数据。在由主机822写的数据通过使 用链表874、 876中的活动态链表进行积聚时(对于序号N),对应于 链表874、 876中的非活动态链表的数据(对于在前的序号N—1)被 从本地存储设备824传输到远程存储设备826。一旦对应于链表874、 876之一中的指针的特定指针的数据已被 传输给远程存储设备826,指针中的特定指针可从链表874、 876中 的适当链表去除。此外,假如槽中的数据不再因其它目的需要(如降 级到标准逻辑设备872),数据还可被标记以从高速缓存器888去除 (即槽可被返回到槽池以用于随后的、不相干的使用)。 一机制可被用于确保数据不被从高速缓存器888去除,直到所有设备不再使用该 数据为止。参考图30,槽920,与高速缓存器888的槽902-904之一类似, 包括首部922和数据924。首部922对应于系统用以管理槽920的内 务信息。数据924为正被(暂时)保存在槽920中的相应数据。首部 922中的信息包括指回到本地存储设备824的指针、时间标签等。首部922还包括与在此描述的系统一起使用的缓存标签926。在 这里的实施例中,缓存标签926为8个字节。其中两个字节为"密码", 其表明槽920是否正由在此描述的系统使用。在其它实施例中,密码 可以是一个字节,而其后的字节用于填充。如本文其它地方所描述的, 等于特定值的两字节密码(或一字节)表明槽920被链表874、 876 的至少一项指向。不等于特定值的密码表明槽920未被链表874、 876 的项指向。密码的使用将在本文其它地方描述。缓存标签926还包括一两字节字段,其指明槽920的数据924的 序号(如N、 N—l、 N—2等)。如本文其它地方所描述的,缓存标签 926的序号字段可用于帮助在此描述的处理。缓存标签926的其余四 个字节可用于指针,如本文其它地方所描述的那样。当然,序号的两 个字节和指针的四个字节仅在密码等于特定值时是有效的,其中特定 值表明槽920被列表874、 876之一中的至少一项指向。参考图31,流程图940示出了连同主机822执行写操作,由本 地存储设备824执行的步骤。当然,当主机822执行写时,处理出现 以用一般方式处理写,而不管数据是否正被连续备份在826。处理开始于第一步骤942,其中对应于写的槽被锁定。在这里的 实施例中,高速缓存器888的每一槽902-904对应于标准逻辑设备 872上的数据磁道。在步骤942锁定槽阻止另外的过程在远程存储设 备本地存储设备824执行的、对应于流程图940的步骤的处理期间在 相应的槽上运行。在步骤942之后是步骤944,其中序号N的值被设定。如本文别 处所描述的,在步骤944获得的序号的值在本地存储设备824执行的整个写操作期间均被保留,同时槽被锁定。如本文别处所描述的,序号被分配给每一写以设定写属于数据块852、 854中的哪一个。主机 822执行的写被分配以当前序号。单一写操作始终保持同一序号是有 用的。在步骤944之后是测定步骤946,确定缓存槽的密码字段是否有 效。如上所述,在此描述的系统将密码字段设定为预先确定的值以表 明缓存槽已经在指针的链表874、 876之一中。如果在测定步骤946 确定密码字段无效(表明槽是新的且没有列表874、 876的指针指向 该槽),则控制从步骤946转到步骤948,新槽的缓存标签被设定, 其中将密码设定为预先确定的值、将序号字段设定为N、将指针字段 设定为空。在其它实施例中,指针字段可被设定为指向槽本身。在步骤948之后是步骤952,指向新槽的指针被添加到指针列表 874、 876中的活动态列表。在这里的一实施例中,列表874、 876为 循环双向链表,且新指针被以传统方式添加到循环双向链表中。当然, 其它适当的数据结构也可用于管理列表874、 876。在步骤952之后 是步骤954,设定标志。在步骤954,写未决标志被设定以表明该槽 需要传输给远程存储设备826。此外,在步骤954,高速缓存标志可 被设定以表明该槽需要被降级到标准逻辑设备872。在步骤954之后 是歩骤956,由主机822写的数据被写到该槽中。在步骤956之后是 步骤958,该槽被解锁。在步骤958之后,处理结束。如果在测定步骤946确定槽的密码字段有效(表明该槽己经被列 表874、 876的至少一指针指向),则控制从步骤946转到测定步骤 962,确定该槽的序号字段是否等于当前序号N。应注意,对于具有 有效密码的槽的序号字段有两种有效的可能性。序号字段等于N (当 前序号)是可能的。这在槽对应于具有序号N的在前写的情况下发生。 另一种可能性是序号字段等于N—1。这在槽对应于具有序号N—1的 在前写的情况下发生。序号字段的任何其它值均是无效的。因此,对 于某些实施例,在步骤962中包括错误/有效性检查或在单独的步骤中进行错误/有效性检查是可能的。这样的错误可以任何适当的方式 处理,其可包括提供消息给用户。如果在测定步骤962确定槽的序号字段中的值等于当前序号N,则不要求特殊的处理且控制从步骤962转到步骤956,如上所述,数 据被写到槽中。否则,如果序号字段的值为N—l (唯一另外的有效 值),则控制从步骤962转到步骤964,获取新槽。在步骤964获得 的新槽可用于保存所写数据。在步骤964之后是步骤966,来自旧槽的数据被复制到在步骤964 获得的新槽。应注意,所复制的数据包括写未决标志,其应在该槽被 第一次创建时已在步骤954基于先前的写设定。在步骤966之后是步 骤968,新槽的缓存标签被设定,其将密码字段设定为适当的值、将 序号字段设定为当前序号N、及将指针字段设定为指向旧槽。在步骤 968之后是步骤972,指向新槽的指针被添加到链表874、 876中的活 动态链表。在步骤972之后是步骤956,如上所述,数据被写到槽中, 在该例子中,其是新槽。参考图32,流程图1000示出了连同本地存储设备824扫描链表 872、 874中的非活动态链表所执行的步骤,以在数据已根据图29所 示实施例累积时将数据从本地存储设备824传输到远程存储设备 826。如上所述,当N周期正由主机822使用链表872、 874中的活动 态链表写到本地存储设备824时,链表872、 874中的非活动态链表 指向对应于本地存储设备824的N—1周期的槽。处理开始于第一步骤1002,确定在列表872、 874的非活动态表 中是否有任何项。当数据被传输时,相应的项被从列表872、 874的 非活动态列表中去除。此外,新的写被提供给列表872、 874中的活 动态列表且通常不提供给列表872、 874中的非活动态列表。因此, 列表872、 874中的非活动态列表在某些时间不包含数据是可能的(也 是所希望的,如本文别处所述的)。如果在步骤1002确定没有数据 将被传输,则列表872、 874中的非活动态列表继续被轮询直到数据 可用为止。用于发送的数据变得可用同时周期切换(在本文别处描述),其中列表872、 874中的非活动态列表变成列表872、 874中的 活动态列表,反之亦然。如果在步骤1002确定有数据可用于发送,则控制从步骤1002转 到步骤1004,其中槽被验证为是正确的。在步骤1004执行的处理是 随意的"精神健全检查",其可包括验证密码字段是正确的及验证序 号字段是正确的。如果在槽中有不正确的(意外的)数据,则可执行 错误处理,其可包括通知用户该错误及可能的错误校正处理。在步骤1004之后是步骤1012,以适当方式将数据从本地存储设 备824发送给远程存储设备826。在这里的一实施例中,整个槽均未 被传输。而是,只有槽内具有适当的镜像位设置(表明记录已改变) 的记录被传输给远程存储设备826。然而,在其它实施例中,则可能 传输整个槽,假如远程存储设备826只写对应于具有适当镜像位设置 的数据并忽略该磁道的其它数据,其可能是也可能不是有效的。在步 骤1012之后是测定步骤1014,确定被传输的数据是否已被远程存储 设备826确认。如果没有,则数据被按照从步骤1014回到步骤1012 的流程重新发送。在其它实施例中,不同的及更多有关的处理可用于 发送数据及确认其接收。这样的处理可包括错误报告及在一定数量的 发送数据的努力已失败之后执行的另外的处理。一旦在测定步骤1014确定数据已被成功发送,控制从步骤1014 转到步骤1016以清除写未决标志(因为数据已被成功发送)。在步骤 1016之后是测定步骤1018,确定该槽是否是连同向已经具有列表 872、 874的非活动态列表中的现存项的槽进行写而创建的复制槽。 这种可能性已在上面连同步骤962、 964、 966、 968、 972进行描述。 如果在测定步骤1018确定该槽是复制槽,则控制从步骤1018转到步 骤1022,该槽被返回到可用的槽池中(将被重新使用)。此外,槽还 可被老化(或使某些其它适当机制应用于其)以在其它槽之前提供立 即的重新使用,因为该槽中提供的数据对于任何其它目的均不是有效 的。在步骤1022或步骤1018 (如果槽不是复制槽)之后是步骤1024, 槽的首部的密码字段被清零,使得当槽被重新使用时,在图31的步骤946的测定可正确地将该槽分类为新(未使用)槽。在步骤1024之后是步骤1026,列表872、 874的非活动态列表 中的项被移除。在步骤1026之后,控制转回到步骤1002,如上所述, 确定在列表872、 874的非活动态列表上是否有另外的项对应于需要 被传输的数据。参考图33,流程图1050示出了连同本地存储设备824增加序号 执行的步骤。处理开始于第一步骤1052,在增加序号之前本地存储 设备824等待至少M秒。在这里的实施例中,M为30,当然,M可以 为任何数字。如果存储设备824、 826之间的通信中断,较大的M值 增加了可能丢失的数据的量。然而,较小的M值可能因更频繁地递增 序号而增加内务操作的总量。在步骤1052之后是测定步骤1054,确定对本地存储设备824进行的与在前序号相关联的所有写操作是否已完成。在某些情况下,单 一 I/O可能需要很长时间并可能在序号已改变之后仍然在进行之中。 任何适当的机制均可在步骤1054中使用。如果在测定步骤1054确定来自在前序号的I/O已被完成,则控 制从步骤1054转到测定步骤1056,确定列表874、 876中的不活动 态列表是否是空的。应注意,可不进行序号转换,除非及直到对应于 列表874、876的不活动态列表的所有数据已全部从本地存储设备824 传输到远程存储设备826为止。 一旦列表874、 876中的不活动态列 表被确定为空,则控制从步骤1056转到步骤1058,在前序号的提交 从本地存储设备824发送到远程存储设备826。远程存储设备826接 收特定序号的提交信息将向远程存储设备826表明对应于该序号的 数据全部已被发送。在步骤1058之后是步骤1062,对列表874、 876中的不活动态 列表的数据复制被暂停。如本文别处所述,不活动态列表被扫描以将 相应的数据从本地存储设备824发送到远程存储设备826。暂停复制 数据直到序号转换完成为止是有用的。在步骤1062之后是步骤1064,其增加序号。在步骤1064之后是歩骤1072,确定远程存储设备826是否已确认在步骤1058发送的 提交信息。 一旦确定远程存储设备826己确认在步骤1058发送的提 交信息,控制从步骤1072转到步骤1074,在步骤1062提供的暂停 复制设定被解除,使得复制可重新开始。在步骤1074之后,处理结 束。注意,从步骤1074回到步骤1052以开始新的周期从而连续增加 序号是可能的。使用本地存储设备824处的表来收集与活动态数据和非活动态 数据块相关的槽也是可能的。在这种情况下, 一表可与非活动态序号 相关联,而另一表可与活动态序号相关联。这将在下面讨论。参考图34,示图1200示出了用于构建和保留数据块852、 854 的项目。标准逻辑设备1202包含由主机822写的数据并对应于数据 元851,如上所述。标准逻辑设备1202包含由主机822写到本地存 储设备824的数据。两个表1204、 1206可与标准逻辑设备1202 —起使用。表1204、 1206对应可能保存在本地存储设备824的存储器中的设备表。表 1204、 1206的每一磁道项或指向标准逻辑设备1202的磁道或指向连 同本地存储设备824使用的高速缓存器1208的槽。高速缓存器1208包含多个缓存槽1212-1214,其可连同对标准 逻辑设备1202进行写一起使用,同时,还可连同表1204、 1206 —起 使用。在这里的实施例中,表1204、 1206的每一磁道表项包含一空 值以指明标准逻辑设备1202的相应磁道的使用。否则,每一表1204、 1206的磁道表中的项包含指向高速缓存器1208中的槽1212-1214之 一的指针。每一高速缓存表1204、 1206可用于数据块852、 854之一,从而, 例如,表1204可对应于数据块852 (序号N),而表1206可对应于 数据块854 (序号N—1)。因此,当数据由主机822写到本地存储设 备824时,数据被提供给高速缓存器1208且表1204的适当指针被调 整。应注意,数据将不从高速缓存器1208中移除,直到数据被降级到标准逻辑设备1202为止,且数据还通过与表1204相关联的机制释放,如本文别处所述。在这里的实施例中,表1204、 1206之一被视为"活动态",而另 一表被视为"非活动态"。因而,例如,当序号N为偶数时,表1204 可以为活动态,而表1206为非活动态。表1204、 1206中的活动态表 处理来自主机822的写,而表1204、 1206中的非活动态表对应于正 从本地存储设备824传输到远程存储设备826的数据。当主机822所写的数据使用表1204、 1206中的活动态表进行积 聚时(对于序号N),对应于表1204、 1206中的非活动态表的数据 (对于在前序号N_ 1 )从本地存储设备824传输到远程存储设备826 。一旦数据己被传输给远程存储设备826,表1204、 1206的非活 动态表中的对应项可被设定为空值。此外,如果槽中的数据不再因另 外的目的所需要(如要被降级到标准逻辑设备1202),数据还可从 高速缓存器1208中移除(即槽被返回到槽池中以供后用)。 一机制 可用于确保数据不被从高速缓存器1208移除,直到所有镜像及表 1204、 1206不再使用该数据为止。这样的机制在1996年7月16日 授予的美国专利5, 537, 568中描述。参考图35,流程图1240示出了连同主机822执行写操作由本地 存储设备824执行的步骤,其是针对使用两个表的实施例。处理开始 于第一步骤1242,对应于写的槽被锁定。在这里的实施例中,高速 缓存器1208的每一槽1212-1214对应于标准逻辑设备1202上的数据 磁道。在步骤1242锁定槽可在本地存储设备824执行的处理期间阻 止另外的过程在相应的槽上运行,所述本地存储设备824执行的处理 对应于流程图1240的步骤。在步骤1242之后为步骤1244,序号N的值被设定。正象使用列 表而不是表的实施例那样,在步骤1244获得的序号的值在整个写操 作期间均被保留,且槽被锁定。如本文别处所述,序号被分配给每一 写以确定写属于哪一数据块852、 854。主机822执行的写被分配以 当前序号。单一写操作始终保持相同的序号是有用的。在步骤1244之后是测定步骤1246,确定表1204、 1206中的非 活动态表是否己经指向在步骤1242锁定的槽(正对其操作的槽)。这 可能在序号小于当前序号时如果对同一槽的写己被提供的情况下发 生。对应于在前序号的写的数据可能尚未被传输给远程存储设备826。如果在测定步骤1246确定表1204、 1206中的非活动态表没有指 向该槽,则控制从测定步骤1246转到另一测定歩骤1248,确定表 1204、 1206中的活动态表是否指向该槽。如果在序号与当前序号相 同时先前已有对该槽的写,则表1204、 1206中的活动态表指向该槽 是可能的。如果在测定步骤1248确定表1204、 1206中的活动态表没 有指向该槽,则控制从测定步骤1248转到步骤1252,为数据获得新 槽。在步骤1252之后是步骤1254,表1204、 1206中的活动态表被 使得指向该槽。在步骤1254之后或在步骤1248之后(如果表1204、 1206的活 动态表指向该槽)是步骤1256,设置标志。在步骤1256,写未决标 志被设定以表明该槽需要传输给远程存储设备826。此外,在歩骤 1256, IN—CACHE标志被设定以表明该槽需要被降级到标准逻辑设备 1202。应注意,在某些情况下,如果表1204、 1206的活动态表已经 指向该槽(如在步骤1248确定),则写未决和IN_CACHE标志在执行 步骤1256前已被设定是可能的。然而,在步骤1256设置标志确保标 志被正确地设置,而不管先前的状态如何。在步骤1256之后是步骤1258,指向该槽的磁道表中的间接标志 被清零,以表明有关数据被提供在该槽中而不是在间接指向其的另外 的槽中。在步骤1258之后是步骤1262,正由主机822写的数据被写 到该槽中。在步骤1262之后是步骤1264,解锁槽。在步骤1264之 后,处理结束。如果在测定步骤1246确定表1204、 1206中的非活动态表指向该 槽,则控制从步骤1246转到步骤1272,获得新槽。在歩骤1272获 得的新槽可用于表1204、 1206的非活动态表以实现传输,同时旧槽 可与表1204、 1206的活动态表相关联,如下所述。49在步骤1272之后是步骤1274,旧槽的数据被复制到在步骤1272 获得的新槽。在步骤1274之后是步骤1276,(上述的)间接标志被 设定以表明表1204、 1206的非活动态表的磁道表项指向旧槽及表明 数据在旧槽所指向的新槽中。因此,在步骤1276设置间接标志影响 表1204、 1206的非活动态表的磁道表从而导致磁道表项表明数据在 新槽中。在步骤1276之后是步骤1278,新槽中的记录的镜像位被调整。 当数据在步骤1274从旧槽复制到新槽时,被复制的任何本地镜像位 均被清零,因为新槽的目的只是简单地实现对所述表的非活动态表的 传输。旧槽将用于处理任何本地镜像。在步骤1278之后是步骤1262, 数据被写到槽中。在步骤1262之后是步骤1264,解锁槽。在步骤1264 之后,处理结束。参考图36,流程图1300示出了在数据已根据图34所示的实施 例累积时,本地存储设备824将数据块854传输给远程存储设备826 所执行的步骤。传输实质上包括对表1204、 1206的非活动态表先 前在活动态时的反复操作期间己写到那里的磁道,扫描表1204、 1206 的非活动态表。处理开始于第一步骤1302,指向表1204、 1206的非活动态表的 第一磁道以开始通过所有磁道的反复过程。在第一步骤1302之后是 测定步骤1304,确定写未决标志是否已被设定。如本文别处所述, 写未决标志用于表明槽(磁道)包含需要传输给远程存储设备826的 数据。被设置的写未决标志表明槽(磁道)中的至少部分数据将被传 输。在这里的实施例中,整个槽均不被传输。而是,只有槽内具有适 当的镜像位设置(表明记录已改变)的记录才被传输给远程存储设备 826。然而,在其它实施例中,假如远程存储设备826只写对应于具 有适当镜像位设置的记录的数据并忽略磁道的其它数据,则可能传输 整个槽,其可以是也可不是有效的。如果在测定步骤1304确定被处理的缓存器具有写未决标志设 置,则控制从步骤1304转到测定步骤1305,确定槽是否包含数据或确定槽是否是指向包含相关数据的另一槽的间接槽。在某些情况下, 槽可能不包含对应于槽的磁盘部分的数据。即槽可能是指向包含数据 的另一槽的间接槽。如果在步骤1305确定槽是间接槽,则控制从步骤1305转到步骤1306,获取数据(从间接槽指向的槽获取)。因而, 如果槽是直接槽,所发送的数据被保存在该槽中,而如果槽是间接槽, 则所发送的数据被保存在由间接槽所指向的另一槽中。在步骤1306或步骤1305 (如果槽是直接槽)之后是步骤1307, 所发送的数据(直接或间接从槽)被传给远程存储设备826。在步骤 1307之后是测定步骤1308,确定远程存储设备826是否已确认数据 的接收。如果否,则控制从步骤1308转回到步骤1307以重新发送数 据。在其它实施例中,不同的及更多有关的处理可用于发送数据并确 认其接收。这样的处理可包括错误报告及其它处理,其是在一定量的 发送数据的尝试失败之后执行的处理。一旦在测定步骤1308确定数据已被成功发送,控制从步骤1308 转到步骤1312以清零写未决标志(因为数据已被成功发送)。在步 骤1312之后是步骤1314,适当的镜像标志被清零以表明至少远程存 储设备826不再需要数据。在这里的实施例中,作为槽(磁道)的一 部分的每一记录具有各自的镜像标志,其表明哪些镜像使用特定的记 录。远程存储设备826是每一记录的镜像之一且是对应于远程存储设 备826的、在步骤1314清零的标志。在步骤1314之后是测定步骤1316,确定正被处理的磁道的任意 记录是否具有任意其它镜像标志设置(对于其它镜像设备)。如果否, 则控制从步骤1316转到步骤1318,释放槽(即不再被使用)。在一 些实施例中,未使用的槽可被保持在可用槽池中。应注意,对于槽的 一些记录,如果另外的标志仍被设置,则可能意味着记录需要被降级 到标准逻辑设备1202或正由一些其它镜像使用。在步骤1318之后, 或在步骤1316之后(如果更多的镜像标志存在)是步骤1322,用于 反复通过表1204、 1206的非活动态表的每一磁道项的指针被使得指 向下一磁道。在步骤1322之后是测定步骤1324,确定表1204、 1206中的非活动态表是否有更多的磁道要被处理。如果否,则处理结束。 否则,控制转回到测定步骤1304,如上所述。注意,如果确定对于正被处理的磁道写未决标志未被设置,步骤1322还可从测定歩骤 1304到达。参考图37,示图1500示出了主机1502连接到多个本地存储设 备1503-1505。示图1500还示出了多个远程存储设备1506-1508。尽 管示图1500中只示出了三个本地存储设备1503-1505和三个远程存 储设备1506-1508,在此描述的系统可扩展到使用任意数量的本地和 远程存储设备。如下面更详细论述的,与在连接到单一本地存储设备 的单一远程存储设备处提供连续备份相关联的功能可延伸到多个本 地和远程存储设备。本地存储设备1503-1505中的每一个连接到相应的远程存储设 备1506-1508,从而,例如,本地存储设备1503连接到远程存储设 备1506,本地存储设备1504连接到远程存储设备1507,及本地存储 设备1505连接到远程存储设备1508。为了远程连续备份,本地存储 设备1503-1505可将数据传给远程存储设备1506-1508,从而,例如, 本地存储设备1503可将远程连续备份数据传给远程存储设备1506。在一些情况下,主机1502可运行单个应用程序,其同时使用一 个以上的本地存储设备1503-1505。在这种情况下,应用程序可被配 置以确保如果主机1502要在任意时间中止工作和/或如果本地存储 设备1503-1505之一发生故障,则应用数据是一致的(可恢复的)。 然而,由于本地存储设备1503-1505和远程存储设备1506-1508之间 的每一连接可能与其它连接不同步,则不能确保用于应用程序的数据 在远程存储设备1506-1508将是一致的(因而可恢复)。即,例如, 即使本地存储设备1503和远程存储设备1506 (第一本地/远程对) 之间的数据连接是一致的,且本地存储设备1504和远程存储设备 1507 (第二本地/远程对)之间的数据连接是一致的,如果在第一和 第二本地/远程对之间没有同步,则远程存储设备1506、 1507上的数 据不必定总是一致的。对于主机1502上同时使用多个本地存储设备1503-1505的应用 程序,可能希望使数据在远程存储设备1506-15Q8是一致且可恢复 的。这可由主机1502控制每一本地存储设备1503-1505处的周期转 换(cycle switch)实现,从而来自主机1502上运行的应用程序的 数据在远程存储设备1506-1508是一致且可恢复的。该功能由在主机 1502上运行的特别应用程序提供,其将多个本地存储设备1503-1505 转换为多盒模式,如下所详述的。参考图38,表1530具有多个项1532-1534。每一项1532-1534 对应于存储设备的单一本地/远程对,例如,项1532可对应于本地存 储设备1503和远程存储设备1506的对,项1533可对应于本地存储 设备1504和远程存储设备1507的对,而项1534可对应于本地存储 设备1505和远程存储设备1508的对。项1532-1534中的每一项具有 多个字段,其中第一字段1536a-1536c代表相应的本地存储设备的序 号,第二字段1538a-1538c代表多盒组(multi-box group)使用的 会话数量,第三字段1542a-1542c代表本地/远程对的相应远程存储 设备的序号,第四字段1544a-1544c代表多盒组的会话数量。连同在 多盒模式下工作,表1530由主机1502构建和保持。此外,表1530 被传达给本地存储设备和远程存储设备中的每一个,这些设备是多盒 组的一部分。表1530可用于帮助恢复,如下详述的那样。不同的本地/远程对可以任何顺序在任何时间单独进入和退出多 盒模式。主机1502管理本地存储设备/远程存储设备对进入和退出多 盒模式。这将在下面详述。参考图39,流程图1550示出了主机1502执行的与本地/远程对 进入或退出多盒模式有关的步骤。处理开始于第一歩骤1552,多盒 模式操作被临时暂停。在步骤1552临时暂停多盒操作可用于促进连 同远程/本地对进入或退出多盒模式做出的变化。在步骤1552之后是 步骤1554,与表1530相似的表被修改以添加或删除项,合理地进行。 在步骤1554之后是步骤1556,修改后的表被传送给多盒组的本地存 储设备和远程存储设备。在步骤1556传送表有利于恢复,如本文别处所详细描述的。在步骤1556之后是步骤1558,消息被发送给受影响的本地存储 设备以提供该变化。本地存储设备可配置其自身以在或不在多盒模式 下运行,如本文别处所详细描述的。如下面详细描述的,处理远程连 续备份的本地存储设备根据其是否作为多盒组的一部分运行而不同 地运行。如果本地存储设备正被添加到多盒组,则在步5聚1558发送 的消息向本地存储设备指明其正被添加到多盒组,从而本地存储设备 应配置其自身以在多盒模式下运行。或者,如果本地存储设备正被从 多盒组中移除,在步骤1558发送的消息向本地存储设备指明其正被 从多盒组中移除,从而本地存储设备应配置其自身以不在多盒模式下 运行。在步骤1558之后是测定步骤1562,确定本地/远程对是否正被 添加到多盒组中(与被移除相反)。如果是,贝啦制从测定步骤1562 转到步骤1564,标记值被发送给正被添加的本地存储设备。标记值 被提供给从本地存储设备传输给远程存储设备的数据,其方式类似于 给数据提供序号。标记值由主机控制和设定,从而所有本地/远程对 在同一周期期间发送具有同一标记值的数据。标记值的使用将在下面 详细讨论。在步骤1564之后或步骤1562之后(如果新的本地/远程 对未被添加)是步骤1566,重新开始多盒操作。在步骤1566之后, 处理结束。参考图40,流程图1580示出了所执行的与主机管理多个本地/ 远程对的周期切换有关的歩骤,多个本地/远程对作为多盒模式下的 组运行。如本文别处所论述的,多盒模式包括使主机同歩一个以上远 程/本地对的周期转换以在远程存储设备之间保持数据一致性。周期 转换由主机调整而不是由本地存储设备内部产生。这将在下面详述。流程图1580的处理开始于测定步骤1582,确定M秒是否已逝去。 正如非多盒操作那样,周期转换每M秒就发生一次,其中M是选择来 优化多个性能参数的数字。当M增加时,与转换相关的内务操作量则 减少。然而,增加M也使得与故障有关的潜在数据损失也增加。在这里的实施例中,M被选择为30秒,尽管也可使用其它M值。如果在测定步骤1582确定M秒尚未逝去,则控制转回到步骤1582 以继续轮询直到M秒已逝去为止。 一旦在测定步骤1582确定M秒已 逝去,控制从步骤1582转到步骤1584,主机询问多盒组中的所有本 地存储设备以确定是否所有本地/远程对均已准备好转换。准备好转 换的本地/远程对将在下文中详述。在步骤1584之后是测定步骤1586,确定是否所有本地/远程对 均已准备好转换。如果否,控制转回到步骤1584以重新开始询问。 在这里的实施例中,只需要询问先前未准备好转换的本地/远程对, 因为, 一旦本地/远程对准备好转换,该对保持这种状态直到转换发 生为止。一旦在测定步骤1586确定多盒组中的所有本地/远程对均准备 转换,控制从步骤1586转到步骤1588,下标变量N被设定为等于1。 下标变量N用于重复通过所有本地/远程对(即表1530的所有项 1532-1534)。在步骤1588之后是测定步骤1592,确定下标变量N 是否大于多盒组中的本地/远程对的数量。如果否,则控制从步骤1592 转到步骤1594,对第N对的第N本地存储设备进行开窗口,其通过 主机发送指令(如适当的系统指令)给第N本地存储设备进行。在步 骤1594对第N本地存储设备开窗口将导致第N本地存储设备暂停写, 从而由主机进行的、不是在步骤1594开窗口之前开始的任何写将不 被完成,直到窗口关闭为止(如下述)。未完成写操作将阻止第二依 赖的写在完成周期转换之前出现。任何进行中的、在开窗口之前开始 的写可在窗口关闭之前完成。在歩骤1594之后是步骤1596,第N本地存储设备的周期转换被 执行。在步骤1596执行周期转换包括从主机1502发送指令给第N本 地存储设备。第N本地存储设备处理来自主机的指令将在下面详细描 述。在步骤1596执行的处理的一部分可包括使主机向分配给数据的 标签提供新值。标签在本文别处详细描述。在另一实施例中,在步骤说明书第53/59页 1594、 1596执行的操作可被执行为单一合成步骤1597,其被图示为 在步骤1594、 1596周围画的框。在步骤1596之后是步骤1598,递增下标变量N。在步骤1598之 后,控制转回到测定步骤1592以确定下标变量N是否大于本地/远程 对的数量。如果在测定步骤1592确定下标变量N大于本地/远程对的数量, 则控制从测定步骤1592转到步骤1602,下标变量N被设定为等于1。 在歩骤1602之后是测定步骤1604,确定下标变量N是否大于本地/ 远程对。如果否,则控制从步骤1604转到步骤1606,第N本地存储 设备的窗口被关闭。在步骤1606关闭窗口由主机发送指令给第N本 地存储设备以使第N本地存储设备重新开始写操作进行。因而,在执 行步骤1606之后,任何由在步骤1594开窗口暂停的、进行中的写现 在可被完成。在步骤1606之后,控制转到步骤1608,递增下标变量 N。在步骤1608之后,控制转回到测定步骤1604以确定下标变量N 是否大于本地/远程对的数量。如果是,则控制从测定步骤1604转回 到步骤1582以开始下一周期转换的处理。参考图41,流程图1630示出了本地存储设备执行的与周期转换 有关的步骤。在本地存储设备既支持多盒模式又支持非多盒模式的情 况下,图41的流程图1630代替图33的流程图1050。即,流程图1630 示出了所执行的与图33的流程图1050类似的步骤以支持非多盒模 式,此外还包括支持多盒模式的步骤。处理开始于第一测定步骤1632,确定本地存储设备是否正在多 盒模式下工作。应注意,图39的流程图1550示出了步骤1558,其 中主机发送消息给本地存储设'备。在步骤1558发送的消息向本地存 储设备指明本地存储设备是否在多盒模式下工作。在接收到主机在步 骤1558发送的消息的基础上,本地存储设备设置如果在测定步骤1632确定本地存储设备不是多盒模式,则控制从测定步骤1632转到步骤1634以等待M秒进行周期转换。如果本地 存储设备不是在多盒模式下工作,则本地存储设备控制其自己的周期 转换并因而执行步骤1634以在开始下一周期转换之前等待M秒。在步骤1634之后,或在步骤1632之后(如果本地存储设备是在 多盒模式)是测定步骤1636,确定先前序号的所有I/O是否均已完 成。 一旦在测定步骤1636确定先前循环号的所有I/O均己完成,控 制从测定步骤1636转到步骤1688,确定本地存储设备的非活动态数 据块是否为空。 一旦在测定步骤1688确定非活动态数据块为空,控 制从步骤1688转到步骤1699,暂停将数据从本地存储设备复制到远 程存储设备。暂停复制数据直到序号转换结束为止是有用的。在步骤1689之后是测定步骤1692,确定本地存储设备是否在多 盒模式。如果在测定步骤1692确定本地存储设备在多盒模式,则控 制从测定步骤1692转到测定步骤1694以确定相应的远程存储设备的 活动态数据块是否为空。 一旦远程存储设备已倒空其活动态数据块, 其发送消息给本地存储设备。响应于该消息,本地存储设备设置在测 定步骤1694检查的内部变量。一旦在测定步骤1694确定远程存储设备的活动态数据块为空, 控制从测定步骤1694转到步骤1696,内部变量被设置在本地存储设 备上以表明本地存储设备准备转换周期。如结合流程图1580所述, 主机询问每一本地存储设备以确定每一本地存储设备均已准备转换。 响应于由主机提供的询问,本地存储设备检查在步骤1696设置的内 部变量并将结果返回给主机。在步骤1696之后是测定步骤1698,本地存储设备等待以从主机 接收执行周期转换的指令。如结合流程图1580所述,当本地存储设 备在多盒模式下工作时,主机提供指令给本地存储设备以转换周期。 因而,本地存储设备在步骤1698等待指令,只有在本地存储设备在 多盒模式下工作时才能到达该步骤。一旦本地存储设备已从主机接收到转换指令,控制从步骤1698 转到步骤1702以发送提交信息给远程存储设备。注意,如果在测定 步骤1692确定本地存储设备不是多盒模式,则步骤1702也可从测定 步骤1692到达。在步骤1702,本地存储设备发送提交信息给远程存 储设备。响应于接收特定序号的提交信息,远程存储设备将根据在此 所述的连续备份功能开始保存数据。在步骤1702之后是步骤1706,递增序号并保存标签的新值(来 自主机)。序号如上所述。标签是在步骤1564和歩骤1596提供给本 地存储设备的标签,如上所述。标签用于帮助数据恢复,如本文别处 所述。在步骤1706之后是步骤1708,周期转换的完成被从本地存储设 备到主机进行确认,其通过从本地存储设备发送消息给主机进行。在 一些实施例中,执行步骤1708的条件在于本地存储设备是否在多盒 模式,因为,如果本地存储设备不在多盒模式,则主机不必关注周期 转换在何时出现。在步骤1708之后是测定步骤1712,确定远程存储设备是否已确 认提交信息。注意,如果本地/远程对在多盒模式下工作且在步骤1694 已确定远程存储设备活动态数据块为空,则远程存储设备应几乎立即 确认提交信息,因为远程存储设备将立即准备用于周期转换,因其活 动态数据块为空。一旦在测定步骤1712确定提交信息已被远程存储设备确认,控 制从步骤1712转到步骤1714,已在步骤1689提供的暂停复制的设 定被清除,从而,从本地存储设备到远程存储设备的复制可重新开始。 在步骤1714之后,处理结束。参考图42,流程图1740示出了,在数据已根据图29所示的实 施例累积时,所执行的与扫描本地存储设备824的非活动态缓冲器从 而将数据从本地存储设备824传输到远程存储设备826有关的歩骤。 流程图1740类似于图32的流程图1000,且类似的歩骤被给予了相 同的附图标记。然而,流程图1740包括两个另外的步骤1742、 1744,其未在图32的流程图1000中发现。另外的步骤1742、 1744用于帮 助多盒处理。在数据己在步骤1012发送之后,控制从步骤1012转到 测定步骤1742,确定发送的数据是否是本地存储设备的非活动态数 据块中的最后数据。如果否,则控制从步骤1742转到步骤1014,且 处理继续,如结合图32的流程图1000所述的那样。否则,如果在测 定步骤1742确定发送的数据是数据块的最后数据,则控制从步骤 1742转到步骤1744以从本地存储设备824发送特殊的消息给远程存 储设备826,其指明最后的数据已被发送。在步骤1744之后,控制 转到步骤1014,且处理继续,如结合图32的流程图1000所述的那 样。在一些实施例中,步骤1742、 1744可由不同于传输数据的过程 (和/或硬件设备)的单独的过程(和/或单独的硬件设备)执行。参考图43,流程图1750示出了在数据已根据图34所示的实施 例累积时,所执行的与扫描非活动态缓冲器以将数据从本地存储设备 824传输到远程存储设备826有关的步骤。图43的流程图1750类似 于图36的流程图1300,且类似的步骤被给予了相同的附图标记。然 而,流程图1750包括另外的步骤1752,其未在图36的流程图1300 中发现。另外的步骤1752用于帮助多盒处理且类似于图42的流程图 1740的附加步骤1744。在测定步骤1324确定没有剩下更多的槽将从 本地存储设备发送到远程存储设备之后,控制从步骤1324转到歩骤 1752以从本地存储设备824发送特殊消息给远程存储设备826,其表 明数据块的最后数据已被发送。在步骤1752之后,处理结束。如本文别处所述,可通过使远程存储设备826使用在此连同在产 生数据的同一存储设备提供连续备份描述的技术(如图19的流程图 500)保存提供给其的数据而在远程存储设备826处提供对来自本地 存储设备824的数据的连续备份。然而,具有本地存储设备824和远 程存储设备826对连续备份存储、访问和恢复均呈现另外的可能性。注意,通过使用上述技术使所有数据返回、读某一时间点的特定 数据可使数据恢复到远程存储设备826处的特定时间点。然而,由于 主机822连接到本地存储设备824,主机822对时间点数据的访问要求主机822访问远程存储设备826的数据或将返回的数据从远程存储 设备826转移到本地存储设备824。参考图44,流程图1760示出了使用本地存储设备824和远程存 储设备826将数据恢复到特定时间点(目标时间)所执行的步骤。处 理开始于第一步骤1762,停止连续备份处理。在步骤1762之后是步 骤1766,本地存储设备824被使得未准备好由主机822 (或任何其它 设备)访问。在步骤1766之后是步骤1768,本地存储设备824上的 磁道在远程存储设备826上使用的相应CB虚拟设备磁道指向日志设 备的情况下被设为无效。在步骤1768将特定磁道设为无效使主机822 (或读本地存储设备824的数据的任何其它设备)的读能从远程存储 设备826获得这些磁道的数据。在步骤1768之后是步骤1772,数据被恢复到远程存储设备826 处的目标时间。在步骤1772执行的处理可包括在本文别处描述的任 何技术。在步骤1772之后是步骤1774,本地存储设备824被使得准 备好由主机822 (或其它类似设备)访问。在步骤1774之后是步骤 1776,重新开始连续备份过程。在步骤1776之后,处理结束。参考图45,示图1780示出了在本地存储设备824提供虚拟设备 1782以提供对远程存储设备826处的CB虚拟设备1784的访问的实 施例。在示图1780图示的实施例中,主机822可通过本地访问虚拟 设备1782而访问CB虚拟设备1784。从虚拟设备1782读及向其写使 能经本地存储设备824和远程存储设备826之间的数据链路而相应地 从CB虚拟设备1784读及向其写。因而,使用虚拟设备1782执行在 本文别处图示的处理是可能的,如图21的流程图570所示的从特定 时间点读数据。连接设备1782、 1784可通过任何适当的技术,包括 常规镜像技术。参考图46,示图1800示出了另一实施例,其具有CB虚拟设备 1802、标准逻辑设备1804、日志设备1806和I/O模块1808,所有这 些总体上按上面连同在同一存储设备提供连续备份所述的进行操作, 其中主机正对所述存储设备提供直接I/O操作(图16)或者在不同于所述存储设备的设备处提供I/0操作(图27)。示图1800还示出了提供标准逻辑设备1804的本地镜像的镜像逻辑设备1804'。镜像 逻辑设备1804'可以传统方式实施并可具有与标准逻辑设备1804拆 分的能力,使得镜像功能中止及镜像逻辑设备1804'可在拆分后独立 于标准逻辑设备1804因I/O操作而被访问。镜像逻辑设备1804'可用于多种目的。例如,通过在开始连续备 份时拆分镜像逻辑设备1804',镜像逻辑设备1804'使得不需要为整 个磁道分配空间及复制第一写上的整个磁道。因而,例如,不需要图 19的流程图500的步骤502、 524、 526,及从日志设备1806的底部 磁道获取数据的所有其它进程改为从镜像逻辑设备1804'获取数据。 这避免了与向磁道进行第一写相关联的内务操作。或者,上面结合图 16和图27所述的实施例可按所述实施,但写将被复制到日志设备的 整个磁道的初始第一写可作为后台任务进行,其通过从镜像逻辑设备 1804'而不是标准逻辑设备1804复制整个磁道的数据进行。尽管在此描述的系统对于某些目的使用磁道作为数据单位,应当 理解,其它数据单位(包括,可能地,可变长度数据单位)均可使用。 这也应用于其它数据结构和数据单位。此外,在一些情形下,流程图 中的步骤顺序可以适当改变。在这里的实施例中,计时器可用于跟踪实际时间通道(如墙壁时 钟时间)。例如,计时器可表示自系统初始化以来的秒(或毫秒、分 钟、小时等)数。或者,计时器可表示与日期结合的实际时刻。作为 对比,计数器可用于递增区别开的状态,而不必与实际时间进行任何 关联。例如,计数器可基于每次对系统进行写、每N次写或根据一些 其它度量而递增。在一些实施例中,计数器可以(至少部分)是计时 器的值的函数。在一些实施例中,提供按在降低间隔的同时降低存储需求的方式 合并数据变化的机制是可能的。可通过将来自一个或多个日志设备上 保存的连续(时间上)数据元的特定磁道或数据段数据合并而进行合 并。例如,尽管在收集数据时使用的初始间隔少于1天(例如1分钟的间隔),可将对应于l天的所有变化结合在l个数据元内。但是, 将多个连续数据元组合为单一数据元虽然节省了存储空间,但降低了 恢复间隔。然而,间隔的降低可某些情况下是可接受的,如在己逝去 一定时间之后。例如,在初始以初始小间隔(如l秒)对特定天提供 连续备份、然后在已逝去第一时间量(如1天)之后降低间隔(和存 储需求)以提供中等程度的间隔(如l分钟)是有用的。在已逝去第 二时间量(如另一天)之后,间隔(及存储需求)可被进一步降低(例 如,1小时),依此类推。在本发明已结合多个实施例进行描述的同时,对其的修改对本领 域技术人员而言是显而易见的。因而,本发明的精神和范围在下面的 权利要求书中提出。
权利要求
1、存储设备的连续备份方法,包括将所述存储设备细分为多个分区;提供定期修改的时间指示符;及响应于在特定时间向所述存储设备的特定分区写新数据的请求,根据所述特定分区及根据所述指示符在所述特定时间的值保留被所述新数据盖写的数据。
2、 根据权利要求1的方法,其中响应于在所述指示符的特定值 时对特定分区的两个数据写操作,如果第二数据写操作的数据是第一 数据写操作的数据的子集,则组合两个数据写操作中的每一写操作所 写的数据。
3、 根据权利要求1的方法,还包括 通过将保留的数据写到存储设备而将所述存储设备恢复到其在 特定时间点的状态。
4、 根据权利要求6的方法,其中将保留的数据写到存储设备包 括通过将对应于相同分区的分开的数据部分进行组合而构建所述数据的分区。
5、 根据权利要求1的方法,还包括通过遍历对应于特定分区的数据获得适当的插入点而在特定时 间点插入特定分区的数据。
6、 根据权利要求1的方法,还包括通过遍历对应于特定分区的数据并读存储设备的数据、保留的数 据、及保留数据和存储设备数据的组合,读特定分区在特定时间点的 数据。
7、 存储设备的连续备份方法,包括.-将所述存储设备细分为多个分区;提供包含存储设备上在开始连续备份时的数据的副本的存储设 备镜像设备;提供定期修改的时间指示符;及响应于在特定时间向所述存储设备的特定分区写新数据的请求, 根据所述特定分区及根据所述指示符在所述特定时间的值保留被所 述新数据盖写的数据,其中,对于开始连续备份后的第一写,来自镜 像设备的数据用于保留被盖写的数据。
8、 根据权利要求1的方法,其中响应于在所述指示符的特定值 时对特定分区的两个数据写操作,如果第二数据写操作的数据是第一 数据写操作的数据的子集,则组合两个数据写操作中的每一写操作所 写的数据。
9、 从本地存储设备到远程存储设备的连续备份方法,包括 将所述本地存储设备细分为多个分区;提供定期修改的时间指示符;及响应于在特定时间向所述本地存储设备的特定分区写新数据的 请求,根据所述特定分区及根据所述指示符在所述特定时间的值在远 程存储设备保留被所述新数据盖写的数据。
10、 根据权利要求1的方法,其中响应于在所述指示符的特定值时对特定分区的两个数据写操作,如果第二数据写操作的数据是第一 数据写操作的数据的子集,则组合两个数据写操作中的每一写操作所 写的数据。
全文摘要
存储设备的连续备份,包括将存储设备细分为多个分区,提供定期修改的时间指示符,及响应于在特定时间向所述存储设备的特定分区写新数据的请求,根据所述特定分区及根据所述指示符在所述特定时间的值保留被所述新数据盖写的数据。所述分区可以是磁道。保留被盖写的数据可包括构建每一分区的数据部分的链表。所述数据部分可具有可变的大小。响应于在所述指示符的特定值时对特定分区的两个数据写操作,如果第二数据写操作的数据是第一数据写操作的数据的子集,则组合两个数据写操作中的每一写操作所写的数据。
文档编号G06F11/14GK101331458SQ200680047701
公开日2008年12月24日 申请日期2006年12月28日 优先权日2006年1月3日
发明者D·梅雷, M·比约松 申请人:伊姆西公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1