在数据存储器中保持临时数据的系统和方法

文档序号:6499496阅读:382来源:国知局
专利名称:在数据存储器中保持临时数据的系统和方法
技术领域
本发明涉及计算机系统领域,尤其涉及数据存储系统。
背景技术
在典型的现有技术的数据卷(data volume)中,只要数据改变,相应的块也改变。这就现今的应用程序如关系数据库和文件系统而言是适当的。然而,常规的数据卷管理技术不提供保持和处理临时或随时间变化的信息。应用程序-诸如数据挖掘、数据仓库、媒体库、医疗记录等等-可能需要保持和/或处理临时或随时间变化的信息。在现有技术中没有一种基础设施(infrastructure)能够允许这些领域中的应用程序管理临时数据。由于在存储器中缺少基础设施,所以现有技术的应用程序典型地使用对支持临时范型无效的蛮力(brute force)方法。因此,需要提供一种逻辑设备级基础设施,用于一般地管理跨越多种应用程序的临时数据。

发明内容
本发明描述了用于在逻辑设备级在数据存储器中保存临时数据的系统和方法的实施例。实施例可以提供用于在逻辑设备(卷)级时间标记(timestamping)数据以提供内容保存的一般机制。实施例可以提供管理和存取临时卷的机制。一些实施例可以与卷管理器集成。用于管理和存取临时卷的机制可以被称作临时卷管理器。临时卷管理器的实施例可以提供允许应用程序和/或应用程序代理与临时卷管理器通信的接口,以管理和跟踪一个或多个临时卷上的临时信息。实施例可以提供用于作用于数据历史记录-诸如临时数据库、版本管理(versioning)文件系统/存储库、数据档案和流媒体-的应用程序的基础设施,以管理临时数据。
临时卷可以是除了当前数据以外还保存非当前数据的卷。临时卷可以保持存储在其上的数据的历史记录,因而为应用程序提供检索过去任何时间的数据拷贝的方法。在临时卷中,只要一块数据要被改变,则首先保存现有块,然后覆写新的数据。即使应用程序从数据中删除该块,也保持块的旧版本。这实现了保持数据过去的一个或多个状态的数据拷贝的作用。临时卷可以被用于例如基于主机的、基于网络的(开关或器具)以及阵列存储器的环境中。此外,应当注意,临时卷可以被用于带内和带外虚拟化。
在一个实施例中,如果应用程序不希望直接使用临时卷(作为设备),则可以使用应用程序代理(如下所述)以帮助它们利用卷的临时特征。这消除了应用程序的临时数据管理的负担,使得它们能够集中于如何消耗数据,而不是如果存储数据。
在实施例中,可以以多种方式保持临时卷中数据的历史记录,包括但不限于I/O控制的检查点设置、应用程序控制的检查点设置以及周期检查点设置。在I/O控制的检查点设置中,使用临时卷的应用程序可以在向临时卷写入和/或从临时卷读取时提供时间戳。作为对于每次写入都提供时间戳的替代方案,应用程序可以发出I/O请求或命令,诸如UNIX环境中的IOCTL(I/O控制命令),在需要或者希望时为区域(或整个卷)指定时间戳。这种方法可以被称作应用程序控制的检查点设置。另一种可选方案是对于临时卷管理器周期地进行自动检查点设置,例如每10秒钟或每10分钟。这可以被称作周期检查点设置。
临时卷具有作为维度(dimension)的时间。在一个实施例中,临时卷管理器可以提供允许用户在临时卷内遍历时间维度(历史记录)的接口。一个实施例可以提供产生临时卷的临时图像的机制,其中临时图像具有它们自己独立的历史记录。一个实施例可以提供生成两个时间戳之间临时卷的时间片(slice-in-time)图像的机制。一个实施例可以提供生成临时卷的时间点(point-in-time)临时图像的机制。时间点图像是卷在一个时间点时的图像,并且可以被认为是临时卷的一维图像。可以使用时间片和时间点图像作为临时图像的基础。


以下的详细描述参考附图,现在简要地介绍附图。
附图1表示根据一个实施例的、管理临时卷中临时操作的临时卷管理器。
附图2表示根据一个实施例的、使用应用程序代理来与临时卷管理器相互作用的应用程序。
附图3是根据一个实施例的、使用I/O控制的检查点设置来在逻辑设备级管理临时卷的方法的流程图。
附图4是根据一个实施例、使用应用程序控制的检查点设置来在逻辑设备级管理临时卷的方法的流程图。
附图5是根据一个实施例、使用周期检查点设置来在逻辑设备级管理临时卷的方法的流程图。
附图6是根据一个实施例、生成临时卷的时间片图像的方法的流程图。
附图7是根据一个实施例、生成临时卷的时间点图像的方法的流程图。
附图8表示根据一个实施例的示范性高速缓存对象。
附图9表示根据一个实施例的临时卷TVOL的构造。
附图10表示根据一个实施例处理临时卷上数据块的变化,并且进一步表示在给定时间高速缓存对象下面的结构。
附图11表示根据一个实施例的非临时快照。
附图12表示根据一个实施例从临时卷导出空间优化的临时快照。
虽然在此通过对几个实施例和说明性附图的举例描述了本发明,但是本领域的技术人员应当认识到本发明不限于所描述的实施例或附图。应当理解,附图及其详细描述不是为了将本发明限制到所公开的特定形式,相反,本发明覆盖所有落入后面所附权利要求书所限定的本发明的精神和范围内的修改、等价物以及可选方案。在此使用的标题仅是为了编排目的,而不是用于限制说明书或权利要求的范围。如本申请全文中所使用的那样,词语“可以”是用于容许的意思(即,表示具有这种可能),而不是强制性的意思(即表示必须)。同样,词语“包括”表示包括但不限于。
具体实施例方式
描述了在逻辑设备级保持数据存储器中的临时数据的系统和方法的实施例。实施例可以提供一般机制,用于在逻辑设备(卷)级对数据进行时间标记,以提供内容保存。在实施例中,也可以被称作临时卷的临时数据卷可以提供用于管理、I/O操作、复制的接口,以及对包括但不限于备份、恢复和分层存储管理(HSM)操作的支持。实施例可以提供管理和存取临时卷的机制。一些实施例可以与卷管理器-诸如Veritas VERITAS卷管理器-结合。在本文献中,用于管理和存取临时卷的机制可以被称作临时卷管理器。临时卷管理器的实施例可以提供允许应用程序与临时卷管理器通信的接口,以管理和跟踪一个或多个临时卷上的临时信息。
应当注意,在本文献的末尾提供了术语表,该术语表定义了在本文献中所使用的多个术语。
实施例可以提供用于作用于数据历史记录-包括但不限于临时数据库(不管它们使用的临时模型)、版本管理文件系统/存储库、数据档案和流媒体-的应用程序的基础设施,以管理临时数据。实施例也可以被用作需要临时数据管理的进一步应用程序的构建模块。
临时卷可以是除了当前数据以外也保持非当前数据的卷。临时卷可以保持在其上存储的数据的历史记录,因而为应用程序提供一种检索过去任何时候数据的拷贝的方法。在正常卷中,只要数据改变,相应的数据块也就地改变。在临时卷中,只要一块数据将被改变,首先保存现有的块,然后覆写新的数据。保持块的旧版本,即使该块被应用程序从数据中删除。这实现了保持过去数据的一个或多个状态的拷贝的作用。该过程也可以被认为是在卷上进行数据的连续版本管理,并且进行卷的快照,只要其改变。在另一实施例中,可以将新数据写到单独的位置,并且可以操纵临时卷中的元数据(诸如到数据区的指针)。
临时卷可以被用于存储环境中,包括但不限于基于主机的、基于网络的(开关或器具)和阵列存储环境。同样,应当注意到,临时卷可以被用于带内以及带外虚拟化。
附图1表示根据一个实施例的临时卷管理器,临时卷管理器管理临时卷中的临时操作。临时卷管理器100可以为应用程序106和/或操作/文件系统104管理临时卷102上的临时数据操作。应用程序106可以是对保持数据的历史记录-诸如临时数据库、版本管理文件系统/存储库、数据档案和流媒体-以管理临时数据感兴趣的任何类型的应用程序。临时卷管理器100可以为应用程序106和/或操作/文件系统104提供一个或多个API,以在临时卷102上执行各种读取、写入或其它操作。
临时卷可以被认为是任何对时间维度感兴趣的应用程序可以使用的一般临时数据基础设施。在一个实施例中,如果应用程序不希望直接使用临时卷(作为设备),则可以使用应用程序代理(如下所述)来帮助它们利用卷的临时特征。应用程序代理去除了应用程序的临时数据管理的负担,以便它们可以专心于如何消耗数据,而不是如何存储数据。例如,数据库可以专心于有效的查询处理,而不是担心如何存储表格的拷贝,文件系统可以专心于文件操作,而不是担心如何版本管理文件,存储库可以专心于更快的索引,而不是存档数据历史记录。
附图2表示根据一个实施例的、使用应用程序代理来与临时卷管理器相互作用的应用程序。临时卷管理器200可以为应用程序206管理临时卷202上的临时数据操作。应用程序206可以是对保持数据历史记录-诸如临时数据库、版本管理文件系统/存储库、数据档案和流媒体-以管理临时数据感兴趣的任何类型的应用程序。临时卷管理器200可以提供一个或多个API,用于在临时卷202上执行各种读取、写入或其它操作。应用程序代理204是代表应用程序206与临时管理器200交互作用、并且支持应用程序206的(一些或全部)语义的中介器。应用程序代理204优选地使应用程序206更容易与临时卷202交互作用。此外,应用程序代理204可以允许应用程序206以需要的格式提取数据,而不仅是原始数据。
在存储器(逻辑设备)级存储数据历史记录也可以使管理更简单。在应用程序级,这暂时推掉了管理存储器的努力。例如,数据库不必复制其元数据的分支,诸如B树,文件系统不必保持其i节点的拷贝,存储库不必复制其索引。对于系统管理员来说,这意味着仅管理一个数据临时源,而不是管理不同的临时数据库、不同版本的FS以及不同存档的存储库。
临时卷提供用于保持和存取临时信息的基础设施。临时卷可以在所有级中被应用程序使用,包括文件系统和数据库。此外,通过与文件系统和备份产品(例如VERITAS的文件系统和网络备份产品)结合,临时卷也可以被用作数据档案、版本管理、复制、备份和HSM的构建模块。临时卷保存临时内容,以便在稍后的时间点,该内容可以被用于快照、增量备份、复制、恢复破坏的卷或删除的文件。
通过利用诸如HSM的处理自动地将数据迁移到离线存储器/从离线存储器取回数据,临时卷可以为应用程序提供虚拟无限的存储容量。临时卷也可以与备份实用程序-诸如VERITAS NetBackup-结合,以提供自动备份,包括增量备份。可以利用临时窗口和/或周期检查点设置为临时卷提供周期复制。
临时卷可以被用于包括但不限于以下中一个或多个的领域中的应用程序商业智能/数据挖掘-这是关于从客户数据中找出模式和行为。找到这种结果典型地需要临时数据。例如,通过使用临时数据,零售商可以进行数据挖掘,以找出其客户的使用模式,银行可以分析客户数据,以找出信用历史记录、欺诈等等。
数据仓库-数据仓库是企业数据库,通常用于存储关于特定公司的所有信息。数据仓库是通过数据挖掘工具收集并且用于知识发现的有价值信息的存储库。它们也可以用作不同企业的后端程序(backends)。是在数据仓库中,时间维度可以被存储和用于查询数据,并且每个数据仓库具有使数据仓库成为临时数据库的时间维度,并因此适于这里所述的临时卷。
多媒体和成像-流式音频/视频、图像、电子书以及医疗数据-诸如X射线和MRI-是可以具有某种与其相关的版本管理或流式(随时间变化的分量)的数据的例子。媒体库以临时形式存储媒体文件,并且基于因素-诸如连接速度-使它们流动,图像数据库-诸如卫星成像和环境成像-保持相同位置的多个版本的图像,医疗或临床数据库保持具有X射线、身体扫描等等的患者历史记录。这些是可以以某种形式使用随时间变化的媒体、并因此适于这里所述的临时卷的应用程序的几个例子。
固定内容,也被称作一次写入多次读取(Write-Once-Read-ManyWORM)存储器。通过使用这里所述的临时卷,可以跟踪WORM存储器上的数据到过去的点。
科学计算和实验室-临时卷可以解决存储遗传数据库、数据分析、模式查找、预测、强计算、简单实验室试验、数据监控、信号处理、数学、生物信息学等的问题,所有这些可能具有随时间变化的数据。
数据归档和审计-由于临时卷保存其存储的数据的历史记录,因而该历史记录可以被用于归档,例如通过使历史记录离线,并且将其存储在磁带或其它介质上。随后,可以将该归档用于分析或审计。例子包括但不限于老职工数据库、旧销售数据、普查数据、日志以及服务器历史记录。另一例子是不同法律和法规所需要的调整归档。
数据版本管理-可以在临时卷上实现文档版本管理。
在一个实施例中,在临时卷管理级,可以使用索引系统或结构(例如高速缓存对象、阵列等)保存临时卷的内容。可以将高速缓存对象定义为在使用有限存储器空间时向其用户表达无限存储器假象的对象。通过在高速缓存对象上分配存储器,高速缓存对象可以被用于产生空间优化的快照。高速缓存对象从被称作高速缓存卷的基础卷得到其存储器。高速缓存卷可以增长,只要需要跟上基于策略的无限容量约定。
在一个实施例中,卷可以被分成一个或多个区域。区域可以是从磁盘的一个物理块到千字节、兆字节、千兆字节区域等等的任何地方。卷可以被分成区域,每个区域可以具有与其相关联的时间戳。在一个实施例中,应用程序(文件系统、数据库等)可以指定什么时间戳将与区域相关联。在一个实施例中,时间戳可以在数据被写入到临时卷时由应用程序指定。应该注意,现有技术的系统不允许应用程序在写入时指定时间戳。
在实施例中,临时卷中的数据历史记录可以以多种方式被保存,方式包括但不限于I/O控制的检查点设置、应用程序控制的检查点设置、以及周期检查点设置。
在I/O控制的检查点设置中,使用临时卷的应用程序可以在向临时卷写入和/或从临时卷读取时提供时间戳。在I/O控制的检查点设置中,应用程序可以通过每个I/O请求或者可选地仅通过要处理临时数据的I/O请求而为临时卷管理器提供时间戳。在本文中,术语I/O请求被用于表示任何I/O请求、命令、I/O控制请求、IOCTL、或者应用程序或其它实体用于与卷相互作用-例如读取数据和将数据写入到卷中-的其他机制。在一个实施例中,通过任何I/O请求(例如读取或写入),应用程序可以指定被写入的区域将通过所提供的时间戳而被时间标记。在一个实施例中,在I/O控制的检查点设置中,临时卷管理器可以提供I/O请求接口,其允许应用程序发出指定时间戳的I/O请求(I/O控制命令或请求,诸如UNIX IOCTL)。在一个实施例中,可以通过使用到临时卷管理器的临时读取和临时写入接口而实现I/O控制的检查点设置。例如,临时数据库可以使用I/O控制的检查点设置来通过每次写入而指定时间戳。
附图3是根据一个实施例、通过使用I/O控制的检查点设置而在逻辑设备级管理临时卷的方法的流程图。如300所示,可以首先生成临时卷,以存储应用程序的临时数据。如302所示,临时卷管理器可以从应用程序(或如果使用代理,则从应用程序的代理)接收I/O请求。如果I/O请求是临时请求,则I/O请求可以为临时卷上的临时数据指定一个或多个时间戳。临时卷管理器可以为应用程序(或应用程序代理)提供API,用于存取和请求临时卷上的临时操作。如果I/O请求是临时读取请求,则临时卷管理器可以将由I/O请求所指定的一个或多个时间戳指示的临时数据返回到应用程序,如306所示。如果I/O请求是临时写入请求,则可以根据I/O请求所指定的时间戳生成临时卷的区域的检查点,如308所示,并且临时卷管理器可以将I/O请求所指定的数据写入临时卷,如310所示。
作为通过每次写入而提供时间戳的替代,应用程序可以发出在要求或希望时为区域或者整个卷指定时间戳的I/O请求。该方法可以被称作应用程序控制的检查点设置。在应用程序控制的检查点设置中,可以发出在临时卷内指定新的检查点(时间点拷贝)的I/O请求,而不是通过每次写入而提供时间戳。在应用程序控制的检查点设置中,应用程序告诉临时卷何时创建检查点/版本(临时卷的时间点拷贝)。在一个实施例中,这可以通过使用I/O请求-诸如I/O控制(IOCTL)操作-而完成。通过每个应用程序控制的I/O请求来对一个或多个区域进行时间标记。在一个实施例中,可以自动地在多于一个临时卷上完成应用程序控制的检查点设置。
附图4是根据一个实施例、通过使用应用程序控制的检查点设置来在逻辑设备级管理临时卷的方法的流程图。如400所示,可以首先生成临时卷,以存储应用程序的临时数据。然后,应用程序可以对临时卷进行一个或多个“标准”读取和/或写入,这可以不指定时间戳,并因而不生成临时卷的检查点。如402所示,临时卷管理器可以从应用程序接收对于临时卷的指定要产生新检查点的I/O请求。然后,临时卷管理器可以根据由I/O请求所指定的时间戳而产生临时卷的检查点,如404所示。
另一种方法是周期地进行自动检查点设置,例如每10秒钟或每10分钟。这可以被称作周期检查点设置。在周期检查点设置中,临时卷管理器可以提供接口,以允许在逻辑设备(卷)级通过临时卷管理器的周期检查点设置的配置。在周期检查点设置中,临时卷基础设施(例如临时卷管理器)周期地创建数据的新检查点。这优选地节省了通过存储对数据的每个变化而可能已经浪费的存储空间。注意,在现有技术中,每次写入典型地被保存。
附图5是根据一个实施例、通过使用周期检查点设置而在逻辑设备级管理临时卷的方法的流程图。如500所示,可以首先产生临时卷,以存储应用程序的临时数据。如502所示,临时卷管理器然后可以从应用程序接收可以不指定时间戳、并因而不产生临时卷的检查点的I/O请求。在一个实施例中,I/O请求可以指定应该获取检查点的时间间隔(或周期)。如504所示,临时卷管理器可以周期地产生临时卷的检查点(例如每n分钟、小时或天)。注意,在一个实施例中,临时卷管理器可以从应用程序接收指定时间戳并且指定在正使用周期检查点设置时将产生检查点的I/O请求。
如果应用程序正使用临时写入接口,则应用程序可以随写入数据指定时间戳,并且卷管理器执行临时写入。在一个实施例中,时间戳应用于特定写入,被存储在卷上的其他数据可以具有或不具有与其一起存储的临时信息。换句话说,在一个实施例中,卷上的一些数据可以是临时的,而卷上的其它数据可以不是临时的。如果数据不是临时的,则其不被时间标记。在一个实施例中,数据将只在应用程序发出I/O请求以对数据进行时间标记的情况下、或者在执行周期检查点设置的情况下才被时间标记。这可以应用于一个或多个区域或整个卷。
临时卷具有作为维度的时间。在一个实施例中,临时卷管理器可以提供接口,以允许用户遍历临时卷内的时间维度(历史记录)。例如,用户可以通过使用接口而遍历临时卷的时间维度,以对临时卷历史记录的先前时间点上临时卷的数据执行一个或多个操作。这种操作的例子可以包括以下一个或多个,但不限于以下为临时卷上数据的特定版本或值搜索时间维度;将临时卷恢复到临时卷历史记录中特定时间点的状态;产生临时卷的时间片或时间点图像等等。一个实施例可以提供产生临时卷的临时图像的机制,其中临时图像具有其自己独立的历史记录。
一个实施例可以提供产生临时卷的时间片图像的机制。在一个实施例中,临时卷管理器可以提供允许用户/应用程序请求区域-例如时间戳T1和T2之间-的内容的接口(时间片图像)。时间片图像本身是临时卷,但是其范围被最初限制在时间戳T1和T2之间。时间片图像是临时卷在两个时间戳之间的片段。临时卷的时间片图像表示临时卷上数据的历史记录的片段。时间片图像可以被看作是也可以保存其自己的历史记录的单独临时卷。在一个实施例中,可以在时间片图像上执行读取和写入。可以在时间片图像上执行其它操作,例如数据挖掘。例如,可以在一个周期上收集数据,可以取该周期内一个月(例如八月)的时间片图像,并且可以对时间片图像执行数据挖掘或其它操作。
附图6是根据一个实施例、产生临时卷的时间片图像的方法的流程图。如600所示,可以首先产生临时卷,以存储应用程序的临时数据。如602所示,然后临时卷管理器可以从应用程序接收临时和/或非临时的I/O请求,至少一些这些I/O请求可以产生临时卷的检查点。注意,如果正在使用周期检查点设置,则临时卷管理器周期地产生临时卷内的检查点。如604所示,临时卷管理器可以从应用程序接收对于临时卷的请求创建临时卷的时间片图像的I/O请求。响应于I/O请求,临时卷管理器可以根据I/O请求所指定的两个时间戳产生临时卷的时间片图像,如606所示。
一个实施例可以提供产生临时卷的时间点临时图像的机制。时间点图像是卷在单个时间处的图像,并且可以被认为是临时卷的一维图像。时间点图像可以被用作临时图像的基础。于是,时间点图像可以被认为是被初始化到图像所基于的那个时间点的临时卷。如果通过每个I/O(写入)提供时间戳,则存在卷的有限数量的时间点图像。临时卷可以被认为是包括两个或多个时间点图像的数据卷。两个或多个时间点图像可以被组合。临时卷的时间片图像可以包括两个或多个时间点图像。
附图7是根据一个实施例、产生临时卷的时间点图像的方法的流程图。如700所示,可以首先产生临时卷,以存储应用程序的临时数据。如702所示,然后临时卷管理器可以从应用程序接收临时和/或非临时的I/O请求,至少一些这些I/O请求可以产生临时卷的检查点。注意,如果正在使用周期检查点设置,则临时卷管理器周期地在临时卷内产生检查点。如704所示,临时卷管理器可以从应用程序接收对于临时卷的、请求创建临时卷的时间点图像的I/O请求。响应于I/O请求,临时卷管理器可以根据I/O请求所指定的时间戳产生临时卷的时间点图像,如706所示。
一个实施例可以提供确定临时卷上数据的两个版本之间的增量变化的机制。确定增量变化可以被用于应用程序,诸如增量备份、复制等等。在一个实施例中,临时卷管理器可以提供接口,用于确定临时卷在任意两个时间点之间的变化是什么。例如,可以在一段时间周期上执行时间标记。用户可能希望备份或者归档两个时间之间的数据。可以创建增量图像。增量图像是差别图像。增量图像可以被用于产生从时间T1到时间T2(例如从一个时间点到前一备份时间)的备份或复制。临时卷内容可以被用于识别差异。这种机制优选地使得更容易实现增量备份或复制应用程序或实用程序;代替必须计算出变化并且管理快照的应用程序或实用程序,临时卷管理器管理快照。备份或复制应用程序只想临时卷管理器请求临时卷在时间T1和T2之间的内容(或内容的差异或变量增加)。
在一个实施例中,可以截取保持在临时卷内的数据的历史记录,例如使用I/O请求,诸如IOCTL。可能要求或希望截取,因为空间不足或者因为不再需要该历史记录。在一个实施例中,基础设施可以允许临时卷的用户设定确定保持多少历史记录的临时窗口。可以自动截取落入到临时窗口之外的变化。在一个实施例中,临时卷管理器可以提供截取临时卷以释放空间的接口。例如,接口可以允许应用程序指定信息将被临时卷保持三个月。三个月以前的信息可以被临时卷管理器删除。周期地,例如每天或每周,可以删除三个月以前的数据。
一个实施例可以提供从其一个时间点图像和/或从两个特定时间戳之间的时间片图像中快速恢复卷的机制。例如,如果应用程序每十分钟对其数据进行时间标记,并且卷由于某种原因被破坏,则可以通过利用临时数据(例如,最近未被破坏的时间标记的临时数据)而进行卷的恢复。
临时卷和临时卷管理器下面描述通过使用卷管理器和高速缓存对象而在逻辑设备级保持数据存储器中的临时数据的系统和方法的示范性实施例。注意,这些实施例是示范性的,并且可以使用能够实现临时卷的其它机制。这些实施例提供用于从应用程序接收对于临时卷的I/O请求的装置,以及用于响应于I/O请求而对临时卷执行逻辑设备级临时操作的装置,。
实施例可以提供创建和使用临时卷的机制,例如通过使用卷管理器-例如VERITAS的卷管理器(VxVM)。一个实施例可以使用高速缓存对象,用于归档数据的历史记录。一个实施例可以提供允许临时卷的应用程序或用户除了正常卷操作之外还执行基于时间的操作的一个或多个接口。
在卷管理器-例如VxVm-内,可以通过使用索引系统或结构(例如,高速缓存对象、阵列,B+树等等)实现临时卷。在一个实施例中,高速缓存对象可以被用于实现临时卷。附图8表示根据一个实施例的示范性高速缓存对象。如图8所示,高速缓存对象是在使用有限存储器空间时向其用户表现“无限的”存储器的对象。高速缓存对象也可以被认为是空间优化的永久存储。在一个实施例中,高速缓存对象可以允许用户创建空间优化的快照。在高速缓存对象上被创建,空间优化的快照优选地不使用与其原始卷一样多的存储器。仅当实际数据在原始卷上改变时,实际数据才被写到空间优化的快照上(被称作根据写入进行拷贝(copy-on-write))。基础高速缓存对象提供空间优化的快照所需要的任何存储器空间。高速缓存对象又从高速缓存卷中导出其存储器。根据某些用户定义的策略,高速缓存对象通过在需要时增加高速缓存卷而保持无限存储器的假象。
在一个实施例中,支持高速缓存对象中空间优化的基础技术是I/O块的重新定向。高速缓存对象通过使用永久转换映射完成重新定向。这些转换映射可以被存储在相同的物理存储器(高速缓存卷),该物理存储器将存储在根据写入进行拷贝时写入空间优化快照的数据。此外,高速缓存对象允许通过允许在其顶部划出(carve out)多个存储单元而在其顶部创建多个空间优化的快照。
高速缓存对象可以允许在其顶部创建多个存储单元。这意味着,高速缓存对象可以为不同卷提供多个虚拟可寻址范围。这样,每个转换由包括存储单元标识符的搜索关键字和映射到高速缓存卷上数据的物理偏移的卷偏移组成。根据检索关键字的大小,可检索的地址空间可以非常大,并且如果提供巨大的存储器空间(如果不是无限的),则可以更大。这意味着,将用于重新定向或转换到实际数据块的结构应该是高度可检索和有效的。B+树是适于这种要求的一种结构,并且为了示范性目的而在这里被用于实施例中,但是应当注意,在其它实施例中可以使用其它结构。
在一个实施例中,高速缓存对象的B+树可以与其它元数据-诸如超块、恢复日志区域、自由块列表等等-一起被存储在高速缓存卷上。元数据之后的区域被用于存储数据区域。高速缓存对象中每个B+树节点是页面大小的(例如由卷管理器确定)。该树中的叶节点指向高速缓存卷上的实际物理数据块。
在一个实施例中,高速缓存对象上的每个I/O被重新定向。可以通过使用B+树完成重新定向,并且I/O执行B+树路径(walk),以首先定位高速缓存卷上数据的物理偏移。对“有效”区域的所有读取和写入可能都需要被重新定向。如果应用程序想区域写入一次或多次,则认为该区域是“有效的”,否则认为其是“无效的”。在向卷的无效区域写入的情况下,高速缓存对象可以为新的偏移分配B+树中的新入口;这可以被称作为分配写入。
进一步的写入可以覆写先前的内容。在一个实施例中,所有写入被作为独立的分配写入处理,以便保存早期的内容。
附图9表示根据一个实施例的临时卷TVOL的构造。TVOL可以具有正常的数据丛P1、P2等等。丛在下面的术语表中定义。还有被称作Pt的特定丛,其保持临时数据。Pt具有一个存储单元SDt,其可以在高速缓存对象上被创建。该高速缓存对象又从高速缓存卷中导出其存储器。在一个实施例中,高速缓存对象可以通过使用前面所述的B+树而重新定向写入。在另一实施例中,可以仅存在Pt,而没有到临时卷的正常数据丛。
只要通过使用正常的写入对卷进行改变,改变就可以被反映到所有丛,包括Pt。虽然正常的丛-如P1或P2-可以只用新数据覆写现有数据,但是Pt可以在还未被时间标记的最新数据上写入。如果该最新数据已经被时间标记,则新数据可以被写入在新位置,而不需要向其分配任何时间戳。
在一个实施例中,对于临时操作来说,将对所有的丛-包括Pt-进行写入。临时操作要求指定时间戳。在一个实施例中,可以处理临时写入,如图10所示。
附图10表示根据一个实施例、对临时卷上数据块的变化的处理,并且还表示在给定的时间高速缓存对象下的结构。高速缓存对象下面的高速缓存卷可以包括树状结构,其叶子保持指向磁盘上实际数据块的指针。对还不在高速缓存对象中的区域B的写入(分配写入)可以通过时间戳T0分配入口B0。如果B的内容改变,则可以在高速缓存卷(B1)上分配新的区域,而不是通过时间戳T1覆写B0。高速缓存对象可以将B1添加到列表。B1包含块的最新拷贝,而B0是先前的拷贝。在对块B进行更多改变时,这种链接可以继续。如果进行n个改变,则可以通过时间戳Tn至T0按顺序Bn...B2,B1,B0链接块。这种链接可能导致非常长的链。在一个实施例中,在这种情况下,链本身可以被转换成树,以更快索引。在一个实施例中,如稍后所述的时间戳可以通过拷贝列表中的每个节点而被保持,以便识别内容。
在一个实施例中,当块改变时,可以在高速缓存对象下链接旧版本。实际上,高速缓存对象正保持卷下面所有数据块的历史记录。在一个实施例中,虽然可以在正常丛P1、P2等等中找到最新拷贝,但是只有更旧的版本可以被存储在Pt下(参照附图9)。这样,在当前数据和历史记录数据之间存在简单的描绘。这还允许直接在Pt上进行新的临时操作,而不是操作所有丛或丛的子集。
在一个实施例中,临时卷可以使用时间戳,以实现版本管理。临时卷上的正常写入不实现临时性。在一个实施例中,为了保持改变的数据的历史记录,用户或应用程序可以使用临时写入接口(以下进一步描述)。当使用正常写入时,新的数据简单地覆写旧的数据。在临时写入时,新数据被链接到旧数据,并且被标记以给定的时间戳。在一个实施例中,可以通过应用程序提供时间戳。
在一个实施例中,时间戳是可彼此比较的,并且可以被设置,使得它们可以以临时顺序排列。这对临时读取操作和对于获得关于数据历史记录的信息可能是希望的或者要求的。可以被用于时间戳的数据类型可以包括但不限于整数数据类型。在实施例中,时间戳可以是实际系统时间、版本号、增量计数器、或任何其它适当的形式。在一个实施例中,可以不需要时间戳可被卷管理器解释。不必解释时间戳的卷管理器也可以允许用户具有有效的数据时间,其可以是将来的时间。然而,不必解释时间戳的卷管理器也意味着,临时卷不能保证时间戳所示时间的相干性。因此,在一个实施例中,由应用程序或用户保持相干的时间戳。在一个实施例中,用户可以使用稍后所述的应用程序代理框架,以便推掉时间戳维护。
在一个实施例中,虽然临时卷可以保持“无限的”历史记录(由于高速缓存对象所提供“无限的”存储器),但是用户可能希望只保留历史记录的一部分或窗口。例如,一些应用程序可能仅对当前的和前一版本的数据感兴趣,从而需要一个改变/版本的临时窗口。可选地,一些应用程序可能希望保持仅一段时间的历史记录,例如最近n分钟、小时、天等等,在这种情况下,临时窗口是n分钟、小时、天等等。
在一个实施例中,临时窗口可以在临时卷创建期间被设置,并且如果希望或要求可以在随后被改变。临时窗口外临时数据的任何改变不被存储,并因此被丢失。因此,如果临时窗口例如是5分钟,则5分钟前的任何改变是不可获得的。在一个实施例中,缺省地,临时窗口被认为是“无限的”。增加临时窗口就增加了历史记录的量,而减少临时窗口则可以要求临时卷截取历史记录。
临时窗口的使用通过上面给出的例子是显而易见的。对于1-变化的临时窗口来说,仅保持数据的当前和上一版本。例如,这可能对于使用两个版本之间差异的增量备份或复制是有用的。由于仅差异正被使用,因而可以优选地优化带宽使用。在第二例子中,临时窗口是5分钟。这可能对于例如周期增量备份或周期复制是有用的。如果用户希望每n分钟、小时、天等等递增地备份数据,则可以使用略大于n的临时窗口,并且版本之间的差异可以被用于增量备份。
卷的临时窗口可以被表示为一对时间戳<Ta,Tb>,其中Ta是最早的时间戳,Tb是最晚的时间戳。当创建临时卷时,可以不定义临时窗口,直到对卷的第一临时写入。在具有时间戳TX的第一写入上,临时窗口被初始化为<TX,TX>。进一步的临时写入(例如具有时间戳Ti)将临时窗口改变为<TX,Ti>。当从TX到Ty截取历史记录时(稍后详细描述),临时窗口变成<Ty,Ti>。
一个实施例可以提供允许临时卷上临时I/O操作的一个或多个接口。在一个实施例中,正常卷上允许的操作在临时卷中可以被类似地或相同地处理。在一个实施例中,临时卷上的正常(非临时)读取可以与其在正常卷中所进行的那样类似或相同地进行。如果没有正常丛(但是仅有临时丛Pt),则可以返回没有时间戳的数据。如果不存在任何没有时间戳的数据,则可以返回具有最后的时间戳的数据。在一个实施例中,临时卷上的正常写入可以与在正常卷上类似或者相同地进行,除了创建没有数据的空间优化的快照(在本文中稍后描述)。在一个实施例中,虽然在临时卷上可以如在正常卷中那样进行正常读取,但是对于检索数据的过去拷贝,可以定义一个或多个I/O请求。
一个实施例可以提供允许用户读取过去特定时间范围的内容的接口。在一个实施例中,可以通过卷上的偏移(offset)及其长度(length)指定范围。在一个实施例中,可以通过使用时间戳来指定需要内容的时间,并且时间戳的解释可以留给用户。在一个实施例中,时间戳类型优选地是由卷管理器(例如VxVM)指定的类型,使得可以在其上进行整数比较。时间戳的例子可以包括但不限于对数据库,时间戳可以表示被表示为与纪元相距的秒钟数量的事务时间;对于版本管理系统,时间戳可以表示版本号;对于文件系统,时间戳可以是系统时钟所表示的时间;以及对于一些其它应用程序,时间戳可以是整数计数器。
在一个实施例中,如果时间戳是0,则可以返回数据的当前拷贝。这等价于正常读取。如果时间戳是负的,如-n,则返回数据的前面第n个拷贝。这可能对于例如对实际时间不感兴趣而仅对变化或版本感兴趣的应用程序是有用的。
下面是示范性的API,其中实施例可以提供设备级的临时卷上的多种临时操作。注意,这些API是示范性的,而不是限制性的。
一个实施例可以提供可以被用于返回作为未解释字节缓冲器的范围的内容。可以通过使用其设备号(装置)来指定卷。下面是UNIX环境中API的示范性形式void*vol_temporal_read(voldevno_t device,timestamp_t timestamp,voff_t offset,size_t length);
在一个实施例中,vol_temporal_read可以使用设备上的IOCTL(例如VOL_TEMPORAL_READ)。VOL_TEMPORAL_READ是示范性的IOCTL,用于将[offset,length]对所指定的数据读取到用户所提供的缓冲器中。可以通过时间戳指定要读取的拷贝。VOL_TEMPORAL_READ返回与所指定的时间戳匹配(或者最接近时间戳)的区域。下面是被返回的结构的示范性形式struct vol_temporal_io{int flags;/*Flags*/timestamp_t timestamp;/*Timestamp*/caddr_t buf; /*Buffer*/size_t buf_len; /*Length of the buffer*/voff_t offset; /*Offset*/}一个实施例可以提供可以用于从一段时间读取的API。这种接口可以允许用户读取两个时间点之间范围的所有版本。可以通过使用偏移和长度来指定范围。在该接口中,可以提供两个时间戳,第一个对应于时间周期的开始,第二个对应于结束。在一个实施例中,包括二者。在一个实施例中,如果这两个时间戳(例如period_start和period_end)相等,则返回周期开始时的拷贝。如果这两个时间戳都是0,则返回当前拷贝。如果两个时间戳是负的,比如说分别是-m和-n(m>n),则返回前面第m个和第n个拷贝之间的所有拷贝(在一个实施例中,包括二者)。下面是API的示范性形式void*vol_temporal_period_read(voldevno_tdevice,timestamp_tperiod_start,timestamp_tperiod_end,voff_t offset,size_t length);
在一个实施例中,vol_temporal_period_read可以使用设备上的IOCTL(例如VOL_TEMPORAL_PERIOD_READ)。IOCTL返回两个时间点之间范围[offset,len](周期)的所有拷贝。通过使用开始和结束时间戳来指定周期。在返回实际数据之前,IOCTL可以被用于找出缓冲器的大小。对此,可以提交空缓冲器,并且IOCTL仅返回其可以找到的区域的数量(reg_num)。一旦用户已经找出区域的数量,可以在缓冲器中内存,并且可以再次调用IOCTL。用户优选地为将描述缓冲器内区域拷贝布局的结构(例如period_reg_t)分配足够的内存。第二时间,IOCTL将返回两个指针第一个是用户缓冲器本身(buf),其可以被区域内容的拷贝相继地填充。每个拷贝可以具有不同的大小,因为可以从区域中删除块。第二个指针(reg_ptr)是指向描述用户缓冲器内区域布局及其拷贝的结构。该结构可以被认为是矩阵,其中每行描述范围的单个拷贝,列描述一个拷贝内的区域。下面是被返回的结构vol_temporal_region_period_io的示范性形式typedef struct period_reg{voff_t vtbr_offset;/*Region offset*/timestamp_t vtbr_timestamp; /*Copy timestamp*/struct period_reg*vtbr_next_region; /*Next region*/struct period_reg*vtbr_prev_region; /*Previous region*/struct period_reg*vtbr_next_copy;/*Next copy*/struct period_reg*vtbr_prev_copy;/*previous copy*/}*period_reg_t;
struct vol_temporal_region_period_io{int flags; /*Flags*/timestamp_t start_timestamp;/*Period start*/timestamp_t end_timestamp; /*Period end*/caddr_t buf;/*Buffer*/period_reg_t reg_ptr;/*Data layout*/size_t buf_len;/*Buffer length*/caddr_t reg_num;/*Number of register*/voff_t offset; /*Extent offset*/size_t len;/*Extent length*/}在一个实施例中,临时写入与正常写入一样,但是包含用户定义的时间戳。临时写入的示范性接口是size_t vol_temporal_write(voldevno_tdevice,timestamp_ttimestamp,void *buffer,voff_t offset,size_t length);
可以通过使用其设备号(设备)来指定该卷,并且可以在缓冲器中提供要写入的数据。要写入的时间与范围一起被提供在时间戳中,并且优选地不小于范围的当前时间戳(如果存在的话)。可以如通常的那样通过使用[offset,length]对来指定范围。用于该函数的内核IOCTL(例如VOL_TEMPORAL_WRITE)通过使用给定的时间戳而想临时卷上的区域写入。
struct vol_temporal_region_io{intflags;/*Flags*/timestamp_ttimestamp;/*Timestamp*/caddr_tbuf; /*Buffer*/size_t buf_len; /*Length of the buffer*/voff_t offset; /*Offset*/}下面是可以用于在时间戳所指定的时间之前截取临时卷(设备)的历史记录的示例性接口int_vol_temporal_truncate_history(voldevno_t device,timestamp_t timestamp);
返回值是状态指示。该函数又使用IOCTL(例如VOL_TEMPORAL_TRUNCATE);该IOCTL截取临时卷的历史记录。用户可以指定这样的时间,即在该时间之前应当通过使用时间戳而删除历史记录。
struct vol_temporal_truncate{int flags; /*Flags*/timestamp_t timestamp; /*Timestamp*/}下面是改变临时窗口的示范性接口int vol_temporal_change_window(voldevno_t device,timestamp_t new_window,twindow_twindow_type);
可以通过使用时间戳类型来指定新的临时窗口(new_window)。其解释取决于窗口类型。例如,其可以是基于时间的、基于改变数量的,或者基于当前和最老时间戳之间差异的(由于不解释时间戳)。该函数可以使用IOCTL(例如VOL_TEMPORAL_CHANGE_WINDOW)来改变临时卷的临时窗口。如果新窗口小于旧窗口,则该IOCTL可以执行必要的历史记录截取动作。下面是IOCTL的示范性结构形式
struct vol_emporal_change_window{intflags; /*Flags*/timestamp_twindow;/*New Window*/twindow_t type; /*Window type*/}为了中止临时卷(设备)内改变或版本管理的保持,可以使用下面的示范性接口int vol_temporal_pause_history(voldevno_t device);
int vol_temporal_resume_history(voldevno_t device);
这两个函数返回相应操作的状态。它们使用内核IOCTL(例如VOL_TEMPORAL_PAUSE,VOL_TEMPORAL_RESUME);这些IOCTL分别使历史记录保持中止或恢复。该操作可以是有用的,例如对于为了归档目的使整个历史记录离线。在卷中止期间,通过落入被中止间隔中的时间戳对卷进行的任何改变可能被丢失。可选方案是使那些I/O失效。
为了在临时卷内得到关于数据历史记录的信息,可以使用下面的示范性接口int vol_temporal_info( voldevno_t device,voff_t offset,unsigned int *copy_num,timestamp_t *min_timestamp,timestamp_t *max_timestamp,timestamp_t **change_timestamps,voff_t **changed_regions);
可以通过使用其设备号(设备)来指定临时卷。如果特定区域需要历史记录,则可以通过使用其偏移来指定。如果该偏移是负的,则可以为整个卷返回信息。返回的第一片信息是区域的拷贝数量(copy_num)。区域上的最小和最大时间戳分别是min_timestamp和max_timestamp。change_timestamps是区域上所有时间戳的列表。如果整个卷需要信息,则可以返回所有被改变区域的列表(changed_regions)。上面的接口可以使用IOCTL(例如VOL_TEMPORAL_INFO),以得到关于历史记录的信息,诸如拷贝数量、时间戳、被改变块列表等等。下面是VOL_TEMPORAL_INFO的示范性结构struct vol_temporal_info{voff_t offset; /*Offset of region*/caddr_t copy_num; /*Number of copies*/caddr_t start_timestamp; /*First modification*/caddr_t end_timestamp;/*Last modification*/caddr_t change_timestamps;/*List of timestamps*/caddr_t changed_regions; /*List of changed region offsets*/}由于临时卷保持过去所有卷拷贝,因而一个实施例可以提供获取特定时间点处卷的完整图像的机制。该图像可以是表示特定瞬间卷内容的单独卷。该图像可以是全数据的(data-full),在这种情况下,所有块被拷贝到新存储器上,或者是无数据的,在这种情况下,不存在实际数据拷贝,而仅存在指向原始临时卷的一些跟踪结构。
附图11表示根据一个实施例的非临时快照。如果原始卷是临时卷,则可以避免在覆写快照原始卷上的数据时所进行的数据的根据写入进行拷贝。如图11所示,TVOL是其上出现正常I/O的临时卷。在不存在临时卷的临时应用程序的情况下,在丛Pt下不保持历史记录,并且区域在其上不具有时间戳。当在T0获取快照时,Pt下的所有区域被标以时间戳T0,因此避免了在这些区域上的任何进一步的写入。如果如果对TVOL进行任何新的写入,例如在T1时,则其将发现被用T0时间标记的区域,并且不将覆写。作为代替,其将与旧数据链接(在T0)。
如果TVOL是正常卷,则当在T1发生写入时,其将已经将区域的旧内容(在T0的那些)推到STVOL(快照临时卷,或者临时快照),这是因为根据写入进行拷贝的策略。这可能是需要的,因为STVOL表示T0的TVOL图像。然而,由于TVOL是临时卷,因而不需要根据写入进行拷贝。当在T1发生写入时,TVOL可以自动地对区域进行版本管理(version),因为其已经被时间标记以T0,并且因此T0时的区域内容仍然可以在Pt下得到。在正常情况下,只有在区域是无效的情况下,才从TVOL满足读取。因此,在STVOL的情况下,所有区域最初都被标记为无效的。只要从STVOL读取区域,其就与时间标记T0一起被重定向到TVOL。这将读取T0时的区域内容,而不是当前内容(在T1)。
如果在STVOL上发生写入,则首先从TVOL中取出相应的块(具有时间戳T0),然后将其写入。然后,该区域被标记为有效的,因为其拷贝在STVOL内,并且起不需要被重定向到TVOL。如果整个区域被写入,则这可以被进一步优化。在这种情况下,可以跳过提取部分。
附图12表示根据一个实施例从临时卷中导出空间优化的临时快照。原始临时卷是具有临时窗口<Ta,Tb>的TVOL。当在Tn创建临时快照STVOL时,其临时窗口变成<Tn,Tn>,其中Ta<=Tn<=Tb。快照创建操作首先创建丛(p2,Px等等),然后是高速缓存对象和快照卷STVOL。然后,其将STVOL的所有区域设置成“无效的”。在一个实施例中,STVOL上的I/O可以如下地进行对时间Tx时STVOL的临时读取,如果区域是-无效的,则执行对Tn时TVOL的临时读取,并且返回数据。Tn是产生快照的时间。
-有效的,则如果Tx>Tn,就执行Tx时STVOL的临时读取,其中Tx是在STVOL上修改区域的时间;这将是区域的最新拷贝。否则,执行从TVOL的临时读取。
对时间Tx时STVOL的临时写入,如果区域是-无效的,则通过使用Tn时的临时读取而从TVOL得到区域的旧数据,将新数据覆盖在旧数据上,通过通过使用临时写入和时间戳Tx(Tx>Tn)来向STVOL写入。在映射中将该区域设置成有效的,并且将STVOL的临时窗口变成<Tn,Tx>。
-有效的,则通过时间戳Tx在STVOL自身上进行临时写入,并且将STVOL的临时窗口改变成<Tn,Tn>。
片是原始临时卷在一个时间段上的切割,而与快照不同,快照是时间点图像。因此,具有临时窗口<Ta,Tb>的临时卷的片保持从Ti到Tj的历史记录子集,其中Ti>=Ta,Tj<=Tb。
在一个实施例中,创建临时卷的一个片可以与创建快照相似。首先进行分配,包括创建丛、高速缓存对象,并最后创建卷STVOL(快照临时卷,或临时快照)。然后,映射中的所有区域被标记为无效的,并且片的临时窗口被设置成<Ti,Tj>。在一个实施例中,STVOL上的I/O可以如下地进行对时间Tx时STVOL的临时读取。如果区域被标记为-无效的,则通过时间戳Tx执行TVOL上的临时读取-MODIFLED,则如果Tx>Ti,就执行对Tx时STVOL的临时读取,其中Tx是在STVOL上修改区域的时间;这将是区域的最新拷贝。否则,执行从TVOL的临时读取。
对时间Tx时STVOL的临时写入。如果区域被标记为-无效的,则通过使用Ti时的临时读取而从TVOL得到区域的旧数据,将新数据覆盖在旧数据上,通过使用临时写入和时间戳Tx(Tx>Tj)而向STVOL写入。在映射中将区域设置成有效的,并且将STVOL的临时窗口改变成<Ti,Tx>。
-有效的,通过时间戳Tx执行STVOL自身上的临时写入,并且将STVOL的临时窗口改变成<Ti,Tx>。
在一个实施例中,由于临时卷上的数据历史记录被保存在卷自身中,因而可以将卷返回到其过去的状态。如果临时卷(TVOL)具有临时窗口<Ta,Tb>,并且用户希望将卷恢复到其在时间Tk的状态,其中Ta<=Tk<=Tb,则在一个实施例中可以以下面的方式进行该过程如果用户希望删除历史记录-参考TVOL的映射,并且对于每个有效区域,删除时间戳>Tk的所有区域拷贝(这基本上意味着将数据块返回到空闲池)。
如果用户希望保留历史记录-参考TVOL的映射,并且对于每个有效区域,找到在时间Tk时的区域拷贝的偏移(在高速缓存对象上);例如,如果其是Bx,则将时间Tr时区域拷贝的偏移设置成Bx,其中Tr是开始恢复的时间。
一个实施例可以提供从其时间点图像之一恢复临时卷的机制。该过程可以与前面部分中所描述的类似。代替使用TVOL的映射,可以使用快照的映射。然而,这种类型的恢复可以包括数据移动,因为可能已经独立地修改了快照。一个实施例可以提供从其片之一恢复临时卷的机制。片可以已经被修改或未修改。恢复可以改变一部分或全部历史记录,并且可能要求复杂的数据移动。
前面已经描述了用于在临时卷上进行I/O和相关操作的接口的示例性实施例。下面描述示范性的用户级接口,其从应用程序的观点看是可以有用的,而不是先前所描述的一般接口,并且其不是限制性的。
如果应用程序希望连续地跟踪卷的区域的变化,则应用程序必须提供时间戳,并且使用临时写入接口,以向卷写入。对仅对保持历史记录感兴趣的应用程序来说,这可能产生大的开销。下面描述的示范性接口不要求用户在向临时卷(dev name)写入时指定时间戳。下面是不需要时间戳的、用于向临时卷写入的示范性APIint temporal_sys_write(char*dev_name,void*buffer,unsigned intoffset,unsigned intlength);
当读取时,用户可以通过使用时间串来指定时间戳(例如“Jan 202003,2:10pm”),如下面用于从临时卷读取的示范性API中所示void temporal_sys_read(char *dev_name,char*time_string,unsigned intoffset,unsigned intlength);
对于数据库来说,可能希望在块上进行I/O。一个实施例可以为临时卷提供块级APIs,以由数据库(或其它应用程序)使用。在一个实施例中,可以提供下面的示范性接口作为块级APIs
void temporal_block_read(char *dev_name,unsigned int block_offset);
void temporal_block_period_read( char *dev name,timestamp_t period_start,timestamp_t period_end,unsigned intblock_offset,unsigned int*copy_num);
int temporal block write(char*dev_name,void *buffer,timestamp_t timestamp,unsigned int block_offset);
int temporal_block_info(char *dev_name,unsigned intblock_offset,imestamp_t *min_timestamp,timestamp_t *max_timestamp,timestamp_t **change_timestamps);
虽然应用程序可以通过使用前述接口来存取临时特征,并且在一个实施例中,使用一个或多个卷管理器库(例如VxVM库),但是可能发生以下情况,即所提供的接口或API不足够,并且应用程序希望调整接口以满足他们的需要。例如,数据库可能对查询处理的块提取更感兴趣,文件系统可能根据范围进行它们的业务,存储库可能提取整个对象。一个实施例可以提供基于代理的框架,其可以允许应用程序写入代理,其中代理更特定于应用程序的特殊请求。
在本文中,代理是代表应用程序与临时卷交互作用、并且支持应用程序的(一些或全部)语义的中介器。代理优选地使应用程序更易于与临时卷交互作用。此外,代理可以允许应用程序以所需的形式提取数据,而不仅是作为原始数据。对临时卷来说,这可以没有任何差异,但对应用程序来说,这可以是有利的。
在一个实施例中,在应用程序侧,代理可以输出任何适于应用程序需要的接口。在卷侧,代理可以使用由临时卷基础设施已经提供的接口,例如前述接口。代理的形式可以是库、实用程序或者甚至脚本。代理可以作为异常分支点(hooks)而被写入应用程序中(如俘获特定调用),或者可选择地,代理可以被紧密地集成到应用程序中。在一个实施例中,临时卷可以提供标准库和命令集,可以通过使用该标准库和命令组写代理。
代理可以被用于例如不支持临时操作、但是希望通过使用在此描述的临时卷而支持临时操作的现有系统。下面是可以使用代理的一些示范性情况。
在第一种示范性的情况中,一些数据库可能不支持临时操作或数据,但是希望使用临时卷。对这些数据库来说,可以创建数据库,并且数据库代理可以被用于重新定向具有与其关联的时间维度的操作。这样,现有的不是临时的数据库可以添加数据库代理层,该数据库代理层用作临时卷的接口,以支持临时操作。
在第二种示范性的情况,存储库可以使用代理作为临时卷的接口,以临时地存储和检索它们的数据对象。只要对象改变,就可以将改变要求重新路由到对象代理,该对象代理将对象写到与旧对象所位于的位置完全相同的位置。由于在临时卷上创建存储库,因而仅版本管理已经改变的块。在提取特定时间戳的对象版本时,对象代理将适当的时间戳添加到卷读取,因此返回对象的旧版本,而没有降低索引或提取性能。
在一个实施例中,前面所描述的、临时卷的临时窗口参数和/或周期检查点设置工具可以被用于执行周期复制。周期复制周期地复制一组卷,而不是在改变发生时在改变上传送。这种方式具有的优点包括但不限于减少的I/O等待时间(与同步复制比较),以及日志不是必需的(与异步复制相反)。可以将临时窗口设置成略大于复制周期;这样,仅保存周期内发生的变化。仅将变化发送到区域,而不是整个区域拷贝,这可以进一步优化复制。可以通过使用数据的最新拷贝以及上上次复制时(上一周期的末尾)的数据拷贝来计算这些改变。
临时应用程序可以生成过量数据,该数据可能被要求在临时卷内保留延长的周期。使较老的历史记录离线同时保持最近的历史记录在线可以是有用的,例如,如果用户不希望失去变化,但是希望使用最近的历史记录。在这种情况下,临时窗口是“无限的”。这导致在临时卷内具有过去数据的全部状态,这可能需要大量存储器。在一个实施例中,可以将HSM(分层存储器管理)用于在应用程序在线时将偶尔存取的数据和/或历史记录透明地移动到其它介质(例如磁带或光盘)。
在一个实施例中,临时卷可以与备份实用程序集成。备份实用程序可以使用增量备份技术,以便仅存储对文件所进行的变化,由此优化进行备份所需的宽带。网络备份实用程序可以在中心(没必是单一的)备份服务器存储备份,这允许许多应用程序客户端仅分享备份的一个实例。通过使用临时卷,可以在逻辑设备级自动地进行增量保存,并且因而不需要显式地计算和存储文件的增量。临时卷也可以被用于版本管理多客户端的变增量。如果多个用户独立地改变一个文件,则可以将多个版本存储在相同临时卷内,这有助于随后提取文件版本。
在一个实施例中,临时窗口可以允许备份实用程序跟踪客户端侧上文件的变化。一个变化的临时窗口可以被用于连续地跟踪变化。可以优化获取增量,因为原始内容无需(不必)被从服务器中取出,但是代替地可以通过使用数据先前状态的临时读取而被检索。在一个实施例中,可以在客户端侧上创建增量。
术语表分层存储器管理(Hierarchical Stroge ManagementHSM)-一组提供企业范围存储器管理服务-诸如自动的基于策略的数据迁移、自动备份、压缩、安全以及归档的软件和/或硬件。所有HSM解决方案所共有的特征是数据迁移、基于数据存取模式将数据卸载到较廉价或近线性的存储器-诸如磁带、CD或WORM驱动器-的能力。HSM当其被存取时透明地重新调用这种数据。
镜像,丛(Mirror,Plex)-卷数据的逻辑映射或拷贝。在卷中可以存在一个或多个丛。每个单独的镜像不必具有完整的拷贝,但是可以具有由于物理介质上的某种误差或者由于镜像几何的特性而其中不映射数据的孔。这可以被称作稀疏丛。然而,在卷中必须存在完整丛。
原始卷(Original Volume)-由于快照或分离操作而正从中分离一个或多个镜像的卷。
复制(Replication)-保持原始位置上数据卷与其在地理上间隔的第二位置上的图像之间一致性的处理。具有三种模式或复制同步、异步和周期。同步复制仅当第二位置也已经被更新时才返回写入。异步复制将变化记入日志中,立即返回写入,并且随后更新第二位置(在后台)。周期复制将增量变化传送到第二位置,以便保持一致性。
恢复(Restore)-卷管理器操作,其中逻辑破坏之后的原始卷返回其先前时间点图像中的一个。
再同步(Resvnc,Resvnchronization)-卷管理器操作,其与卷内容同步地放置失效丛或(通过瞬时快照)与另一卷同步地放置卷。
快照卷(Snapshot Volume)-原始卷的时间点图像。
快照(Snapshot)-创建快照卷的卷管理器操作。
卷(Volume)-卷管理器伪设备,其工作类似于物理块存储设备(磁盘),但是具有任意复杂的、并且可能冗余的内部几何。卷最终将其逻辑空间映射到实际磁盘驱动器上的物理空间(虽然卷管理器看作是物理磁盘的东西又可能是由另一设备或由存储器阵列所创建的伪设备)。
VxFS-VERITAS文件系统,日志式文件系统通过允许回退和重做而保存文件的目的或对其的操作。VxFS还允许克隆,这等价于得到文件系统的时间点图像。
检查点设置(Checkpointing)-获取数据卷的逻辑时间点图像的处理。
无效区域(Invalid region)-还没有被应用程序写入、并因而不包含任何有效应用程序数据的的数据卷区域。
有效区域(Valid region)-包含对应用程序有效的数据的数据卷区域。
结论各种实施例可以进一步包括根据前面的描述在承载介质上实现的接收、发送或存储指令和/或数据。一般而言,承载介质可以包括存储介质或内存介质,诸如磁或光介质,例如磁盘或CD-ROM,易失性或非易失性介质,诸如RAM(例如SDRAM,DDR SDRAM,RDRAM,SRAM等等),ROM等等,以及传送介质或信号,诸如经由通信介质-诸如网络和/或无线链路传送的电、电磁、或数字信号。
附图中所示出并且在此描述的各种方法表示方法的示范性实施例。这些方法可以在软件、硬件或其组合中实现。可以改变方法的顺序,并且可以各个元件可以被添加、记录、组合、省略、修改等等。
可以进行各种修改和改变,如本领域技术人员了解本说明书的情况下所显而易见的。这意味着本发明包括所有这样的修改和改变,并且相应地,以上描述被看作是说明性的,而不是限制性的。
权利要求
1.一种系统,包括应用程序;用于存储临时数据的临时卷;以及临时卷管理器,所述临时卷管理器被配置为从所述应用程序接收I/O请求,其中所述I/O请求为所述临时卷上的临时数据指定一个或多个时间戳;以及响应于所述I/O请求,在所述临时卷上执行逻辑设备级临时操作。
2.如权利要求1所述的系统,其中所述I/O请求是写入请求,并且在所述临时操作中,所述临时卷管理器被进一步配置为将由所述I/O请求所指定的临时数据写入到所述临时卷。
3.如权利要求2所述的系统,其中在所述临时操作中,所述临时卷管理器被进一步配置为对应于由所述I/O请求所指定的时间戳生成所述临时卷上临时数据的检查点。
4.如权利要求1所述的系统,其中所述I/O请求是读取请求,并且在所述临时操作中,所述临时卷管理器被进一步配置为将由所述I/O请求所指定的临时数据返回到所述应用程序。
5.如权利要求1所述的系统,其中所述I/O请求指定要对应于由所述I/O请求所指定的时间戳而创建所述临时卷的检查点,并且其中在所述临时操作中,所述临时卷管理器被进一步配置为对应于所述指定的时间戳而生成所述临时卷的检查点。
6.如权利要求1所述的系统,其中所述临时卷管理器被进一步配置为以由I/O请求所指定的时间间隔生成所述临时卷的检查点。
7.如权利要求1所述的系统,其中所述I/O请求指定要对应于由所述I/O请求所指定的时间戳而生成所述临时卷的时间点图像,并且其中在所述临时操作中,所述临时卷管理器被进一步配置为对应于所述指定的时间戳而生成所述临时卷的时间点图像。
8.如权利要求1所述的系统,其中所述I/O请求指定要创建由所述I/O请求中两个时间戳所指定的临时卷时间片图像,并且其中在所述临时操作中,所述临时卷管理器被进一步配置为生成由所述两个时间戳所指定的临时卷时间片图像。
9.如权利要求1所述的系统,其中所述I/O请求指定要在由所述I/O请求所指定的时间点截取所述临时卷的历史记录,并且其中在所述临时操作,所述临时卷管理器被进一步配置为在由所述I/O请求所指定的时间点截取所述临时卷的历史记录。
10.如权利要求1所述的系统,其中所述I/O请求指定要遍历所述临时卷的历史记录直到由所述I/O请求所指定的时间点,并且其中所述临时卷管理器被进一步配置为在所述临时卷的历史记录中由所述I/O请求所指定的所述时间点执行所述临时操作。
11.如权利要求1所述的系统,其中所述I/O请求指示所述临时卷的一个或多个区域,其中在所述区域上要执行所述临时操作。
12.一种系统,包括用于从应用程序为临时卷接收I/O请求的装置,其中所述I/O请求为临时卷上的临时数据指定一个或多个时间戳;以及用于响应于所述I/O请求而在所述临时卷上执行逻辑设备级操作的装置。
13.一种方法,包括临时卷管理器从应用程序接收I/O请求,其中所述I/O请求为临时卷上的临时数据指定一个或多个时间戳;以及所述临时卷管理器响应于所述I/O请求而在所述临时卷上执行逻辑设备级临时操作。
14.如权利要求13所述的方法,其中所述I/O请求是写入请求,并且所述在临时卷上执行逻辑设备级临时操作的步骤包括所述临时卷管理器将由所述I/O请求所指定的临时数据写入到所述临时卷。
15.如权利要求14所述的方法,其中所述在临时卷上执行逻辑设备级临时操作的步骤进一步包括对应于由所述I/O请求所指定的时间戳而生成所述临时卷上临时数据的检查点。
16.如权利要求13所述的方法,其中所述I/O请求是读取请求,并且所述在临时卷上执行逻辑设备级临时操作的步骤包括将由所述I/O请求所指定的临时数据返回到所述应用程序。
17.如权利要求13所述的方法,其中所述I/O请求指定将对应于由所述I/O请求所指定的时间戳而创建所述临时卷的检查点,并且其中所述在临时卷上执行逻辑设备级临时操作的步骤包括对应于所述指定的时间戳而生成所述临时卷的检查点。
18.如权利要求13所述的方法,进一步包括所述临时卷管理器以由I/O请求所指定的时间间隔生成所述临时卷的检查点。
19.如权利要求13所述的方法,其中所述I/O请求指定将对应于由所述I/O请求所指定的时间戳而生成所述临时卷的时间点图像,并且其中所述在临时卷上执行逻辑设备级临时操作的步骤包括对应于所述指定的时间戳而生成所述临时卷的时间点图像。
20.如权利要求13所述的方法,其中所述I/O请求指定将创建由所述I/O请求中两个时间戳所指定的临时卷时间片图像,并且其中所述在临时卷上执行逻辑设备级临时操作的步骤包括生成由所述两个时间戳所指定的临时卷时间片图像。
21.如权利要求13所述的方法,其中所述I/O请求指定要在由所述I/O请求所指定的时间点截取所述临时卷的历史记录,并且其中所述在临时卷上执行逻辑设备级临时操作的步骤包括在由所述I/O请求所指定的时间点截取所述临时卷的历史记录。
22.如权利要求13所述的方法,其中所述I/O请求指定要遍历所述临时卷的历史记录直到由所述I/O请求所指定的时间点,并且其中所述在临时卷上执行逻辑设备级临时操作的步骤包括在所述临时卷的历史记录中由所述I/O请求所指定的所述时间点执行所述临时操作。
23.如权利要求13的方法,进一步包括在由所述I/O请求所指示的所述临时卷的一个或多个区域上执行所述逻辑设备级临时操作。
24.一种包括程序指令的计算机可存取介质,其中所述程序指令被配置为执行临时卷管理器从应用程序接收I/O请求,其中所述I/O请求为临时卷上的临时数据指定一个或多个时间戳;以及所述临时卷管理器响应于所述I/O请求而在所述临时卷上执行逻辑设备级临时操作。
25.如权利要求24所述的计算机可存取介质,其中所述I/O请求是写入请求,并且在所述在临时卷上执行逻辑设备级临时操作的步骤中,所述程序指令被进一步配置为实现所述临时卷管理器将由所述I/O请求所指定的临时数据写入到所述临时卷。
26.如权利要求25所述的计算机可存取介质,其中在所述在临时卷上执行逻辑设备级临时操作的步骤中,所述程序指令被进一步配置为实现对应于由所述I/O请求所指定的时间戳而生成所述临时卷上临时数据的检查点。
27.如权利要求24所述的计算机可存取介质,其中所述I/O请求是读取请求,并且在所述在临时卷上执行逻辑设备级临时操作的步骤中,所述程序指令被进一步配置为实现将由所述I/O请求所指定的临时数据返回到所述应用程序。
28.如权利要求24所述的计算机可存取介质,其中所述I/O请求指定将对应于由所述I/O请求所指定的时间戳而创建所述临时卷的检查点,并且其中在所述在临时卷上执行逻辑设备级临时操作的步骤中,所述程序指令被进一步配置为实现对应于所述指定的时间戳而生成所述临时卷的检查点。
29.如权利要求24所述的计算机可存取介质,其中所述程序指令被进一步配置为实现所述临时卷管理器以由I/O请求所指定的时间间隔生成所述临时卷的检查点。
30.如权利要求24所述的计算机可存取介质,其中所述I/O请求指定将对应于由所述I/O请求所指定的时间戳而创建所述临时卷的时间点图像,并且其中在所述在临时卷上执行逻辑设备级操作的步骤中,所述程序指令被进一步配置为实现对应于所述指定的时间戳而生成所述临时卷的时间点图像。
31.如权利要求24所述的计算机可存取介质,其中所述I/O请求指定将创建由所述I/O请求中两个时间戳所指定的临时卷时间片图像,并且其中在所述在临时卷上执行逻辑设备级临时操作的步骤中,所述程序指令被进一步配置为实现生成由所述两个时间戳所指定的临时卷时间片图像。
32.如权利要求24所述的计算机可存取介质,其中所述I/O请求指定将在由所述I/O请求所指定的时间点截取所述临时卷的历史记录,并且其中在所述在临时卷上执行逻辑设备级操作的步骤中,所述程序指令被进一步配置为实现在由所述I/O请求所指定的时间点截取所述临时卷的历史记录。
33.如权利要求24所述的计算机可存取介质,其中所述I/O请求指定将遍历所述临时卷的历史记录直到由所述I/O请求所指定的时间点,并且其中在所述在临时卷上执行逻辑设备级临时操作的步骤中,所述程序指令被进一步配置为在所述临时卷的历史记录中由所述I/O请求所指定的时间点执行所述临时操作。
34.如权利要求24所述的计算机可存取介质,其中所述程序指令被进一步配置为实现在由所述I/O请求所指示的所述临时卷的一个或多个区域上执行所述逻辑设备级临时操作。
全文摘要
在逻辑设备级保持数据存储器中临时数据的系统和方法。临时卷管理器的实施例可以提供允许应用程序和/或应用程序代理与临时卷管理器交互作用的接口,以便在一个或多个临时卷上管理和跟踪临时信息。实施例可以为提供用于作用于数据历史数据-诸如临时数据库、版本管理文件系统/存储库、数据存档和流媒体-的应用程序的基础设施,以管理临时数据。在一个实施例中,如果应用程序不希望直接使用临时卷,则可以使用应用程序代理来存取临时卷。实施例可以提供临时卷上临时数据的I/O控制的、应用程序控制的和/或周期的检查点设置。一个实施例可以提供用于生成临时卷的临时图像(例如时间点和时间片图像)的机制,该临时图像可以具有其自己独立的历史记录。
文档编号G06F11/14GK1882906SQ200480033583
公开日2006年12月20日 申请日期2004年9月30日 优先权日2003年9月30日
发明者安安德·A·凯克雷, 安库尔·潘克布德赫 申请人:维瑞泰斯操作公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1