备份系统和备份方法

文档序号:6479579阅读:188来源:国知局
专利名称:备份系统和备份方法
技术领域
本发明涉及操作计算机系统的方法,尤其涉及一种对存储在存储设备里数据提供备份副本的方法,对预防存储设备出现故障或者数据出错、丢失或感染计算机病毒的可能。本发明尤其涉及对个人计算机(PCS)提供备份。
背景技术
通常,在包括着例如一个硬盘或固定磁盘的存储装置的简单的单用户计算机系统里,在任何给定时间只有一个应用程序存取该存储装置。对存储装置存储的数据进行备份的任务是由一个应用程序进行的,在进行备份操作时该应用程序独占地使用该存储装置,因为在终止备份应用程序之前别的应用程序都不能在这个环境下运行。
随着引入允许同时运行几个应用程序的多任务环境以及引入允许几个用户共享相同资源的网络系统,出现了多于一个的应用程序同时存取同一个存储装置的情况。当出现这种情况时,存在应用程序之间发生冲突的可能。例如,一个应用程序可能要修改或删除另一个应用程序正在使用的一个文件。这会引起混乱并且可能弄乱存储装置以及造成数据丢失。
已经在操作系统引入了所谓的“文件锁定”方法和“记录锁定”方法,以在文件锁定情况下避免多于一个的应用程序对一个文件写,或者在记录锁定的情况下避免两个应用程序修改一个给定文件的相同区域。这些方法对于大多数应用程序相当复杂,尤其是对于仅对共享文件作出相当小的修改从而不对其它想要存取其锁定的文件或记录的应用程序造成明显延误的应用程序更是如此。但是,在共享存储装置的计算机系统中用于周期性地备份数据的应用程序是一种特殊情况。
因为备份应用程序或操作系统都不知道可和任何应用程序相关的文件的内部结构,可以备份的数据最小单元是单个文件。
此外,文件的备份副本必须是某一特定时刻的原始文件的准确映象。但是,复制一个文件不是瞬时过程,复制所需的时间取决于文件的长度和复制操作的速度。除非备份应用程序可以确保在复制处理期间别的应用程序不会修改文件,将会造成问题。
为了复制一个文件,备份应用程序把随机存取存储器(RAM)的一个区域指定成为转送缓冲器,并且继续不断交替地把源文件的块读到该缓冲器并接着把缓冲器的内容写到辅助存储装置中。除非文件非常小,为了构造文件的一份完整副本,需要数次填满传送缓冲器以及数次读写操作。
在复制处理期间允许文件被修改而造成的潜在问题可以通过研究一个正按10个块的序列复制的文件的例子来显示。如果复制这个文件的1至5块后该文件被一个需要对文件的块3和块8进行更改的事物处理修改,复制过程接着会复制对块8的修改但是不复制对块3的修改,因为在发生该事务处理之前块3已经得到复制。从而备份副本只包含一部分事务处理,这有可能使该备份副本完全无用,因为“拥有”该副本的应用程序可能认为该文件被损坏。
我们的美国5,086,502号专利公开一种把每次写操作由对辅助存储装置的复写操作进行备份的方法。除该方法之外,还存在两种对具有共享存储装置的计算机系统的文件进行备份的方法i)在备份时锁定文件。它通过拒绝别的用户的写访问防止别的用户修改该文件。如果别的用户已具有写访问,备分应用程序必须跳过该文件或等到获得独占的写访问时再写文件。
ii)检测该文件的改变。在复制文件之后,备份应用程序可以利用操作系统检查在复制操作期间是否进行过修改。如果进行过修改,必须重做复制或者跳过该文件。
因为许多文件(尤其是数据库文件)处于不断的使用之中,后两种方法都不能提供适当的解决办法。而且,在进行备份时这两种方法要求有效地把用户锁定。另外,只有很少的辅助存储设备与操作系统的组合能够支持每分钟大于15兆字节(Mb)的持续传送速率,从而复制一个大文件所需的时间是相当长的。
一些应用程序通过提供把它们自己的文件可靠地备份到共享环境中处理该问题,但是每个应用程序的过程是不同的。为了备份整个存储装置,备份应用程序因此需要知道各个不同的内部过程是怎样工作的或者必须依靠适当时刻时的人工干预。
从而,因为备份应用程序必须备份整个文件而且因为在备份处理期间文件不能被别的应用程序修改,采用现有的备份方法会在具有共享存储装置的计算机系统中引起延迟。在备份大型文件时情况更是这样。
Walls的美国5,163,148号专利说明一种备份系统,在这种系统中开始备份文件之前,文件进入相容状态;例如,如果与一次事务处理有关需要多次操作,则完成所有这些操作。如果正在备份的文件的一部分需要更新,在进行更新之前把原始文件的这一部分复制到盘的独立部分上。备份程序备份文件时用已被复制并且已被保存在盘上别处的原始部分来代替已更新过的部分。通常保持着文件占据着的盘上的磁道和扇区的列表的盘范围图被扩充成包括一个索引表,该索引表把已复制的原始文件部分的磁道及扇区位置和更新部分的磁道及扇区位置联系起来,更新部分占据着从中对它们进行复制的区域。
1995年7月20日我们以目录号WO95/19599分布的国际专利申请号PCT/GB94/01581说明一种运行具有一个在几个应用程序中共享的存储设备的计算机的方法,该方法还包含一个备份进程,其中包括一个用于保持在执行该备份进程的同时对存储设备上的数据实行更改的记录的进程。该记录用于确保在执行备份进程时备份进程所看到的数据是未改变的,同时允许其它进程按常规地依旧更新存储设备,从而避免和文件封锁技术相关的延迟。以使计算机的常规使用不受到影响的方式在微机的操作系统的接口级上执行附加的操作。在该方法中一个备份进程可操作为发出一个启动信号和停止信号并至少执行一个从存储装备如硬盘读原始数据的备份读操作。中央处理机(CPU)执行至少一个周期地向存储装置的主区写数据的常规写操作和至少一个从存储装置中读数据的常规读操作。
在接收所述的启动信号之后,执行侦听写操作的侦听操作,并且把数据写到存储装置的辅助存储区以保护否则会被写操作改写的原始数据。保持一个被写到辅助区的文件部分的记录,并且当执行备份操作和常规读操作中的一种操作时,询问该记录以便根据该记录从主存储区和辅助存储区中的一个区中读数据。以这种方式对备份进程提供刚在发出启动信号之前状态下的得到保护的原始数据。不过在这种情况下,该记录是按文件记录而不是按盘上的磁道和扇区位置定义文件部分的。这避免了如果记录是按磁盘位置即磁道和扇区时会造成的问题,从而提供一定的优点。
记录最好包括一个在其中存储第一数据的δ区和包括第一数据的实际位置与其预定位置之间的映象关系。可替换地,第二数据可记录在δ区而且其它的应用程序可以依旧对存储设备上的该预定位置进行写。
δ区最好是同一存储设备如硬盘的一个不同的区域。所需的附加操作存储在及运行在计算机系统的操作系统接口级上是有利的。如果软件存储在操作系统级上,可把它做成对用户是透明的,从而不会影响应用软件。
该备份记录可存储在各种存储装置上,例如磁带机、光盘或者基本存储介质的别的区中。一旦完成备份,可按常规方式复原备份。

发明内容
本发明提供可应用于上述各方法的改进。首先,要求系统可以把由备份程序发出的读请求和由其它可能正在运行的应用程序发出的读请求区分开。
在本发明的第一方面中提供一种操作包含着一个指令存储器、一个中央处理机以及一个存储装置的基于微处理机的计算机系统的方法,该方法包括以下步骤提供在该计算机系统上运行的备份进程,该备份进程可操作以发出一个启动信号和一个停止信号并且发出至少一个从存储装置读原始数据的备份读指令;对中央处理机提供存储在存储器中的第一指令组以使中央处理机执行至少一个从存储装置中读数据的常规读操作;保持写入到存储装置中的数据的记录,以关联存储装置的主存储区和存储装置的辅助存储区的对应区域;以及在接收启动信号之后一旦接收读指令判定该读指令是和备份读操作有关还是和常规读操作有关,并且在执行备份读操作和常规读操作中的一种操作时,询问记录以根据记录从主存储区和辅助存储区中的一个区中读数据,而在执行另一种备份读操作和常规读操作时从主存储区读数据;判定读指令是和备份读操作有关还是和常规读操作有关的步骤包括考察发出该读指令的存储器的区域以确定发出该读指令的程序的身份的步骤。
在本发明的供选的第二方面中提供一种在计算机网络里操作包含着一个指令存储器、一个中央处理机和一个存储装置的基于微处理机的计算机系统的方法,该方法包括以下步骤提供在计算机系统上运行的备份进程,该备份进程可操作为发出一个启动信号和一个停止信号并且发出至少一个从存储装置读原始数据的备份读指令;对中央处理机提供存储在存储器中的第一指令组以使中央处理机执行至少一个从存储装置读数据的常规读操作;保持写入到存储装置中的数据的记录,以关联存储装置的主存储区和存储装置的辅助存储区的对应区域;以及在接收启动信号之后一旦接收读指令判定该读指令是和备份读操作有关还是和常规读操作有关,并且在执行备份读操作和常规读操作中的一种操作时,询问记录以根据记录从主存储区和辅助存储区中的一个区内读数据,而在执行另一种备份读操作和常规读操作时从主存储区读数据;并且其中的改进包括对备份进程分配一个唯一用户标识,从而判定读指令是和备份读操作有关还是和常规读操作有关的步骤包括判定读操作是否由带有所述唯一用户标识的用户请求的步骤。
前一个应用方法中的一个潜在问题是,由于一个文件已为别的应用程序打开,有可能不能向这个文件提供所需的备份操作,因为操作系统拒绝备份进程访问该文件。
在本发明的第三方面(最好和本发明的上述各方面一起使用第三方面)中,提供一种操作包含着一个指令存储器、一个中央处理机以及一个存储装置的基于微处理机的计算机系统的方法,该方法包括以下步骤提供在计算机系统上运行的备份进程,该备份进程可操作为发出一个启动信号和一个停止信号并且执行至少一个从存储装置读原始数据的备份读操作,对中央处理机提供存储在存储器里的指令以使中央处理机执行至少一个从存储装置读数据的常规读操作;以及提供文件打开装置,其用于打开一个文件以由常规读操作读并用于拒绝其它读操作访问该文件,其中的改进包括设置和备份进程相关的装置,该装置停用文件打开装置的拒绝功能以允许同时由一个备份读操作和一个常规读操作对该文件进行读访问。
最后,尽管前一个应用的备份方法可以复制在进行备份的同时对正在备份的文件所实施的修改,但是本发明者已意识到当备份操作实际开始时如果该文件处于写处理时将会出现问题。
在本发明的第四方面中提供一种操作包含着一个指令存储器、一个中央处理机和一个存储装置的基于微处理机的计算机系统的方法,该方法包括以下步骤提供在计算机系统上运行的备份进程,该备份进程可操作为发出一个启动信号和一个停止信号并且执行至少一个从存储装置中读原始数据的备份读操作;以及向所述中央处理机提供存储在所述存储器里的指令以使所述中央处理机执行至少一个对存储装置写数据的常规写操作;而其中备份进程能够操作和由所述指令打开的供访问的文件,其中的改进包括在完成对要备份的文件的任何系列的写操作之前推迟发出启动信号的步骤。
下面将参照附图以示例的方式说明本发明。


图1是一台个人计算机和一台盒式磁带机的方块图;图2A和2B分别说明常规的个计算机以及修改以根据本发明的方法运行的计算机在操作系统级上的系统存储映象;图3是备份操作中记录数据的方法的流程图;图4是图3的方法的第二种实施方式的流程图;以及图5是一个流程图,说明对参照图3和图4说明的实施方式的改进。
具体实施例方式
参照图1,一台个人计算机10通常包括一个中央处理机12、一个随机存取存储器14和一个以硬盘机16为形式的非易失性存储设备,在该示例中,出于提供备份存储装置的目的,一台磁带机18和计算机10连接。
为了控制磁盘机16和计算机10的其它部分之间的数据流,备份应用程序的一部分形成为一个记录进程,其运行为侦听分别从磁盘机16的常规读操作和对磁盘机16的常规写操作。
在开始对一个文件的备份复制之前,备份应用程序启动记录进程,以便把所有的磁盘写活动重定向到称为“δ”区的磁盘的另一个区上。保持一个δ变换表来提供所有已重定向到δ区的磁盘写操作的记录。该表保持每个磁盘写操作所关联的数据在盘上的预期目的地和它在δ区中的实际存储位置之间的映象。如果在已经是表中某项的对象的一个区域中出现后来的写操作,允许用新数据重写δ区中的老数据。以这种方式,因为所有的改变都重定向到δ区,在进行备份复制时盘的主要部分上的数据不发生变化。
当由备份应用程序请求读盘操作时,该操作不加改变地通过从而回送给备份应用程序的数据来自盘的主要部分上的原始数据区。但是,当由别的应用程序请求读盘操作时,记录进程首先运行成检查表以确定从记录进程开始侦听写操作以示对该区域是否已发生过写盘操作。如果已发生过,把读操作重定向到δ区中的对应位置。如果没有发生过写操作,即从开始侦听写操作以来该条数据没有改变,则不加改变地执行该读操作。
以这种方式,除备份应用程序之外的所有应用程序常规地了解盘16上所存储的数据的改变。备份应用程序看见的数据是在发出停止侦听读写操作的记录进程的指令之前不会改变的数据。
在备份复制操作完成后,驱动记录进程使计算机返回到常规操作。通过使用表中存储的映象把存储在δ区的改变施加到盘16的主要部分的适当原始数据区域中实现该恢复阶段。在实施δ改变中,仍如上述继续侦听写盘操作。当不再存在施加到原始数据区的写操作时,停止对写操作的侦听并且常规地运行系统。
作为进一步的改进,如果一个记录保持着备份复制进程已进展到的范围,在盘16的主要部分业已备份后,软件可以允许对这部分的写操作不加改变地通过,因为在这部分上数据改变已不重要。这可减小δ映象表的长度。而且如果该操作所朝向的盘的主要部分上的区域已经是映象表中一项的对象,则可简单地删掉该项从而缩短恢复阶段所需的时间。
本发明尤其可应用于IBM兼容个人计算机,即其中中央处理机(CPU)采用英特公司制造的8086、8088、80286、80386、80486以及奔腾型号处理机芯片的大多数个人计算机,以及类似的基于微处理机的系统。在这些计算机中,一旦一个程序希望访问一个文件它调用一个对盘写数据的标准例行程序。该例行程序是操作系统的一个必备部分,在DOS操作系统的情况下称为Interrupt 21hex(INT 21h)。该例行程序执行的活动(称之为中断处理程序)取决于进入时传送给该例行程序的参数。在图2A中该例行程序表示成在系统存储映象中构成操作系统的一部分,图中用箭头指示INT 21h的进入点。为了实现根据本发明的最佳方法,如图2B中所示在操作系统的接口级上增添了附加的程序代码。实际上,在DOS环境下,可利用CONFIG.SYS文件把它们作为设备驱动程序装入到计算机里。
增添的软件具有用一组供选的指令代替一条写数据的指令的作用。类似的技术可用于侦听从盘读数据的指令并且也用供选的一组指令代替读数据指令。
图3的流程图表示该供选的一组指令所提供的有关操作序列。一旦接收INT 21h调用,程序首先检查以判定该调用是否是写调用。如果是,在步骤20程序检查是否意味侦听写调用。如果不是,数据写入(步骤22)原始数据区24。
如果写调用在侦听中,接着程序检查δ映象表(步骤26)判定是否以前已对原始文件24的该区进行过写操作,这由该文件的特定记录或特定部分定义。如果(步骤28)以前进行过写操作,则用新数据重写(步骤32)和原始文件24的该部分先前相映射的δ区30的有关部分。
如果写调用正在侦听中但是未对原始文件24的这个部分进行过写操作,则在表中增加这次写操作并对该块数据分配δ区的一个新区域(步骤34)。然后把该数据写到该新的δ区域中(步骤36)。
如果调用是读调用,程序在步骤38检查是否意味侦听读调用。如果不是,则从原始文件24读数据(步骤40)。
如果程序是侦听读调用,它首先在步骤42判定该调用是否来自备份应用程序。如果调用的确来自备份应用程序,程序进入步骤40并从原始文件24读数据。
如果该读调用不来自备份应用程序,程序检查δ映象表以判定对和这次读调用对应的原始文件24的该区的一次写操作是否已重定向到δ区(步骤44)。如果没有重定向过(步骤46)程序回到步骤40并从原始文件24读数据。如果这次读操作已被重定向,则从δ区30的正确区域中读数据(步骤48)。
如果INT 21h调用既不是写调用也不是读调用,则返回到常规的INT 21h处理程序。
在本发明的第二实施方式中,当在记录进程期间侦听读操作和写操作中,对文件的一个特定区的第一次写操作不再把改变后的数据存储到δ区,而是把原始数据存储到δ区并允许修改原始文件。在映象表中构成一项,该项指向现已存储到δ区的原始文件的该区的原始内容。记录进程将忽略对文件的该相同区域的随后的任何写请求。如果映象表表明原始文件的该区已被重写过,则来自备份应用程序的读请求会重定向到δ区。
在图4,以流程图表示第二实施方式。该图类似于图3,具有相同参考数字的步骤表示类似的行为。
图3和图4之间的差别如下在步骤60中,如果读侦听是有效的(步骤38)并且读不是来自于备份应用程序,则从原始数据区读数据。这和图3的步骤42相反。
在步骤28之后插入一个附加的步骤62,其在数据第一次被重写之前从原始数据区读数据。
图3的步骤36被修改以形成新的步骤64,步骤64插入一个对步骤62中所读数据的δ区的附加写操作。
步骤32被修改形成新的步骤66,步骤66不再重定向数据以对δ区重写,而是代之以用数据重写原始数据区。
第二方法比第一方法慢,因为每次文件写请求从第一方法的单次重定向写变为一次读和两次写。但是,一旦完成备份,第二方法不需要把存储在δ区中的修改施加给原始文件。可以简单地废除δ映象表以及存储在δ区中的数据。此外,由于这些差别,不需要准备当尚未全部把δ区的改变施加到原始数据之前出现致命状况(例如电源失效)时进行恢复的措施。
在上述的方法构成备份应用程序的一部分的情况下,读操作侦听可在备份程序之内发生,不必涉及到使用操作系统的例行程序。
参照图3和图4说明的系统的详细实现在熟练的技术人员的能力之内,不必对此作出全面的说明。如果在MS.DOS下实现,需要时读者可把IBM DOS Technical Reference手册作为背景材料参用。
本发明最好实现为操作系统本身的一部分,或者原始操作系统码的一个组成部分,或者以设备驱动程序的形式构成对操作系统的扩展。在Intel 80386 CPU(以及更高)的情况下本发明应该典型地运行称为“Ring 0”的最高特权级上,在这级上对系统中的所有部件的访问是不受限制的。
但是,本发明在运行上并不依赖任何特殊的CPU体系。它可在其它系统上方便地实现,例如在采用68000和Power PC系列CPU的Macintosh计算机上。
本发明可用于多用户环境。在该情况下本发明最好用在带有文件访问控制的环境中。本发明将确保进行无差错备份复制,同时系统的其余部分仍有效地完整运行仿佛不存在本发明。在缺少文件访问控制下,不管是否应用本发明,都存在着文件出错的可能。
本发明尤其可应用到由数据库(例如dBase)生成的文件,文件可很大并划分成记录。更新过的记录登记在表中,并且在完成备份之前保持记录的更新版本及原始版本两者。该表例如可包括文件中从其开始更新数据的起点以及对应于更新的数据量的长度值。备择地,该表可包含以更新的记录的身份表示的标识。
在多用户或网络情况下,当计算机环境允许标识希望进行备份的特定用户时,本方法还可包括识别用户并且按上述方式只备份该用户的文件的步骤。以这种方式不需要侦听所有的数据事务处理而仅需要侦听和该用户有关的数据事务处理。
请求源的标识上面所说明的能够对打开文件运行的备份方法依赖于区分来自于备份应用程序的读请求和来自其它源即常规应用程序发出的读请求的能力。这在图3的步骤42和图4的步骤60中出现。
只要把打开文件方法设置成备份应用程序的一个组成部分,就可以容易地确定读请求的源,因为备份应用程序‘明白’已发出那种请求。但是,如果备份应用程序已经存在,例如以标准的现成的软件包的形式或者以别的不能更改以容纳打开文件方法的形式存在,则会出现问题,从而必须代以用附加的代码来实现。
按照第一种改进,通过探寻事件链(即追溯或者“向上”)以鉴别激发读请求的代码区以将来自备份应用程序的请求和来自别的方面的请求区别开。在这种方法的下述示例中仍采用MS.DOS操作系统说明;但是,类似的技术可应用于其它操作系统环境。
读请求是由INT 21h调用激发的,其常规地直接进入中断处理程序。一般中断处理程序不知道调用程序。它只简单地通知执行某个特定功能然后返回到调用程序。在上述的用于DOS环境的Intel CPU中,CPU自动地把调用程序的返回地址放在“栈”中,并转移到中断例行程序的第一条指令。当实现该功能之后,中断处理程序发出一条IRET(中断返回)指令,其使CPU从栈中检索返回地址并在返回地址上继续执行。从而中断处理程序不需要知道并且确实不知道调用程序。
在上面参照图3和图4说明的系统中,用另一组指令代替INT21h中断例行程序。除上面所说明的功能外,这组指令可适用于如下述附加地确定请求源。
在该改进中中断处理程序检查栈以确定返回地址。在80×86系列Intel CPU情况下将调用程序的代码位置偏移和区段分别作为第一个字和第二个字存储在栈顶,即分别为SS:〔SP〕和SS:〔SP+2〕。在本说明书的附录中给出在MS.DOS下实现该改进所涉及的概要步骤。
接着该例行程序可以检查由该栈定义的调用源并按一些可能的方法确定做出该调用的程序,下面是这些方法的一些例子(i)因为一个现成的程序的各个版本的代码是类似的,可以检查返回地址附近代码的各种特性以判定该调用程序是否是一个已知的备用程序。返回地址附近的代码和所使用的备份程序的预期代码进行比较,以判定是否存在表示该调用是由备份程序作出的匹配。
(ii)备择地,通过参考和每个装入程序有关的程序段前缀和环境串可确定程序名。从该栈可知程序段并可读出PSP。这将允许定位环境串从而得到程序名。在Andrew Schulman等人著的教科书“Undocumented DOS”(Addison-Wesley出版社,1993年第二版,ISBN 0-201-63287-X,见章7,尤其见356-359页)中对该技术作了详细说明。
在非MS.DOS的操作系统的情况下,调用程序的身份可由栈中的其它参数确定,参数包括连接号、任务身份号、进程号等等。在某些操作系统中,还可利用全局变量确定进程名。
该方法依靠辨认调用程序的一些已知特征,例如程序名、进程名(或线程名),或者依靠辨认程序码中某些“标志”,“标志”可以通过该栈追溯调用程序而得到的已知字节序列。
按照可用于网络服务器环境的第二种改进,通过只为备份进程保留一个特定的用户名可以确定调用程序的身份。鉴别用户名(唯一用户标识)以代替确定程序的身份,并且所有来自保留用户的请求都假定来自备份程序。因为在准予访问文件前要求每个用户在服务器上注册,这是一种有效的方法,当然以用户名永远用于备份而不用于其它目的为前提。该方法不需要事先了解特定的备分程序。
以类似的方式,可以询问专用于标识备份进程的进程标识或任务标识以判定是备份进程还是别的应用程序在请求读。在同一时刻从不存在两个具有相同标识(ID)的任务,从而在任何时刻标识唯一地辨别进程(尽管任务号是重复使用的)。
上述说明应用于读请求,但它也可能用于写请求的相似过程。在由备份程序发出写请求的事件中可采取适当的活动,通常这将涉及某个错误处理例程,因为备份应用程序常规地不应向中断处理程序发出写请求。
如上面所述,增添的指令组首先判定中断调用是否是读(或写)请求,而当如果是时判定该请求是由备份程序还是由其它应用程序发出的。原则上这两个操作的次序是可以颠倒的,在检查调用的性质之前可首先确定调用源。
受保证的文件访问参照图3和4所说明的打开文件备份方法假定备份应用程序总是可得到对文件的读访问。在实际中,可能并非总是这种情况,因为可能已由别的应用程序打开该文件进行排它性的读/写使用,从而可能拒绝备份应用程序的访问。
本发明者明白,因为备份应用程序决不应该在备份之中写文件,并且由于上面所说明的打开文件的方法将确保备份应用程序所接收到的文件副本在备份过程中不会改变,对于具有对文件读访问的备份应用程序事实上是完全安全的。
可以按下述提供备份目的访问。通常操作系统保持着一个所有打开文件的表,它包括着诸如文件处理标识符、当前文件相对位置指针以及各个打开文件持有的访问权等信息。
在MS.DOS操作系统的情况下,利用INT 21h功能打开文件。通过增加和上面所述的相同的另一组指令可以辨别文件打开请求。通过采用上一节中所说明的请求源标识技术,或者通过来自备份程序的直接指令,可以确定该文件打开请求是由备份应用程序作出的,而在这种情况下可以暂时地处理打开文件表以确保该文件访问是许可的,甚至在常规下不允许的情况下也可如此做。一旦访问得到许可并在中断处理程序返回前,该表恢复到它以前的状态,从而来自别的应用程序的相继请求将如常规地被拒绝访问。这样将满足来自备份应用程序的读请求,尽管原始应用程序认为它自己仍排它地使用着文件。
在MS.DOS中打开文件表称为系统文件表(SFT)。SFT是一个对每个打开文件含有一条项的表。每条项包含文件访问所许可的访问方式。所必需的附加指令在备份应用程序请求访问一个打开文件时修改SFT,即暂时地改变适当的SFT项以造成常规下阻止备份程序的访问尚未得到许可的印象。接着将允许访问并且分配“文件柄”。在返回到调用程序之前,SFT项中的访问权恢复到原始状态。
上面所提到的教科书“Undocumented DOS”中全面地说明了系统文件表(SFT),见第8章,465-469页和490-494页。具体地,在DOS操作系统的情况下,INT 21h中断处理程序中所需的许可备份应用程序访问的步骤在图5中示出。
参照图5,一旦接收到作为INT 21h调用的文件打开命令,在步骤70中利用上一节所说明的技术中的一种来判定请求源。如果是备份应用程序,则在步骤72判定请求访问的文件是否已打开。如果上述两个问题中的一个的答案为NO,则程序返回到步骤74的常规INT21h处理例行程序。如果这两个问题的答案都是YES,则执行图5中所说明的专用代码。
该处理如下述继续。在SFT中的每条项包含对请求处理所许可的访问方式(‘访问方式属性’)。在步骤76中,保留SFT中适当条项的当前或原始访问方式属性。在步骤78,把访问方式属性改变为‘都不拒绝’状态,从而实际上使SFT变为不起作用的,也即它不再制止对打开文件的多个访问。现在在步骤80可调用常规INT 21h中断处理程序以便在常规方式下为备份程序打开文件。当备份程序结束该文件时,把事先存储的原始的访问方式属性放回到SFT中(步骤82)。最后利用读栈的IRET指令执行返回到调用程序(步骤84)。
在附录中给出的程序步骤设想该提供文件访问许可的改进已在使用。
修改SFT的准确方式并不重要,而且可采用各种方法。最佳方法操纵共享字段“share-prev-sft”和“share-net-machine”(见Undocumented DOS,478页)。通过操纵这些字段,例如把“deny read(拒绝读)”值改成“deny none(都不拒绝)”,可许可备份程序的访问。备择地,可以改变MS.DOS中的SHARE公用程序的一部分以许可访问(见op.cit.,490-494页)。
在其它操作系统环境下可用类似方法,例如Novell公司的NetWare环境。
建立‘良好’状态参照图3和4的上面所述的打开文件备份方法确保打开供备份的文件在备份进行之中不会改变。但是该方法在开始备份的瞬间不确立该文件处于‘良好’状态。例如,另一个应用程序可能正在写一个涉及一系列写操作的事务处理,一些写操作已完成而另一些写操作尚未完成。因为该备份方法在打开的文件上运行,从而有可能备份应用程序接收含有部分事务处理的文件的副本。
本发明者知道,通过在确定事务处理不再继续进行之前延迟备份应用程序的文件打开请求,可确保文件的‘良好状态’备份副本。因为大多数网络操作系统理所当然地是多线程的,即是设计成在同一时刻运行多于一个的进程的,从而在完成别的进程的同时延迟一个进程的能力是这些操作系统都具备的,因此可以容易实现延迟备份程序。通常如果短期停止备份操作无关紧要,因为一般用户并不依赖备份的完成,尤其如果文件在打开时可被备份的情况下更如此。文件打开请求的延迟对应于推迟开始执行参照图3和4所说明的程序的起始信号。
事务处理通常在相对短的时间长度上发生,在事务处理之间存在较长的时间间隔。一般应用程序将在一个很快的序列中完成单个事务处理所需的全部写操作,因为否则的话电源故障或类似的致命问题的危险会造成盘的数据只包含部分的事务处理,从而当再启动系统时它将作为损坏的文件被处理。很清楚,事务处理写盘的时间越短,在事务处理期间发生不能连接的致命问题(例如电源故障)的可能越小。通过测量连续写操作之间的时间长度,有可能把对一个量值的判断作为文件的事务处理的状态。例如,如果在过去的一分钟内没有发生写操作,则应用程序非常不可能处于写单个事务处理的中途。通过根据经验调整各应用程序的不活动时间周期,可以建立事务处理完整性的高可靠的指示器。
从而说明了对参照图3和图4所示方法的各种改进,即用于请求源标识的各种技术、用于确保许可文件访问的一种技术、以及用于确保在开始备份前所备份的文件处于‘良好’状态的各种技术。最好组合地应用各种改进。但是,可以选择性地和独立地应用这些改进,而且不必在同一个应用中同时实现所有这些改进。
本发明主要根据DOS操作系统尤其根据MS.DOS得到说明。但是,本发明在运行上并不依赖任何特定的CPU体系。具体地,本发明不限于DOS操作系统,并可在Novell NetWare、OS/2或UNIX以及采用6800及PowerPC系列CPU的Macintosh计算机上实现。
附录
权利要求
1.一种操作包括着一个指令存储器、一个中央处理机和一个存储装置的基于微处理机的计算机系统的方法,所述方法包括以下步骤提供在所述计算机系统上运行的备份进程,所述备份进程可操作为发出一个启动信号和一个停止信号和完成至少一个从所述存储装置读原始数据的备份读操作;以及向所述中央处理机提供存储在所述存储器中的指令以使所述中央处理机执行至少一个从所述存储装置读数据的常规读操作;以及提供文件打开装置,用于打开供常规读操作读的文件并且用于拒绝别的读操作对所述文件访问;其中的改进包括提供和所述备份进程关联的装置,该装置停用所述文件打开装置的拒绝功能以允许同时由一个备份读操作和一个常规读操作对所述文件进行读访问。
2.权利要求1所述的方法,其中所述计算机系统保持一个打开文件表,并且其中通过暂时可逆地改变该表来停用拒绝功能。
3.一种用于包括着一个指令存储器、一个中央处理机和一个存储装置的基于微处理机的计算机系统的备份系统,该备份系统包括一个备份程序,用于在所述计算机系统上运行,它可操作为发出一个启动信号和一个停止信号和执行至少一个从所述存储装置读原始数据的备份读操作;以及用于向所述中央处理机提供存储在所述存储器中的第一指令组以使所述中央处理机执行至少一个从所述存储装置读数据的常规读操作的装置;以及文件打开装置,用于打开供常规读操作读的文件并且用于拒绝其它的读操作访问所述文件;其中的改进包括和所述备份程序相关的装置,其用于禁止所述文件打开装置的所述拒绝功能以允许同时由一个备份读操作和一个常规读操作对所述文件进行读访问。
4.如权利要求3所述的系统,其中所述计算机系统保持一个打开文件表,其中通过暂时可逆地修改该表来禁止拒绝功能。
全文摘要
一种用于带有硬盘的计算机系统的备份程序保持正在备份的文件中对数据的改变记录。在备份期间原始文件和更新文件的一部分或记录被存储,并且备份程序读原始数据而其它应用程序读更新数据。为了辨别读操作是由备份程序激发还是由别的应用程序激发,系统利用栈确定读请求的源。备择地,系统询问用户、进程或任务标识。通过操纵系统文件表保证备份程序对文件的访问。通过按预定的时间推迟启动备份操作确保文件处于“良好”状态。
文档编号G06F9/46GK1627274SQ02101790
公开日2005年6月15日 申请日期1996年3月18日 优先权日1995年3月23日
发明者皮特·布里安·马尔科尔姆 申请人:切恩尼软件(英国)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1