以可重复方式遍历数据的制作方法

文档序号:6379308阅读:277来源:国知局
专利名称:以可重复方式遍历数据的制作方法
以可重复方式遍历数据背景技术
随着存储单元容量指数式增长的趋势,文件系统的大小也以指数式增长变大。由于文件系统备份工具必需遍历整个文件系统,以便定位并且备份所有需要的文件和目录, 大文件系统的备份可能花费相当长的时间。较长的备份时间还可能意味着在备份处理过程中被中断的较大风险。例如,网络备份系统中短暂的网络故障或者客户机或服务器中任何其它的故障可能造成备份过程中断。在备份失败的情况下,典型的备份系统从备份操作中待备份的数据集合(例如待备份的一组文件和/或目录)的起点重新开始备份过程,有时在这里将这样的集合称为“保存集合(saveset)”。假定长的备份持续时间和进一步中断的可能性,在每次中断之后再开始备份过程可能显著影响备份系统的性能。
在典型的备份系统或过程中,甚至在包含保存集合的数据自中断以来没有被修改过的情况下备份操作也无法获得其停止的位置,这是因为在至少某些情况下无法保证对文件系统的遍历每次都以相同的顺序进行。例如,对于相同命令的单独场合,从给定目录读取项目的“readdir”(读目录)命令可能以不同的顺序返回结果。因此存在一种需求,保证以可重复的方式执行数据遍历。


在下面的详细描述和附图中公开了本发明的多个实施例。
图I说明了备份系统环境的一个实施例。
图2说明了文件系统树形结构的一个实施例。
图3A说明了备份保存集合的过程的一个实施例。
图3B说明了以可重复方式遍历和备份数据的过程的一个实施例。
图3C说明了建立遍历列表的过程的一个实施例。
图3D说明了恢复中断的备份操作的过程的一个实施例。
图3E说明了确定成功写入备份介质的最后文件系统项的过程的一个实施例。
图3F说明了建立过程前后关系的过程的一个实施例。
具体实施方式
本发明可以以多种方式实现,包括作为过程、装置、系统、实体的组合、计算机可读介质,例如计算机可读存储介质或者在光或电通信连接上传送程序指令的计算机网络。在本说明书中,可能将这些实现方式或者本发明可以采用的任何其它形式称为技术。所描述的配置用于执行任务的组件,例如处理器或存储器,既包括在特定的时间临时配置用于执行任务的通用组件、也包括制造用于执行该任务的定制组件。一般而言,在本发明的范围内可以改变所公开过程的步骤顺序。
下面给出了本发明一个或多个实施例的详细描述,并且伴随的

了本发明的原理。结合这些实施例对本发明进行描述,但本发明不局限于任何一个实施例。本发明的范围仅由权利要求限定,并且本发明包括许多替代、修改和等效形式。在后面的说明中所述的许多特定细节是为 了提供对本发明的彻底理解。提供这些细节是为了作为例子,可以根据权利要求书实施本发明而不需要这些特定细节中的某些或全部。为了清楚的目的,对本技术领域中和本发明相关的公知的技术材料没有详细描述,从而不会产生不必要的影响使本发明晦涩难懂。
公开了以可重复的方式对层级式数据进行遍历。在一个实施例中,在层级式数据的第一等级读取包含至少一部分数据的项目的列表并且排序为指定的顺序用于遍历的可重复性。例如,当以可重复方式遍历文件系统以便执行关于该文件系统或其一部分的备份操作,将每个目录中的内容读入列表并且排序(例如成为文件名的字母顺序)。以所排序列表的顺序备份文件系统项(或者其它经过处理的数据)。如果遇到数据的第二等级,读取第二等级中的数据并且排序为指定的顺序,然后以所排序的顺序处理数据。如果数据的遍历被中断,在恢复操作中以与在中断的操作中相同的指定顺序进行读取、排序和处理,保证如果在中断操作被中断的点恢复处理则不会遗漏数据单元,甚至在每个等级的单元是以不同的顺序读取或接收的情况下也是如此。
在一个实施例中,作为备份操作的一部分,当文件系统项成功保存到备份介质时, 产生备份过程的记录。这个记录在此以后可以用于在备份过程中出现故障时可以从最后成功记录的备份点恢复备份。在一个实施例中,在备份恢复操作中一旦找到最后备份点,备份系统或过程重新建立备份操作前后关系而无需彻底地遍历文件系统。通过重新建立前后关系并且从在中断之前成功并且完全备份的最后文件之后的数据单元开始恢复处理,恢复被中断的备份操作。以相同的、可重复的顺序遍历文件系统,保证了在备份介质上将不会有文件被遗漏或者重复存储。
图I说明了备份系统环境的一个实施例。在所示的例子中,客户机102通过网络 106连接到服务器108。可以存在连接到网络的任意数量的客户机和服务器。该网络可以是任意的公用或者私有网络和/或其组合,包括而不是限制于内部互联网、局域网、广域网、 以及连接多个系统和/或在一起的系统组的其它形式。客户机102连接到备份介质104。 在某些实施例中,备份介质可以是以下存储介质中的一种或多种硬盘、磁带驱动器、光学存储单元、以及任何非易失性存储器件。可以存在多于一个的备份介质。在一个实施例中, 备份介质104直接连接到网络。在另一个实施例中,备份介质104连接到服务器108。在另一个实施例中,备份介质104通过SAN(存储区域网络)连接到客户机102。备份数据库 110连接到服务器108。在一个实施例中,备份数据库110包含与一个或多个客户机和/或服务器上的数据相关联的数据。在另一个实施例中,备份数据库110包含与写入一个或多个备份介质的数据相关联的数据。在另一个实施例中,备份数据库110直接连接到网络。在另一个实施例中,备份数据库Iio连接到客户机102。在另一个实施例中,备份数据库110 是服务器108和/或客户机102的一部分。在一个实施例中,客户机102的备份由服务器 108配合。服务器108指令客户机将数据备份到备份介质104。当数据成功写入备份数据时,在备份数据库110上作出记录。在另一个实施例中,服务器108与客户机102上运行的备份代理协作以调整备份操作。该备份代理可以由服务器108进行配置。
图2说明了文件系统树形结构的一个实施例。在一个实施例中,系统中待备份的一部分数据(保存集合)可以是整个文件系统或者是文件系统的一部分。在一个实施例中, 对文件系统以可重复方式进行遍历,以保证任意随后发生的在文件系统中任意相同点开始的遍历以相同的顺序执行。在所示的例子中,以首先是文件名然后是目录名的字母顺序进行遍历。在其它实施例中,可以使用任何规范的文件系统项的排序。遍历从根目录开始。读取并排序根目录的项目。排序后的顺序列表包括文件F、目录I、目录2、目录4。以列表中的顺序备份与列表中的项目对应的数据。当遇到备份目录I时,备份过程下降到目录1,产生的列表包括文件A,并且备份文件A。在已经遍历目录I之后,遍历恢复到根目录列表的项目上。当遇到目录2时,产生其内容的顺序列表,按顺序包括文件B、文件C、文件D、目录3。以列表的顺序备份与列表的项目对应的数据。当遇到目录3时,产生对应于文件E的列表和备份。由于目录4为空,备份对应于目录4的项目而没有任何相关的文件。
图3A说明了对保存集合进行备份的过程的一个实施例。在所示的例子中,在302 设定当前备份目录为保存集合的第一级目录。在一个实施例中,在302设定当前目录为与文件系统的根目录相关联。该保存集合可以是预先配置的、动态配置的、通过用户界面指定的、设定为任意的第一级数据的、和/或以某些其它方式确定的。该保存集合可以是任意的层级式数据结构,例如组织为树形、目录、阵列、和/或链接表的数据。当前备份目录是与该过程当前正进行备份的数据相关的目录。当前备份目录可以是预先配置的、动态配置的、和 /或通过用户界面指定的处理数据中的任意数据点。在一个实施例中,第一级目录是数据的任意分类等级,提到最普通的例如是首先遇到数据级。在304,以可重复方式对保存集合进行遍历和备份。在其它实施例中,使用与304相关的过程可以以可重复方式遍历任意的层级式数据。在一个实施例中,与304相关的过程可能被中止,例如由于中断。如果在306 确定对保存集合的遍历和备份由于过程的中止而没有完成,则过程继续到308,在此确定是否可能恢复被中断的备份操作。如果备份过程能够从如在308确定的最后成功备份点恢复备份,则在310恢复备份过程。在一个实施例中,如果自最后备份点时刻和/或备份起始时刻以来没有经过规定的一段时间,备份过程可以从最后成功备份点恢复。在一个实施例中, 这段时间可以预先配置和/或动态配置。在一个实施例中,如果自中止以来保存集合的整体或者部分没有被修改,备份过程可以从最后成功备份点恢复。如果在312确定在恢复的备份过程中恢复的备份过程是无效的,或者在308确定备份过程无法恢复,则重新开始备份操作(302)。在一个实施例中,如果在中断之前已经被成功保存到备份介质的那个最后文件从保存集合中被移除或者自中断以来已经被修改,在312确定所恢复的备份过程为无效。如果在312确定恢复的备份过程有效,所恢复的备份过程继续,直到在306确定备份操作已经完成,在此情况下图3A的过程结束,或者在306确定所恢复的备份过程被中断,在此情况下重复308-312。在一个实施例中,如果所恢复的备份过程在312进行有效确定操作之前被中止,备份操作从起点(302)重新开始。
图3B说明了以可重复方式遍历和备份数据的过程的一个实施例。图3B的过程在一个实施例中用于实现图3A中的304。在所示的例子中,在316建立当前备份目录的遍历列表。该遍历列表包括以可重复顺序排序的当前目录中的项目列表。在一个实施例中,该遍历列表是存储的。在一个实施例中,该遍历列表是随着遍历和备份过程的继续同步建立的。在318,从遍历列表获得下一个项目。在一个实施例中,以列表的顺序从遍历列表获得项目。在另一个实施例中,以可重复顺序从遍历列表获得项目,而不是以列表的顺序。如果在320确定成功获得了一个项目(存在于遍历列表中待处理的项目),并且在322确定这个所获得的项目不对应于目录,则在324将与这个所获得项目相关联的文件系统项目备份并作记录,并且在318从遍历列表获得下一个项目。在一个实施例中,文件系统项目在324 保存到备份介质。在一个实施例中对备份进行记录,以便于在例如备份操作被中断的情况下能够识别保存集合中成功保存到备份介质的最后文件。在一个实施例中,备份的日志保存到备份数据库。在一个实施例中,文件名、文件大小、以及从保存集合的起点的偏移量,该偏移量识别文件在保存集合中的位置,如这里所描述的进行遍历。如果在322确定所获得的项目对应于目录,当前备份目录设定为与所获得项目对应的目录,并且在316为这个新的当前目录建立遍历列表。如果在320确定在遍历列表已经不存在待处理的项目,则在328 确定当前备份目录的备份完成。在一个实施例中,当与当前目录相关的所有要素都已经备份时,与当前目录相关联的数据被备份和/或记录。如果在330确定当前目录不是第一级目录,则在322设定当前目录为当前所完成目录的父目录,并且在318从新设定当前目录的遍历列表获得下一个项目。在一个实施例中,第一级目录是保存集合的根目录。在一个实施例中,父目录是与由刚刚完成处理的目录替代的前一个当前备份目录相对应的目录。在一个实施例中,当前备份目录放置在堆栈数据结构中,即随着当前备份目录变化而向堆栈增加目录或者从堆栈拿掉目录。在另一个实施例中,对应于当前备份目录的遍历表也放置在堆栈中。如果在330确定当前目录是第一级目录,在334指示备份完成。在一个实施例中,334对应于图3A中在306的“完成”判定。在一个实施例中,如果图3A的过程在过程达到334之前中止,则遍历和备份过程没有完成。在一个实施例中,如果在备份过程中出现错误,则遍历和备份过程没有完成。在一个实施例中,错误包括以下的一个或多个无效的遍历列表项目、无效的当前目录、无效的数据结构、存储器错误、处理错误、和/或任何其它与过程相关的错误。在一个实施例中,如果遍历和备份过程在334作出“完成”判定之前被中止或中断,则在图3A的306作出“未完成”的判定。
图3C说明了建立遍历列表的过程的一个实施例。图3C的过程在一个实施例中用于实现图3B中的316。在所示的例子中,在336获得当前目录中的所有文件系统项。在一个实施例中,获得操作包括处理一个或多个“readdir”或者类似的命令。在另一个实施例中,可以使用获得文件系统项的任何步骤。在一个实施例中,文件系统项存储在存储器中。 在338以规范的顺序排序项目。规范的顺序可以基于文件名、修改时间、节点数量、建立时间、文件大小、和/或任何其它能够对文件系统项目进行排序的文件属性。在一个实施例中,可以使用任何可重复的顺序来排序列表。在另一个实施例中,以可重复顺序获得文件系统项,因而不需要排序。在另一个实施例中,不对项目进行排序。在一个实施例中,项目放置在列表中。在另一个实施例中,项目列表被保存。
图3D说明了恢复被中断的备份操作的过程的一个实施例。图3D的过程在一个实施例中用于实现图3D中的310。在所示的例子中,在340确定成功写入备份介质的最后文件。在342,通过递归函数调用仅下降到导向最后备份目录项目的子目录,借此建立递归堆栈(由递归过程产生的堆栈项目)和其它的过程前后关系。在一个实施例中,其它的过程前后关系包括一个或多个遍历列表。在其它实施例中,其它的过程前后关系包括包括过程变量和/或数据结构。可以使用非递归过程对备份数据进行遍历。在一个实施例中,不建立递归堆栈。备份数据可以不包括子目录。如果在过程前后关系建立的过程中,在344确定重新开始点、即与最后备份项目相关联的分量部分或者最后备份项目是无效的,则在350 断定所恢复的备份操作是无效的。在一个实施例中,350的结论与图3A中312的无效判定相关联。在一个实施例中,由于文件系统的修改,可能无法找到最后备份项目的分量部分或者最后备份项目。如果在344确定最后备份点项目和所有其分量部分都存在,则在346在要备份的下一个文件系统项目处恢复备份并且在348断定所恢复的备份操作是有效的。在一个实施例中,348的结论与图3A中312的有效判定相关联。在另一个实施例中,如果在恢复步骤的过程中出现错误,则获得恢复操作无效的结论。
图3E说明了确定成功写入备份介质的最后文件系统项目的过程的一个实施例。 图3C的过程在一个实施例中用于实现图3D中的340。这个例子仅是示例性的。可以使用任何确定成功写入备份介质的最后文件系统项目的过程。在所示的例子中,在352查询备份数据库以确定在备份操作被中断之前成功保存在备份介质中的最后“保存集合块”的最后(即结尾)偏移量。在一个实施例中,该偏移量与指示偏离于保存集合起点的位置相关联,即保存集合的起点的偏移量为零。在一个实施例中,“保存集合块”是写入备份介质的任何数据分组。在一个实施例中,可以通过任何获得数据的过程获得最后偏移量。在354,查询文件索引以定位保存在备份介质中的内容全部位于偏移范围内的最后文件系统项目。在一个实施例中,通过比较文件系统项结尾相对于参考点的偏移和最后偏移,确定内容完全位于最后偏移内的最后文件系统项目。在一个实施例中,文件索引包括保存集合中每个项目相对于参考点的偏移信息。在另一个实施例中,根据在文件备份开始时为文件记录的起点偏移和文件大小来计算文件的最后偏移信息。在一个实施例中,文件索引是文件系统的一部分。在另一个实施例中,文件索引与备份数据库相关联。
图3F说明了建立过程前后关系的过程的一个实施例。图3F的过程在一个实施例中用于实现图3D中的342。在所示的例子中,在340接收重新开始点。重新开始点可以是与最后处理的文件系统项目相关联的任意数据,即对应于在相关的备份操作中断之前完成保存在备份介质中的最后文件的文件系统路径。在一个实施例中,重新开始点是与如图3D 中340确定的成功写入备份介质的最后文件系统项目相关联的数据。在358,从第一级目录开始对保存集合进行遍历。在360,获得被遍历的当前目录中下一个文件系统项目。如果在362确定所获得的项目是无效的,则在364作出重新开始点无效的结论。在一个实施例中,所获得的项目可能是无效的,因为在当前遍历的目录中不存在更多的文件系统项目,与重新开始点相关或对其影响的项目、和/或重新开始路径已经被改变、移动、或删除,或者由于文件系统的错误。在一个实施例中,在364的结论与图3D中344的无效判定相关联。 如果所获得的项目在362确定是有效的并且在366确定对应于重新开始点,则在368作出重新开始点有效的结论。在一个实施例中,368的结论与图3D中344的有效判定相关联。 如果在366确定所获得的项目不是重新开始点,并且在370确定所获得的项目是目录项,则在372确定所获得的目录项是否导向重新开始点。在一个实施例中,如果目录是导向重新开始点的文件系统路径的一部分,则该目录导向重新开始点。如果在372确定所获得的目录项导向重新开始点,则在374下降到该所获得的目录项。下降到该目录的过程可能不是递归过程。在一个实施例中,下降到目录的过程包括建立递归堆栈。在一个实施例中,下降到目录的过程包括以下的一个或多个建立遍历列表、备份数据、读取文件系统项目、读取目录内容、遍历目录、以及初始化一个或多个变量和数据结构。在360获得下降目录中的下一个文件系统项目。如果所获得的项目在370确定不是目录或者在372确定不导向重新开始点,则在360获得当前被遍历的目录中的下一个文件系统项目。在一个实施例中,以可重复顺序遍历文件系统,即以为每个目录建立的遍历列表的顺序遍历文件系统项目。
虽然以上面讨论的特定实施例描述了文件系统的遍历和备份,但这里描述的方法可以应用于以可重复的方式遍历任何的数据结构。
图3A、3B、3C、3D、3E和3F中所示以及上面描述的过程可以用任何恰当的方式实现,例如一个和多个集成电路和/或其它器件,或者固件、软件、或其它的。
虽然为了理解清楚的目的描述了前面几个实施例的一些细节,但本发明不局限于所提供的细节。存在许多实现本发明的替代方式。所公开的实施例是示例的而非限制。
权利要求
1.一种处理数据的方法,包括在处理器接收文件系统或其一部分的某个等级中一个或多个文件系统元素的列表;使用所述处理器排序所述列表以获得排序的列表,其中排序至少部分地基于文件系统元素是文件还是目录,使得在所述排序的列表中,所有文件被一起编组并且所有目录被一起编组,并且其中排序包括排序所述等级中的文件系统元素,使得所有文件在所述排序的列表中的所有目录之前被列出;以及 根据所述排序的列表的顺序备份所述等级中的文件系统元素。
2.如权利要求I所述的方法,其中获得包括执行读目录命令。
3.如权利要求I所述的方法,其中排序还包括至少部分地基于文件名或目录名进行排序。
4.如权利要求I所述的方法,其中处理在根目录开始。
5.如权利要求I所述的方法,其中 所述列表是第一列表,所述等级是第一等级,并且所述排序的列表是第一排序的列表;以及 如果在根据所述第一排序的列表的顺序备份所述第一等级中的文件系统元素时在所述第一排序的列表中遇到与所述文件系统或其一部分的第二等级对应的目录,则所述方法还包括 暂时停止根据所述第一排序的列表的顺序对所述第一等级中的文件系统元素的备份; 接收所述文件系统或其一部分的第二等级中的一个或多个文件系统元素的第二列表; 至少部分地基于文件系统元素是文件还是目录来排序所述第二列表,以获得第二排序的列表;以及 根据所述第二排序的列表的顺序来备份所述第二等级中的文件系统元素。
6.如权利要求5所述的方法,其中根据所述第一排序的列表的顺序对所述第一等级中的文件系统元素的备份在根据所述第二排序的列表的顺序对所述第二等级中的文件系统元素的所有元素的备份已经完成之后恢复。
7.如权利要求I所述的方法,还包括在已经备份所述第一排序的列表中的每个文件后保存所述文件的名字、所述文件的大小和自开始处的偏移,所述偏移标识要备份的目录和/或文件的编组内所述文件的位置。
8.一种用于处理数据的系统,包括处理器,配置成 接收文件系统或其一部分的某个等级中一个或多个文件系统元素的列表; 排序所述列表以获得排序的列表,其中排序至少部分地基于文件系统元素是文件还是目录,使得在所述排序的列表中,所有文件被一起编组并且所有目录被一起编组,并且其中排序包括排序所述等级中的文件系统元素,使得所有文件在所述排序的列表中的所有目录之前被列出;以及 根据所述排序的列表的顺序备份所述等级中的文件系统元素;以及 存储器,耦合到所述处理器并且配置成向所述处理器提供指令。
9.如权利要求8所述的系统,其中所述处理器还配置成通过至少部分地基于文件名或目录名进行排序而排序。
10.如权利要求8所述的系统,其中 所述列表是第一列表,所述等级是第一等级,并且所述排序的列表是第一排序的列表;以及 如果在根据所述第一排序的列表的顺序备份所述第一等级中的文件系统元素时在所述第一排序的列表中遇到与所述文件系统或其一部分的第二等级对应的目录,则所述处理器还配置成 暂时停止根据所述第一排序的列表的顺序对所述第一等级中的文件系统元素的备份; 接收所述文件系统或其一部分的第二等级中的一个或多个文件系统元素的第二列表; 至少部分地基于文件系统元素是文件还是目录来排序所述第二列表,以获得第二排序的列表;以及 根据所述第二排序的列表的顺序来备份所述第二等级中的文件系统元素。
11.如权利要求10所述的系统,其中在根据所述第二排序的列表的顺序对所述第二等级中的文件系统元素的所有元素的备份已经完成之后恢复根据所述第一排序的列表的顺序对所述第一等级中的文件系统元素的备份。
12.如权利要求8所述的系统,其中所述处理器还配置成在已经备份所述第一排序的列表中的每个文件后保存所述文件的名字、所述文件的大小和自开始处的偏移,所述偏移标识要备份的目录和/或文件的编组内所述文件的位置。
13.一种用于处理数据的计算机程序产品,所述计算机程序产品在计算机可读存储介质中实施并且包括计算机指令,所述计算机指令用于在处理器接收文件系统或其一部分的某个等级中一个或多个文件系统元素的列表;使用所述处理器排序所述列表以获得排序的列表,其中排序至少部分地基于文件系统元素是文件还是目录,使得在所述排序的列表中,所有文件被一起编组并且所有目录被一起编组,并且其中排序包括排序所述等级中的文件系统元素,使得所有文件在所述排序的列表中的所有目录之前被列出;以及 根据所述排序的列表的顺序备份所述等级中的文件系统元素。
14.如权利要求13所述的计算机程序产品,其中用于排序的计算机指令还包括用于至少部分地基于文件名或目录名进行排序的计算机指令。
15.如权利要求13所述的计算机程序产品,其中 所述列表是第一列表,所述等级是第一等级,并且所述排序的列表是第一排序的列表;以及 如果在根据所述第一排序的列表的顺序备份所述第一等级中的文件系统元素时在所述第一排序的列表中遇到与所述文件系统或其一部分的第二等级对应的目录,则所述计算机程序产品还包括用于以下操作的计算机指令 暂时停止根据所述第一排序的列表的顺序对所述第一等级中的文件系统元素的备份;接收所述文件系统或其一部分的第二等级中的一个或多个文件系统元素的第二列表; 至少部分地基于文件系统元素是文件还是目录来排序所述第二列表,以获得第二排序的列表;以及 根据所述第二排序的列表的顺序来备份所述第二等级中的文件系统元素。
16.如权利要求15所述的计算机程序产品,其中根据所述第一排序的列表的顺序对所述第一等级中的文件系统元素的备份在根据所述第二排序的列表的顺序对所述第二等级中的文件系统元素的所有元素的备份已经完成之后恢复。
17.如权利要求13所述的计算机程序产品,还包括用于在已经备份所述第一排序的列表中的每个文件后保存所述文件的名字、所述文件的大小和自开始处的偏移的计算机指令,所述偏移标识要备份的目录和/或文件的编组内所述文件的位置。
全文摘要
公开了对层级式数据的遍历。接收数据的第一等级中项目的第一列表并且以一定顺序排序。以排序的第一列表的顺序处理第一等级的数据。如果在处理过程中遇到数据的任何其它等级,接收所遇到等级中项目的另一个列表并且以一定顺序排序。以列表的顺序处理数据。
文档编号G06F17/30GK102982067SQ20121040338
公开日2013年3月20日 申请日期2006年4月12日 优先权日2005年4月14日
发明者K.法利, R.赖特迈尔, W.马鲁亚马 申请人:Emc 公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1