在计算机系统之间共享对象的制作方法

文档序号:6427905阅读:207来源:国知局

专利名称::在计算机系统之间共享对象的制作方法
技术领域
:本发明总体上涉及一种用于有效地使对象在计算机系统之间可用的方法、产品以及设备。更具体而言,本发明涉及在对象管理系统中使一个计算机系统的对象与另一个计算机系统共享,在所述对象管理系统中,它们共享相同的后端存储装置。
背景技术
:本发明涉及在对象管理系统中管理大量文件。诸如与Oracle数据库一起使用的这类的现有系统,被设计成能处理极大量的表空间(tablespace)。表空间可以由多个数据文件组成,这些数据文件是可以由操作系统来访问或操纵的文件。“数据文件”指的是能够被复制、移动、或者被视为连续信息的文件,而不管所述数据在物理上是否是以连续方式存储在存储介质上。本地存储器容量可能不足以存储与一个或多个数据库相关联的整个表空间。购买充足快速的存取存储介质(比如,硬盘或光学介质)以用来提供存储一个完整数据库的充足的容量可能是不经济的,在当不是所有的数据都必须是以相对快的速度可访问的时候尤其如此。已经实现了这样的常规数据库系统,在该数据库系统中,数据可以被“迁移”到价格比较低廉的介质上,并且只在需要时才从该介质那里检索该数据。然而,现有的系统和方法都没有有效地管理将被迁移的、在迁移后和在检索后的数据。这些系统遭受等待时间的困扰,具有高带宽要求,需要长的备份时间,具有高的成本,而且也许不能产生“时间点”快照。这些问题并不受限于数据库和表空间。而是,它们还可能牵扯到用于存储诸如多媒体之类的大型文件的系统当中。正如这里将公开的一种更有效的方法,它会减少等待时间和带宽要求,降低成本,而且需要更小的备份窗口,从而更有效地管理数据。尽管这里所公开的内容可以描述在数据库和表空间环境下的上述问题以及本发明,但是本发明也可以应用于任何运用迁移的数据管理系统,在所述系统管理诸如音频或视频之类的大型数据文件时尤其如此。发明概述因此,简言之,此发明提供了一种用于共享对象管理系统中的对象的方法、产品和设备。在本发明的实施例中,一种对象管理系统,包括存储装置;第一计算机系统,被配置成用于在存储装置上存储第一对象以及第一对象的副本;和第二计算机系统。第一计算机系统被配置成用于创建包含关于第一对象的已存储副本的信息的第一数据对象,而第二计算机系统被配置成用于从第一数据对象中读取关于第一对象的已存储副本的信息,并且从存储装置中检索第一对象的已存储副本。第一对象可以由第一计算机系统来划分,并在存储装置上存为分区,并且第一数据对象会包含关于所述这些分区的信息。第二计算机系统会被配置成用于从第一数据对象中读取关于所述分区的信息,选择分区,并且从存储装置中检索所述分区。当结合附图、根据以下详细说明来进行理解时,本发明的优点和更多细节将对本领域技术人员而言变得更加明显。附图简要说明通过以下结合附图的详细说明,将容易理解本发明,在附图中相同的参考数字指代类似的结构元件,其中图1是带有前端和后端的对象管理系统的示意图;图2是带有附接的海量存储装置的计算机系统的示意图;图3是i节点(inode)与在其中存储DMAPI信息的文件之间的逻辑关系框图;图4是i节点与在其中存储DMAPI信息的扩展块之间的逻辑关系框图;图5是后端中存储的文件、DMAPI扩展数据文件、容器文件和分区(partition)的框图;图6是示出用在对象管理系统中的守护程序(daemon)的框图;图7是示出分区的版本控制的框图;图8是举例说明迁移过程的流程图;图9是举例说明为确保一致性更新文件状态的流程图;图10是举例说明清除过程的流程图;图11是举例说明数据的事件处理以及重新升级(restaging)的流程图;图12是示出分区的重新升级的框图;图13是举例说明有效搜索迁移或清除候选者并获得候选者路径名的流程图;图14是示出搜索迁移或清除候选者的几种方法的框图;图15是举例说明使用容器文件以使来自一个计算机的数据在另一个计算机上可用的流程图;和图16是图15中的计算机的框图。发明详述在此,提供对实施例的详细说明。虽然本发明是结合实施例来描述的,但是应当理解的是,本发明并不局限于任何一个实施例。相反,本发明的范围仅仅由所附的权利要求来限定,而且本发明涵盖许多的可选方案、修改方案和等效方案。为了举例说明起见,在下面的说明中阐述了许多特定的细节,以便提供对本发明的彻底理解。可以在没有这些特定细节中的一些或全部细节的情况下,根据权利要求来实施本发明。为了清楚起见,未对与本发明相关的
技术领域
中已知的技术内容作详细描述,以便避免不必要地混淆本发明。应该认识到的是本发明能够以多种方式实现,包括像过程、设备、系统、装置、方法或诸如计算机可读存储介质之类的计算机可读介质或者计算机网络,在所述计算机网络中,程序指令是在光学链路或电子通信链路上发送的。概观在一个实施例中,如图1所示,对象管理系统10包括初级的或本地的计算机系统12以及存储系统14,所述存储系统可以是次级的或远程的计算机系统。初级计算机系统12被称作为前端12,它向用户(未示出)提供初级应用程序和数据储存服务。在正常操作期间,初级计算机系统12在其CPU20上运行应用程序,以及提供对其本地文件系统16上的本地数据的访问,本地文件系统16通常单独包括诸如硬盘驱动器18这类以RAID阵列形式,或其它配置的高速装置。存储系统14,也被称作为后端14,它可以是连接于各种海量存储装置的通用CPU22,所述各种海量存储装置可以编组成文件系统26,或者可以是专门的存储设备。用在后端14中的海量存储装置可以是硬盘驱动器24,或是其它更廉价、更慢速的装置,或者供归档使用。例如,可以使用光盘28、磁带驱动器30和磁光驱动器。后端14可以当作为不常访问的数据的廉价的近线性(near-line)存储器来使用,同时也可以用来在前端12上备份数据。后端14可以位于与前端12相同的地方,或者可以远程设置。数据传输是经由NFS、AFS、FTP或其它方法来实现的。前端12和后端14能以一对一、多对一或者多对多的关系连接。前端12上的文件系统16通常与后端14是一对一的关系,但在前端12上也存在几个文件系统16,每一个都映射到不同后端14。例如当每个文件系统16用于属于公司中不同组的不同应用程序时,可以使用这种配置结构。由此,用于会计部门的数据可以转到一个后端14系统,与此同时工资单数据可能转到另一个后端14。这些后端系统14可以位于不同的远程位置。在操作中,迁移守护程序将数据从前端12迁移(复制)到后端14;也就是,它将数据从前端12复制到后端14。数据被分解成分区,这些分区将被写入后端14。一旦文件已被迁移,就在前端12上将其标记为已迁移。这是通过设置表明文件已被迁移的位或其它标志来进行的。清除守护程序寻找已迁移的文件,在前端12上不再需要那些文件的数据,并且清除掉不需要的数据。事件守护程序捕获数据访问事件,如果前端12上需要数据,那么它就将数据从后端14重新升级到前端12。事件守护程序被配置成移动需要的那一部分文件,以便仅仅对所述文件的一部分进行重新升级。这有利于减少正在传递的数据量,由此减少带宽要求以及等待时间。迁移守护程序定期地检查需要得到迁移的文件(确切地说,检查文件的一部分)。如果它发现了被标记为脏的、已重新升级的文件(即,自该文件上次迁移到后端14以来已被写入),那么它将把所述文件迁移到后端14。迁移守护程序被配置成只对修改过的分区进行写。不必对未修改的分区进行写,由此来减少正在传递的数据量。在后端14处,对已修改过的分区进行版本控制,并将其写入海量存储装置中。它们可以改写当前已有的分区,但是保持早期版本将使时间点(point-in-time)快照得以创建,以便可以保持在任何指定时间的系统状态。关于分区位置的信息以及其它元数据都被写入容器文件中,这些容器文件可以位于后端14中的高速存储器上。在这个配置结构中,备份是借助于系统操作来创建的,并且不需要独立的备份,这是因为容器文件包含将数据恢复到前端12上所需的所有信息。这些操作透明地加以执行,除了设置分区大小以及其它配置结构和环境信息之外,无需应用程序用户这方专门地介入。这种系统可以用来使来自一个计算机系统的数据在另一个计算机系统可用,而无需复制所有的数据。为了完成这个,第二计算机系统被配置成用于使用位于后端14上的第一计算机的容器文件,以在其本地文件系统上创建它自己的文件。当第二计算机系统将它自己的数据写入后端14时,它在设置期间或者根据需要创建它自己的容器文件。在第二计算机的操作期间,如果来自于后端14的所需文件分区不在前端12上,那么数据存取将会引发这些文件分区的重新升级。如果任一计算机系统修改数据,那么当迁移数据时,它将会把它自己的分区写入到后端14,并更新它自己的容器文件。这样,每个计算机系统都具有它自己的文件版本。系统也可以被配置成用于通过存储文件名、i节点序号和单个文件中的扩展属性,来有效地搜索迁移和清除候选者。系统能够搜索这个文件,以便快速地识别迁移或清除候选者而不必检查i节点以及尽可能地不必检查名称空间(namespace)中每个文件的可能扩展块。使用i节点序号的反向查找,来确定路径名。这个方法允许系统仅仅查找迁移候选者和清除候选者的i节点,减少了所需的时间。所述系统可以用来管理数据库所使用的大型表空间,但是在大型文件的管理过程中具有适用范围,在数据存取仅仅是针对一部分文件的地方尤其如此。详细说明在一个实施例中,每个初级和次级计算机系统都包括在诸如运行Unix的工作站这类的通用计算机上执行的软件程序,但也可以使用其它的计算机系统,比如运行Windows或Linux操作系统的基于IntelPentium的PC。也可以使用实现所述计算机系统的其它装置,比如带有烧录在芯片中的指令的专用硬连线系统,所述芯片比如是专用集成电路(ASIC)或现场可编程门阵列(FPGA)。用作为存储系统的次级计算机系统可以采用诸如由EMC、NetworkAppliance、StorageTek和ADIC制造的专用存储设备之类的形式来实现,并按网络附加存储器(NAS)或存储区网络(SAN)结构加以连接。如图2所示,计算机系统40可以具备以下许多部件中央处理单元41、存储器42、显示器44、键盘46、海量存储装置48、网络接口50,以及其它的输入/输出装置52。依照一般惯例,存储器42和海量存储装置48可用于存储程序指令及数据。计算机系统40可以进一步具有一个以上的中央处理单元41,比如基于多处理器Pentium的系统或SunSPARC工作站。海量存储装置48可以包括一个或多个硬盘驱动器、光学驱动器、磁带驱动器、磁光驱动器、DAT、CD驱动器、DVD驱动器,或者用于利用RAID、光纤通道或其它接口来储存数据的其它装置。海量存储装置18可以被编组成文件系统,而且可以使用一组以上的海量存储装置18。文件系统是一种类型的对象存储,它可以存储文件(在此情况下,对象的ID就是它的路径名)或者对象(在此情况下,用某一ID而不是文件系统名称来指代对象)。对象存储具有以下组成部分标识对象的方法;允许操纵对象的接口(API、文件系统原语等);以及对象存储器。文件被视作为一种类型的对象。在这里公开的原理同样适用于对象和对象存储,也适用于文件和文件系统。对于对象存储而言,描述在哪里找到后端中的对象的扩展属性会是对象ID而不是文件名。充当前端12的初级计算机系统,通常具有处于硬盘驱动器18形式的高速存储器,以供快速存取数据。充当后端14的存储系统将具有某一高速存储器,还将具有速度较低但更经济的装置,比如磁带备份器30和光学驱动器28。其它的归档装置都可以附接于所述存储系统14。后端14被用作为不经常访问的数据的存储,以便减少对昂贵的高速存储空间的需要。后端14也可以实现为初级计算机系统12的一部分,以便将后端14的存储装置附接于初级计算机系统12上。尽管公开的实施例描述了分别用于前端12和后端14的独立的初级和次级计算机系统,但是为实现本发明并不需要独立的次级计算机系统。所举例说明的初级计算机系统遵循系统管理的技术规范由OpenGroup(原先的X/Open)出版的、文件编号为C429的数据储存管理(XDSM)API,其序列号为UKISBN1-85912-190-X,将该篇公开的内容引入与此,以供参考。这篇文档可以在http//www.opengroup.org上在线获得,并且这篇文档陈述了顺应应用程序的数据管理API(DMAPI)的技术规范。如果其它操作系统能为这里所述的数据管理功能提供支持的话,则也是可以使用的。在Unix或Linux系统中,操作系统利用i节点来存储标准的文件系统信息,比如大小、所有权、日期以及许可。按照XDSM技术规范的说明,i节点还可以用于存储到DMAPI扩展数据的链接,所述DMAPI扩展数据包括扩展属性/元数据以及区域信息。优选地,在一个实施例中,DMAPI扩展数据被存储在称为.DMATTR的DMAPI扩展数据文件60中。DMAPI扩展数据文件60可以是存储在前端12中但也可能存储在后端14中的单个文件或者可以跨过几个文件。前端12中的存储器就像在内存中进行高速缓存那样提供快速存取。图3示出了文件系统16中i节点62与DMAPI扩展数据文件60之间的逻辑关系。尽管这些元件是放在一起示出的,但应当理解的是,这未必反映出它们在磁盘上的物理位置。如图3所示,DMAPI扩展数据文件60可以实现为按i节点序号索引的、扩展属性与区域的表。如图4所示,另一个设备可以让每个i节点62都指向它自己的扩展块64。在.DMATTR文件60中存储DMAPI信息,允许在不必读取其i节点62和DMAPI扩展块64的情况下读取文件的DMAPI信息,这在当许多文件正在被仔细检查时是有利的。与如何存储i节点信息相类似,可将这个信息也存为文件系统16的一部分。扩展属性是用来记录诸如文件是否已被迁移、它是否已被清除以及采用目录路径、对象ID等形式到与位于后端14上的容器文件76的链路等信息。区域信息包括关于文件分区的信息,比如像分区中的数据是否是本地存在的、数据是否是脏的且需要迁移、以及相对应的本地文件中的数据位置。可以使用标志,而本地文件中数据的位置可以由关于偏移量和长度的信息来指明。区域信息可以包含当文件映射区域中的数据被访问或变更时规定将要生成的事件集的域;例如,dm_region_read,dm_region_write,dm_region_truncate。所述标志可以设置成能表明数据是否被驻留,或者数据是否是脏的且需要再迁移。如果动态地对分区规定了大小,那么同样可以保存关于分区大小的信息。由于区域信息是用来记录数据位置的,因此当数据被访问时,映射文件的区域的数目是可以增加的。如图5所示,当文件72被迁移到后端14时,它被划分成分区70。所述分区70的大小可以是固定的,或者也可以是动态可变的。固定分区可以具有由存储在系统文件中的配置结构或环境变量所定义的分区大小。分区大小能够依据文件系统特性、文件的大小以及数据访问的模式来选择。分区大小不应太大,因为较大的分区大小可能会导致更长的等待时间、更多的带宽使用、以及在后端14中使用来进行版本控制的更多空间。从另一方面来说,分区大小太小会增加内务处理需求,因为存在更多要管理的分区。对于大型数据库而言,可以使用100兆字节(MB)的分区大小。由此,例如,2GB文件会被分成对应后端14的20个100MB分区。在一个实现方案中,为Oracle数据库使用所述系统,该Oracle数据库具有对应后端14的9840个磁带以及16个128MB大小的分区。影响分区大小的一些因素是需要数据的应用程序的访问模式、后端14与前端12之间的数据传输速度、用于数据传输在后端14中归档介质的速度以及后端14介质的等待时间。具有较慢定位时间的后端介质(比如磁带30)会有助于更大的分区大小。通过对文件72进行分区,系统能够以更小的部分70来移动数据。如果应用程序请求仅对来自2GB文件中的小部分数据进行数据访问,那么若这小部分数据未在本地文件系统上的话,则为了访问它就仅需要检索包含那个数据的特定100MB分区。由于移动数据需要的时间少得多,因而这减少了等待时间,而且由于移动更少量的数据,因而减少了带宽使用。同样,如果后续仅仅修改数据文件72的一小部分,那么就仅仅需要向后端14迁移包含数据的已修改部分的分区70。如图6所示,配置初级计算机系统以便在操作中存在三个守护程序事件守护程序dxdbmigd80、迁移守护程序dxdbmigwatch82和清除守护程序dxdbpurgewatch84。可以使用许多守护程序,包括仅仅一个作为线程的守护程序,也可以使用其它方法而不是守护程序。例如,Windows系统可以使用系统代理和服务。事件守护程序80捕获何时文件数据被访问。如果所请求的数据不在前端12上的本地文件系统16上,那么事件守护程序80就把数据从后端14复制到本地文件系统16上,并继而发生数据访问。迁移守护程序82寻找那些其中的数据需要从前端12迁移到后端14的文件。一旦它识别出了其数据需要迁移的文件,它就把数据从前端12复制到后端14。清除守护程序84寻找那些其数据在本地文件系统16上不再需要的文件,并且除去不需要的数据。因为这里所述的有效搜索迁移和清除候选者允许以较少的代价来查找迁移和清除候选者,所以迁移守护程序82和清除守护程序84两者都可以被配置成定期地运行,比如以五分钟的时间间隔运行。现在参照图8中的步骤100,迁移守护程序82(或作为线程的单个守护程序)利用存储在.DMATTR文件60中的属性信息,来确定文件是否需要被迁移,或者也可以利用存储在扩展块64中的属性信息来确定,正如在这里描述的那样。如果文件72先前未被迁移过,那么就把它分解为固定大小或者动态确定其大小的分区70。分区大小可以根据诸如数据访问频率、每次访问读取多少连续数据以及其它访问模式信息等因素来动态加以确定。迁移守护程序82可以派生出其它进程来处理各种任务。在迁移前的处理、数据迁移期间,或者当检查文件在迁移期间是否已经改变的时候(如果它已经改变,则当前的迁移失败并尝试下一次迁移),可以使用信号量、文件锁以及其它方法来保护文件。迁移进程排它地对文件加锁,步骤102,读取属性和区域信息,步骤104,并且判断文件是否需要被迁移,步骤106。如果不需要迁移,则就撤销该锁,步骤108。否则,利用区域信息、文件大小以及分区大小来判断哪些文件块将需要被迁移,步骤110。如果所述文件先前被迁移过,步骤112,则将存在一个包含描述先前迁移信息的容器文件76,并且将读取这个文件以确定所述文件的新版本号。如果所述文件从来没有被迁移过,则就假定这个版本号为1。仅将新的数据或自上次迁移以来所变更的数据迁移到后端14中。数据是根据分区大小来进行分区的,所述分区大小可以是固定的或动态的,步骤114。撤销该锁,以便当正发生迁移时能够继续进行使用所述文件进行其它处理,步骤116。在步骤120中,在不变更前端12上的文件访问时间的情况下,将需要被迁移的分区70复制到后端14。如果在这次迁移期间发生错误,那么就将在下一次迁移运行期间再偿试迁移,步骤124。如果迁移成功,则在步骤126中再次对所述文件加锁,并且将再次读取文件属性和区域信息,并且利用这些信息来判断该文件在数据移动期间是否被变更,步骤128。如果所述文件被变更,则撤销该锁,步骤132,并且因为数据可能是不一致的,所以迁移失败并将稍后再尝试迁移,步骤124。如果在数据移动期间未变更所述文件,则更新文件信息以表明文件已被成功迁移,步骤134。更新扩展属性(比如,DMAPI/XDSM)和区域信息,并且将关于文件的信息,包括路径名、大小、所有者、权限以及其它文件属性信息,写入称为“*.cont文件”的容器文件76中,所述容器文件与数据文件相关联。此外,写入到容器文件76中的信息是关于存储在后端14中的分区的信息,包括版本控制信息。必须以特定顺序来更新文件状态,以便确保一致性。在图9中,步骤140,设置属性以表明文件未被清除,设置文件的分区大小(如有必要的话),设置后端14文件的位置,并将信息直接写入到文件系统16中,步骤142。这确保了万一发生冲突,在文件中存在足够的信息,以便通过前滚到新状态或者回滚到先前状态,来使文件能够被访问。按照这样的方式来写入*.cont文件76的新版本,以确保*.cont文件76包含该文件的旧状态或新状态,步骤144。在步骤146中,经DMAPI/XDSM接口来写区域信息,以便表明所有文件数据均已被成功地迁移到后端14,然后在步骤148中,使.DMATTR文件60同步化(未完成的信息被写入到磁盘)。如果这次失败,那么旧区域信息将仍然是有效的,以便能够在未来的迁移尝试期间进行未来的迁移。更新DMAPI/XDSM属性以便将文件标记为正在迁移,步骤150。这包括设置元数据以表明在后端14中数据被存储在哪里、迁移的时间,以便将文件标记为正在迁移。按照这样的方式来写入元数据,所述方式就是在任何时候的故障都将总是让文件保持一致状态。这避免了万一发生故障时的数据损坏,而且防止文件处于允许访问可能使文件数据无效的状态。在清除后,如有必要的话,存储在区域信息中的状态、文件元数据以及后端版本文件(*.cont文件)则足以能够恢复所述文件,或者如果本地管理的磁盘丢失或是无意中将文件移除的话,也足以能够恢复所述文件。每个数据文件72都可以具有与之相关联的*.cont文件,但是也可以在单个容器文件中存储多个数据文件的*.cont信息,该信息可以用数据文件或诸如对象ID等其它标识符的名称来索引。如果文件先前已被迁移,则检查.DMATTR文件60中的区域信息,以判断哪些分区是脏的;也就是,自上次迁移以来已经被修改的那些分区。已修改的分区被复制到后端,以及可以对其进行版本控制,以便使它们不改写分区的现存副本。如图7所示,*.cont文件76记录下所述版本。例如,如果*.cont文件76表明分区的版本54已经处于后端14中,则就将已修改的分区作为版本55来写入,而无需变更或改写版本54,并且更新*.cont文件76以反映此次操作。实际上,*.cont文件记录下文件变动量。当它存在于任一时间点时,它都具有为恢复相关联的文件所必需的信息,这是因为*.cont文件76有效地保存了快照;也就是说,在任何特定的日期与时间,都可以判断数据文件72看起来像什么。在迁移结束之后(例如,当已迁移的数据已被成功写入到磁带中时),将关于新近迁移的分区的信息存储在容器文件76中。如果文件已首次被迁移,那么就连同到后端14中的容器文件的链路一起,更新.DMATTR文件60,以表明文件已被迁移。如果已修改的分区被迁移,那么就更新区域信息以表明所述分区不再是脏的,并且由此不再需要迁移。由此,在前端12上的文件与其后端14上的分区之间存在链路,被存储在.DMATTR文件60及*.cont文件76中。为了举例说明上述迁移,如果在前端12上存在称为ABC的数据文件,该数据文件先前尚未被迁移过,那么就在后端14中为它选择一个唯一路径名,比方说123。该ABC文件被分解成这样的分区,所述分区的分区大小是由对象管理系统配置结构来确定的。将这些分区作为单独的文件复制到后端14,这些单独的文件指明了唯一路径名、分区序号和版本号;例如123.partition1.version1,123.partition2.version1,直到123.partitionN.version1。然后,写123.cont文件,该文件描述了在迁移期间已经做了什么,包括本地文件系统16上的文件名、分区名以及分区版本。以.DMATTR文件60的形式将附加信息写入本地文件系统16或是该文件系统中的其它地方。尽管可以将它放置在别处,但是放置在本地文件系统16上能加速访问。也可以在前端12上的存储器中缓存所述.DMATTR文件60,不过这会需要时常使已缓存的文件与磁盘上的文件同步,以便万一冲突时确保一致性。所写入的属性包括表明文件ABC已被迁移到文件123的指示,表明迁移发生时的时间戳、文件被迁移到何处以及表明文件已被成功地迁移到后端14的指示。现在参照图10,清除守护程序84(或线程守护程序)利用存储在.DMATTR文件60中的属性信息,来识别已被迁移(不再需要迁移)但没有被清除的文件,步骤200。清除守护程序84可以在确定在本地文件系统上需要空闲空间以后进行这一步骤,并且当足够空间是可用的时候停止清除。在步骤202中,根据实际中的清除策略来对清除候选者进行排序,所述清除策略可以是用户可配置的。可将LRU(最近最少使用法)用作为清除策略,不过也可以根据存储在文件系统16上的数据的特性、使用文件系统16上的数据的应用程序和数据访问模式来选择其它的策略。可以在文件级或分区级应用这些策略。清除守护程序84可以利用扩展属性中的信息,来确定文件中分区的上次访问的时间、访问频率等等。依据清除策略,清除守护程序84识别将要清除的分区。例如,清除守护程序84可以使用最近最少使用算法来对文件排序,然后在被选定用于清除的文件内选择具有比确定日期更早的上次访问日期的分区。文件锁、信号量或其它方法都可以用来防止数据损失或损坏。在清除进程编译清除候选者列表并且选定文件以供清除之后,对所述文件加锁,步骤204。读取属性和区域信息,步骤206,并且检查上述信息来查看自从所述列表被编译以来是否已经访问了该文件;也就是说,看它是否仍然是清除候选者,步骤208。如果否,则不清除该文件并撤销该锁,步骤210。如果该文件仍然是清除候选者,则设置文件区域信息以表明整个文件已被清除,步骤212。清除守护程序84从对应于所选定分区的文件上移除本地数据,步骤214。在DMAPI兼容的系统中,清除守护程序84利用dm_punch_hole()来移除本地数据。根据操作系统的能力,正如多数操作系统中常见的那样,可以将本地文件72从偏移量开始到文件末尾截断,或者像为AIX而设的那样,也可以在一个文件中间穿一个孔。要移除的数据可以位于文件的起始处,而在这种情况下,留下存根74(在图5中示出)。在移除本地数据之后,更新属性和区域信息以反映对数据进行的清除,步骤216。区域信息表明实际清除的数据不再出现在本地文件系统16上,而且如果整个文件已被清除(存根74除外),那么该属性就表明所述文件已被清除过了。如果仍然留有文件的一部分的话,那么该文件就将继续作为清除候选者。在已经更新了文件元数据之后,从所述文件上除掉该锁,步骤218。万一系统崩溃或者发生其它故障时,这样可以保护文件。文件将仍然被视为清除候选者,这是因为尚未将它被标记为已清除,但是当受到访问时,文件中的所有分区都将引发重新升级,这是因为在清除操作之前它们被标记为已清除。一些数据仍然可以是本地的,但是如果在清除操作期间发生错误,那么它可能就不能分辩什么被清除了。由此,清除进程将所有的分区都标记为已清除,并且在清除结束之后,更新所述区域信息以表明哪些分区仍然存在。虽然一些或所有它的数据都可能已经从本地文件上被清除掉了,但是如果元数据更新失败,那么所述文件将仍然看上去是清除候选者。所描述的顺序(sequence)是用来防止数据损坏的,但是只要使区域信息、文件数据移除以及文件元数据更新被同步以确保一致性,其它方法就是可以的。这避免了让文件处于不一致状态,在这种不一致的状态下,可能会访问过时的数据。典型地,文件72在其起始处包含标头和其它经常使用的信息,所述文件是由应用程序扫视的,并且当清除文件时,在适当的位置留下存根74,可以加速数据访问时间。用户可以根据诸如在经常被访问的文件72的起始处中是否有信息以及在该文件72的起始处有多少数据被访问等此类信息,来定义存根74的长度。例如,Oracle数据库可能需要至少128KB的存根大小,这是因为当Oracle访问每个Oracle数据文件时,Oracle经常访问数据文件中的这个数据,比如在启动时间。如果没有存留有存根数据,那么Oracle就会停止,直到已经从后端14恢复所述数据为止,这可能意味着许多的磁带载入次数(tapemount)(或者诸如CD之类的其它存储介质的载入次数)。可以对存根74进行版本控制,并且作为文件或对象存储在后端14中。在图11中,步骤300,事件守护程序80或线程守护程序捕获数据访问事件,并且记录下数据访问活动。当发出数据访问请求时,处理依赖于数据访问是读取还是要修改该文件的访问来进行处理(比如,写入或截断),步骤302。如果数据访问是读取,步骤304,则就检查.DMATTR文件60中的区域信息来判断所请求的数据是否在本地文件系统16上;也就是,判断区域信息是否表明对应于正被访问的那部分文件的分区的是否被标记为存在。如果所请求的数据存在,步骤306,则向文件系统传递访问请求,步骤308,并且可以更新文件属性和区域信息,以便反映所述访问,步骤324。如果所请求的数据不存在,则事件守护程序80或从事件守护程序80接收事件的另一个进程将对文件加锁,并且检查所述区域和属性信息,步骤310,以便判断是否需要进行处理,步骤312。在步骤314中,如果由于先前的事件处理而不需要进行处理,则撤销该锁,并且为所述事件生成响应,该响应将唤醒等待完成I/O请求的进程。如果需要处理,则将该文件标记为可清除的,使元数据同步化,确定完成事件处理所需要的文件数据,确定后端14文件的位置,读取*.cont文件,并且撤销该文件上的锁,步骤316。在数据移动期间不对文件加锁,允许对已经驻留在本地文件系统16上的数据进行处理。从后端14那里读取必要的分区,并将其写入前端12上的本地文件系统16中,步骤318。再次排它地对文件加锁,步骤320,以一致的方式更新区域和属性信息,步骤322,并且撤销该锁。将响应发送给等待的进程,唤醒它,直到完成它的读取请求为止,步骤314。对这个数据的未来访问不会产生恢复事件,除非所述数据被再次清除。根据数据访问模式,也可以使用一些预测性的分区检索;即,关于数据访问模式的信息能够被记录,并且如果判定对特定分区的访问经常引发对另一个分区的访问,则就可以预先检索那个分区。在步骤324中,在事件守护程序80处理数据访问事件之后,可以更新.DMATTR文件60来表明与已访问的文件部分相对应的分区的访问时间,比如清除策略使用处于分区级的数据访问信息的时间。系统更新文件属性来表明文件访问的时间。如果访问请求为写,那么就将修改所述区域来更新访问时间,并且对应于所述数据的分区将被标记为脏的(因此需要被迁移),步骤326。在这种情况下,排它地对文件加锁,并且检查所述事件来判断进行处理是否是必要的,步骤328。如果否,则在步骤330中撤销该锁,并且响应所述事件,结束处理。如果进行处理是必要的,则在步骤332中更新元数据以表明所述文件是清除候选者并且也是迁移候选者,这是因为数据即将被变更。读取文件元数据、区域信息、和*.cont文件,来判断文件的状态。确定产生所述事件的文件的区域,并且如果所述区域信息表明所述数据不在本地,步骤336,则就撤销该锁,并且以类似于上述读取过程的方式移动数据,步骤338。如果已经驻留了所述数据,则不需要从后端14那移动任何数据。在步骤340中,在重新升级数据之后,文件被再次加锁,并且更新文件元数据和区域信息,以表明所述文件中的某个数据需要被迁移,并指明所述文件的哪些部分已被变更。撤销排它锁,并且将响应发送给等待的进程,步骤342。为了举例说明事件处理,对于具有N个均已被迁移和清除的分区的文件ABC,除了具有按配置定义的长度的存根74之外,事件守护程序80会捕获对分区77中的数据的数据访问请求。这在图12中作了举例说明。守护程序确定分区77中的数据不存在于本地文件系统16上,并且检查.DMATTR文件60,确定相对应的容器文件是后端14上的123.cont。将发出对相应后端文件123的分区77的请求。123.cont可以表明版本55是文件123的分区77的最新版本,并且因此将把123.partition77.version55检索到前端12。在将分区恢复到盘之后,更新属性和区域信息。通过迁移和检索文件片段而不是整个文件,该系统避免了大量而耗时的文件转移。例如,数据库文件趋向于相当大型,以千兆字节来测量。在迁移和检索期间来回地移动整个文件是不切实际的,特别是当诸如Oracle之类的数据库应用程序可能正在仅仅访问表的非常小的一部分(例如,行)时更是如此。例如,Oracle并不同时扫视整个文件。更确切些的说,它局部地扫遍一个数据库文件,继续扫视另一个文件等等,直到它最终回到第一个文件并扫视更多的数据。使用完全文件检索导致系统振荡以及更长的检索时间。也将所述系统配置成用于有效地搜索迁移和清除候选者,并获得它们的路径名,不过为了实现这里所述的文件的划分以及分区的管理,这并不所要求。如图14所示,一种方法就是搜索文件名的名称空间,并且查找每个文件的i节点和扩展属性。在一些配置中,i节点包含指向扩展块的指针,所述扩展块包含扩展属性,要求第二次查找以及相应的盘片访问。按照在图13和14中举例说明的更有效的方法,所述系统搜索DMAPI扩展数据文件60(.DMATTR文件),以找到文件名、i节点号以及扩展属性,步骤350。所述系统还可以被配置成用于使用不同文件或几个文件。照此,所述系统能够在不必查找i节点以及还可能不必查找扩展块的情况下,迅速地为名称空间中的每个文件判断哪些文件是迁移或清除候选者,步骤352。为了生成候选者的路径名,利用它的i节点号来查找它的路径名,步骤354。这可以利用在i节点列表和路径名列表中的反向查找来进行。可将上述列表作为表存储在同一个文件.DMATTR,或者存为相互独立的文件或文件组中。利用这种配置,所述系统仅仅查找那些标识为迁移和清除候选者的文件的i节点,而不是必须检查所有文件的信息,所述所有文件包括了那些已被迁移和清除的文件。这相当大地减少了迁移和清除所要求的执行时间和系统负荷。例如,在判断哪些文件要求迁移的过程中,使用这里所述的高效搜索的系统能够在一分钟之内检查具有一百万个作为迁移和清除候选者的文件的文件系统。与带有仅有一个迁移候选者的一百万个文件的Solaris机先前利用名称空间搜索所花费的20分钟相比,它用十秒钟就能找到一个文件。可以通过使用诸如Linux和Solaris之类的Unix-风格的操作系统,来与NFS型文件系统、XFS、UFS、Veritas和类似的文件系统一起使用这种手段,不过它也可以被扩展到其它的操作系统和文件系统。如图15和16中举例说明的那样,这里所述的对容器文件76的使用,使数据能从一个计算机系统(机器A)到另一个计算机系统(机器B)可用,而无需首先复制所有的数据(将一个文件系统的内容复制到另一个文件系统常常是很耗时的进程)。机器B可以被配置成用于使用在后端14上机器A的容器文件,步骤400。每一个容器文件76都包括关于文件属性的信息,所述文件属性比如是大小、所有者、权限以及路径,机器B可以使用上述这些文件属性来在它的本地文件系统上创建新文件。在机器B读取*.cont文件之后,步骤402,创建新文件,步骤404,新文件的大小被设置成在*.cont文件76中所规定的大小,步骤406,并且在步骤408中,释放已分配的空间(就仿佛文件已被清除过一样),由此在机器B的文件系统上创建存根文件。创建.DMATTR文件60或者其它的扩展数据块或文件,并设置属性和区域,步骤410。当机器B修改数据并将它迁移到后端14时,只有机器B才有的容器(*.cont)文件被写入后端14,步骤412,不过这也可以根据需要来进行。当机器B操作时,一般来讲,数据访问请求将导致判定已请求数据不在机器B的本地文件系统上,并且所需要的分区将被从后端14复制到机器B的本地文件系统,步骤414。将按照与已描述过的方式一样的方式在机器B上更新文件属性和区域信息。如果机器B修改数据,则修改过的分区(在图16中示为B的已修改数据)将被写入后端14并且有关该变化的信息将存入机器B的容器文件(示为*.cont′),步骤416。机器A继续写它自己的分区,并且在它自己的容器文件76中存储关于其变化的信息,步骤418。每一个计算机系统都将它自己已修改分区写入到后端14。每一个计算机系统都使用它自己的容器文件,并且因此具有它自己的数据版本。前述公开的内容以及实施例示范性说明了本发明在提高计算机系统中的对象管理效率中的实用性,不过显而易见的是,本发明将有利于许多其它的用途。该发明在数据库、视频、音频以及任何应用程序方面具有特殊的价值,在上述任何应用程序当中,可以访问一文件的部分并与之相关,而无需访问文件中的所有数据。为了清楚起见,以特定流程来举例说明了这里的过程以及方法,但是应当理解的是,不脱离于本发明的精神的情况下,其它顺序也是可以的并且一些还可以并行执行。此外,这些步骤可以被细分或组合。正如这里所公开的那样,依照本发明编写的软件可以存储在诸如存储器或CD-ROM之类的某种形式的计算机可读介质内,或者经由网络来传输,并且由处理器来执行。这里所引用的所有对比文献都意在引入于此以供参考。尽管在上面已经按照特定的实施例对本发明作了描述,但是可以预料的是,对于本领域的技术人员来说,对此发明的变更和修改将无疑是显而易见的,并且可以在所附权利要求的范围内以及等效范围内加以实施。可以诸如通过并行使用多个计算机或均分负载设备或者跨过多个计算机分布任务等,来使用一个以上的计算机,从而就整体来讲,它们执行对象管理系统的功能;即它们取代了单个计算机。上述各种功能都可以由单个计算机上的或分布在几个计算机上的单个进程或进程组来实现。这些进程可以调用其它的进程以处理确定的任务。所公开的原理适用于对象和对象存储以及文件和文件系统。本实施例将被视为是说明性的而非限制性的,而且本发明并不限于这里所给定的细节。因此,意在将公开内容及以下权利要求解释成能涵盖所有落入本发明实际精神和范围内的这类变更和修改。权利要求1.一种对象管理系统,包括存储装置;第一计算机系统,被配置成用于存储第一对象,将第一对象划分成分区,并且在存储装置上存储这些分区;和第二计算机系统;其中第一计算机系统被配置成用于创建包含关于已存储分区的信息的第一数据对象,而第二计算机系统被配置成用于从第一数据对象读取关于已存储分区的信息,选择分区,并且检索已选定的分区。2.如权利要求1所述的系统,其中第一计算机系统被配置成用于在存储装置上存储第一数据对象。3.如权利要求2所述的系统,其中第二计算机系统进一步被配置成用于接收数据访问请求,并且利用所述数据访问请求来选择将要从存储装置中检索的分区。4.如权利要求3所述的系统,其中第二计算机系统被配置成用于创建第二数据对象,该第二数据对象包括关于分区是否存在于第二计算机系统中的信息。5.如权利要求4所述的系统,其中如果第二数据对象表明分区不在第二计算机系统中,则第二计算机系统就从存储装置中检索所述分区。6.如权利要求5所述的系统,其中第二计算机系统被配置成用于根据第一数据对象中的信息来创建第二对象。7.如权利要求6所述的系统,其中第二计算机系统被配置成用于创建第三数据对象,该第三数据对象包括关于已存储分区和所述第二对象的信息。8.如权利要求7所述的系统,其中第二计算机被配置成用于修改已检索的分区,并且在存储装置上存储已修改的分区。9.如权利要求8所述的系统,其中第二计算机系统被配置成用于将关于已修改分区的信息包括在第三数据对象内。10.如权利要求1所述的系统,其中第一数据对象包括关于第一对象的属性的信息,而第二计算机系统被配置成用于创建具有第一对象的属性的第二对象。11.如权利要求10所述的系统,其中所述属性包括文件大小和路径名。12.如权利要求10所述的系统,其中第二计算机系统被配置成用于在创建第二对象之后和在从第二对象中读取数据之前,释放分配给第二对象的空间。13.如权利要求12所述的系统,其中第二计算机系统被配置成用于当释放分配给第二对象的空间时保留存根。14.一种用于共享对象管理系统中的对象的方法,所述对象管理系统包括存储装置;第一计算机系统,被配置成用于存储第一对象,将第一对象划分成分区,并且在存储装置上存储这些分区;以及第二计算机系统;所述方法包括创建包含关于已存储分区的信息的第一数据对象;以及令第二计算机系统从第一数据对象中读取关于已存储分区的信息,选择分区,并且检索所选定的分区。15.如权利要求14所述的方法,进一步包括在第二计算机系统中接收数据访问请求,并且其中选择将要从存储装置中检索的分区包括利用数据访问请求来判断选择哪个分区。16.一种用于共享对象管理系统中的对象的计算机程序产品,所述对象管理系统包括存储装置;第一计算机系统,被配置成存储第一对象,将第一对象划分成分区,并且在存储装置上存储这些分区;以及第二计算机系统;所述计算机程序产品包括计算机可用介质,在该计算机可用介质中包括有机器可读的代码,以用来创建包含关于已存储分区的信息的第一数据对象;以及令第二计算机系统从第一数据对象中读取关于已存储分区的信息,选择分区,并且检索所选定的分区。17.一种对象管理系统,包括存储装置;第一计算机系统,被配置成用于在存储装置上存储第一对象以及第一对象的副本;和第二计算机系统;其中第一计算机系统被配置成用于创建包含关于第一对象的已存储副本的信息的第一数据对象,而第二计算机系统被配置成用于从第一数据对象中读取关于第一对象的已存储副本的信息,并且从存储装置中检索第一对象的已存储副本。18.一种共享对象管理系统中的对象的方法,所述对象管理系统包括存储装置;第一计算机系统,被配置成用于在存储装置上存储第一对象以及第一对象的副本;以及第二计算机系统;所述方法包括计算机可用介质,在该计算机可用介质中包括有机器可读代码,以用来创建包含关于第一对象的已存储副本的信息第一数据对象;以及令第二计算机系统从第一数据对象中读取关于第一对象的已存储副本的信息,并且从存储装置中检索第一对象的已存储副本。全文摘要一种对象管理系统(10),包括存储装置(14);第一计算机系统(12),它被配置成用于在存储装置上存储第一对象以及第一对象的副本;和第二计算机系统。第一计算机系统被配置成用于创建包含关于第一对象的已存储副本的信息的第一数据对象,而第二计算机系统被配置成用于从第一数据对象中读取关于第一对象的已存储副本的信息,并且从存储装置中检索第一对象的已存储副本。第一对象可以由第一计算机系统来划分,并在存储装置上存为分区,并且第一数据对象将包含关于所述分区的信息。第二计算机系统将被配置成用于从第一数据对象中读取关于所述分区的信息,从存储装置中选择分区。文档编号G06F17/30GK1559041SQ02818844公开日2004年12月29日申请日期2002年9月26日优先权日2001年9月26日发明者马克·萨克,马克萨克,鲁夫,理查德·鲁夫,埃弗森,库尔特·埃弗森申请人:Emc公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1