基于动态数据区的硬盘数据保护与还原方法

文档序号:6598653阅读:173来源:国知局

专利名称::基于动态数据区的硬盘数据保护与还原方法
技术领域
:本发明涉计算机数据保护方法,特别是一种基于动态数据区的硬盘数据保护与还原方法。
背景技术
:随着信息技术的发展,计算机应用普及到各行各业中,系统及数据的安全问题日益突出。操作失误、人为破坏、计算机病毒等都会导致系统崩溃及数据丢失的现象。在这种情况下,出现了许多数据保护措施,硬盘保护卡(还原卡)作为一种有效的数据保护方法,得到了广大PC用户的欢迎。硬盘保护卡在保护数据之前需要建立还原点,建立还原点的主要工作是记录硬盘各分区中扇区的使用情况形成扇区状态表。还原点建立之后,拦截计算机对硬盘的存取,将落在保护范围内的写操作重新定向到映射区,同时修改状态表中相应的状态并将这个映射关系记录到映射表中,此后对被映射过的扇区的读写操作,根据映射表将其重定向到相应的映射区。数据保护的关键是通过映射操作,使得对保护数据的写入被映射到映射区,对原数据起到了保护的作用。还原功能是通过适当的状态表、映射表和扇区操作,使得硬盘数据从文件系统层次上看,恢复到建立还原点时的状态。保护卡除了还原功能还有写回功能,该功能将被映射到别处的数据真正写回到它原来的位置。如果在计算机上只能建立一个还原点,称为实现了单点还原,如果可以建立一个以上的还原点,则称为实现了多点还原。从上边的描述可见,除了计算机本身的数据之外,保护卡的保护还原算法需要额外的空间用于保存扇区状态表、映射表以及映射数据。将扇区状态表和映射表称为保护卡的管理数据,其存储区域称为保护卡的管理数据区。把管理数据和映射数据称为保护卡数据,其存储区域称为保护卡数据区。目前的保护卡采用的方法是在硬盘的的末端划分出一定的空间作为保护卡数据区。这个数据区的容量一般设为硬盘容量的5%-20%,大都采用分区隐藏或HPAOtostProtectedArea)技术对它进行保护。把这种保护卡数据区称为静态的保护卡数据区。它具有以下缺点1)保护卡数据区的容量有限,当保护卡数据超出保护卡数据区容量时(称这种情况为保护卡数据区溢出),即使硬盘上还有大量的空闲空间,保护卡程序也不得不作蓝屏或重启动处理。静态保护卡数据区的容量又不能设的太大,比如说在一个80G硬盘上,将保护卡数据区的容量设为硬盘容量的20%,用户就会发现自己硬盘的实际可用空间只有64G。2)保护卡数据区是静态设定的,一旦设定后无法实现保护卡数据区容量的动态增长,当硬盘数据操作量大,硬盘扇区映射多时,容易出现数据区溢出的情况。3)静态保护卡数据区无法动态增长,缺乏足够的空间用于容纳更多的保护卡数据,因而只能设置一个还原点,无法实现多点还原。4)由于保护卡数据区是静态设定的,对于已经安装好了操作系统的计算机,为了找到一块足够大的静态区域,它通常需要对用户的硬盘的最后一个分区进行重新设定,从而导致该分区上数据的丢失,对许多用户而言,这是不可接受的。
发明内容为克服现有保护卡保护还原算法的缺点,本发明给出了基于动态保护卡数据区的硬盘数据保护与还原方法以及在在动态保护卡数据区基础上多点保护与还原方法。动态保护卡管理数据区的创建扫描整个硬盘,将硬盘以N(N取值为2的整数幂)扇区为单位分成数据快,通过分析文件系统,得到各数据快的占用情况,形成状态表,此时状态表中有三种初始状态(I)Free,空闲块硬盘上未被占用的空闲块。(2)0CCUpied,占用块硬盘上已被占用但勿需保护的块。(3)Protect,保护块硬盘上已被占用且需保护的块。根据扇区块数形成映射表,假设状态表的大小为Ss,映射表的大小为Sm,从后向前扫描状态表,找出连续空闲空间大于Ss+Sm的硬盘区域,这块硬盘区域即为保护卡管理数据区,为保证管理数据区不被破坏,需要将状态表中对落在该区域中的扇区块的状态标记为保护状态Protect2。Protect2和Protect在保护时的处理是一样的,差别在于还原操作时,Protect数据块不允许数据写回,而Protect〗则允许数据写回。此后,当保护卡软件需要映射操作时,映射块是从也是通过查找状态表中的空闲块,进而从硬盘空闲空间中动态分配来的。可见保护卡的状态表、映射表以及映射区都是动态分配的,它勿需对硬盘分区重新设置,也勿需隐藏硬盘的容量。在运行过程中,只要硬盘还有空闲空间,就不会出现蓝屏或重启动。多点保护还原算法的实现传统的保护卡还原算法无法实现多点还原的主要原因是静态的保护卡数据区容量无法动态增长。采用动态保护卡数据区后,如果硬盘容量允许,可以设置任意多个还原点。第一个还原点的状态表是通过分析硬盘各分区的文件系统得到的,此后的还原点的状态表则是通过分析前一个还原点的状态表得到的。对Protect块和Protect〗块进行写操作时,会被映射到映射区,同时在映射表中记录该映射关系。在创建新的还原点时,为了保证旧还原点环境下的数据不遭破坏,需要创建新的映射关系,假设原来的映射为A->B,我们需要重新申请一个空闲块C,将B块的数据拷贝到C±夬,并用A->C替换A->B。这种做法有两个缺点1)如果映射表中映射关系比较多,则要花较长的时间才能完成新的还原点的设置。2)在新的还原点中,有些映射块可能不会有写入动作,B块到C块的拷贝不但浪费了时间,也浪费了一个数据块的空间。为此,本发明采用了写时拷贝(C0W,CopyOnWrite)技术,将数据块的拷贝推迟到对数据块进行实际写操作时再进行。和单点情形相比,多点保护与还原带来了极大的便利,其困难之处在于,在多点情况下,既要保证旧的软件环境依然可用,又要保证它不会遭到破坏并且可以恢复如初。在
背景技术
中提到,保护卡的写回功能是将被映射到别处的数据真正写回到它原来的位置。在多点的情况下,这种处理是错误的,因为它会导致旧的还原点无法还原如初了。本发明通过引入追加状态链、增加映射、映射指针移动、映射块拷贝以及自由块拷贝等操作,可以实现了任意多个还原点的保护与还原算法。图1为单点保护与还原状态转移图。图2状态链示意3追加状态链操作示意4增加映射操作示意5映射指针移动操作示意6映射块拷贝操作示意7自由块拷贝操作示意图具体实施例方式动态保护卡管理数据区的创建假设硬盘的总扇区数为HD_SeCt0rS,每个数据快的大小为N(N取值为2的整数幂)扇区,则可将硬盘分为Μ=[Η—Sectors/N」块。每个块的状态用一个字节描述,则一个状态表的大小为M个字节。原始状态表和当前状态表的大小为Ss=2M字节。映射表M项,每项为4个字节,其值表示映射块号(映射表项序号本身即为被映射块号),大小为Ss=4M字节。假设每扇区为L字节,那么状态表和映射表占用的扇区数为S=「6M/Zl,占用的块数为6/οΑχ=「^/Λη。扫描整个硬盘,分析文件系统,得到各数据块的占用情况,数据块的三种初始状态为Free、0CCUpied和Protect,将各块的状态值填入原始状态表中。从后向前扫描原始状状态表,找出连续空闲块块数等于Blocks的区域,这块区域用于保存保护卡管理数据区(状态表和映射表),为了为保护管理数据区不被破坏,将这些空闲块的状态由Free改Protect2。Protect2状态也是一种初始保护状态,它和Protect状态在保护时的处理是一样的,差别在于还原时有所不同。将原始状态表的值拷贝一份给当前状态表,然后将两份状态表的值存入硬盘中所找到的连续空闲块中便完成了动态保护卡管理数据区的创建工作。单点保护的实现保护是通过改变硬盘的读写操作而完成的。动态保护卡管理数据区创建完成以后,在DOS通过BIOS13H号中断,在WINDOWS/LINUX/UNIX操作系统下通过设备驱动程序Hook硬盘对扇区的存取操作,对于目的扇区,计算出它他落入哪些数据块,从状态表中取出数据块的状态,根据数据块的状态,执行不同的动作。下面结合图1,给出详细描述。图中椭圆表示数据块的状态,椭圆内标示的是它的状态值。带箭头的弧表示状态的转移,弧上的字母表示引起状态转移的操作,r(read)表示读,w(write)表示写,R(restore)表示保护卡还原操作,W(write-back)表示保护卡的写回操作。假设读写操作中的数据对应的块为A,下边描述各种状态块的读写处理。1)对于Occupied块,读写操作都是直接放行。2)对于Protect块,如果是读则直接放行,如果是写操作,则首先通过状态表申请一个空闲块B,将A块的状态由Protect改为Protect_map,将B的状态由Free改为Image,将数据写入B块,并在映射表中记录A->B的映射关系。如果写操作的数据长度不满一个块的长度,则读出A块的数据和写操作数据合并后再写入B块。3)状态Protect2是专为动态保护卡管理数据区而设的,它的保护动作和状态Protect是一样的。4)对于Free块,如果是读则直接放行,如果是写,则将A块的状态由Free改为Occupied,然后放行写操作。5)对于Protect_map,Protect2_map禾口Image_map块,从映射表中取出B块,将读写都重定向到B块。Protect_map和Protect2_map差别在于还原时的动作不一样。6)对于Image块,如果是读则直接放行,如果是写操作,则首先通过状态表申请一个空闲块B,将A块的状态由Image改为Image_map,将B的状态由Free改为Image,将数据写入B块,并在映射表中记录A->B的映射关系。如果写操作的数据长度不满一个块的长度,则读出A块的数据和写操作数据合并后再写入B块。单点还原与写回的实现由上边的描述可见,有三种状态数据块需要保护,它们是Protect块,Protect2块和Image块,对这些数据块的写操作会产生映射关系A->B,对Image块的写入则会在映射关系上会形成状态链,如图2所示,图中矩形表示数据块,矩形内标示的是它的状态值,带箭头的线表示映射关系。状态链的链首只有两种状态Protect_map和Protect2_map。还原与写回是通过遍历这两种状态链,对链中的结点采用适当的处理完成的1)对于以Protectjnap开始的链,还原操作为遍历该链,除链首外,对每个链结点,从映射表中取出映射关系A->B,执行数据块B到数据块A的拷贝动作。对于写回操作,对链首也要执行数据块B到数据块A的拷贝动作。2)对于以ProteCt2_map开始的链,还原和写回操作为遍历该链,对每个链结点,从映射表中取出映射关系A->B,执行数据块B到数据块A的拷贝动作。对于以ProteCt2_map开始的链,还原与写回操作是一样,对链首也要执行执行数据块B到数据块A的拷贝动作。原因是对操作系统而言,Protect2块占用的是硬盘的空闲区,为了保护保护卡的管理数据区不被破坏,将它设为保护状态。当执行还原操作时,要允许被映射带其它地方的数据拷贝回来,否则在文件系统中,会出现数据不一致的现象。还原和写回操作完成后,动态保护卡管理数据区有可能遭到破坏,所以需要重新生成管理数据区。表1数据块状态转换关系<table>tableseeoriginaldocumentpage6</column></row><table>多点还原点的生成第一个还原点的状态表是通过分析硬盘各分区的文件系统得到的,第二个还原点的状态表则是通过分析第一个还原点的状态表得到的。在单点保护与还原中,数据块共有8种状态,分别是Free、Occupied、Protect、Protect2、Protect,map、Protect2_map、Image_map、Image。在新的保护状态中,原来的受保护数据Protect块、Protect2块和Image快仍然要得到保护,原来的映射关系Imagejnap要保持,而原来的映射关系Protectjnap和Protect2_map则要改动,本发明引入了写时拷贝的方法,在设置新还原点时不进行数据块的拷贝工作,在映射表中保持原来的映射关系,在状态表中将Protect—map禾口Protect2_map分另Ij改为Protect_map_cow禾口Protect2_map_cow。夺数据块的拷贝推迟到对Protect_map_cow块和Protect2_map_cow块进行写操作时再进行。由于在第二个还原点中增加了两种状态Protect_map_cow和Protect2_map_cow,数据块总共有10种状态。状态的转换关系如表1所示。得到状态表后,在新状态表的基础上创建动态保护卡管理数据区,将前一个的还原点的映射表复制到当前映射表,就完成了新的还原点的创建工作。多点保护的实现对状态为Protect_map_cow和Protect2_map_cow的数据块,从映射表中取出映射关系A->B,进行读操作时,将其重定向到B快,对它们进行写操作时,执行写时拷贝动作申请一个空闲块C,将块C的状态由Free改为Occupied,Protect_map_cow改为Protect_map,Protect2_map_cow改为Protect2_map。将B块的数据禾口待写入数据合并后写入到C块,在映射表中将A->B改为A->C(由于A指向了C,因而可能产生以Imagejnap为链首的状态链)。对于其它八种状态的数据块,读写的操作跟单点时是一样的。多点还原与写回的实现假设当前还原点为第η个还原点,要还原到第m个还原点(m^n)。在多点的情况下,多出三种分别以Protect_map_cow、Protect2_map_cow和Image_map为链首的状态链,共有五种状态链。还原与写回是通过遍历这五种状态链,对链中的结点采用适当的处理完成的。如果m=1,对于以Imagejnap开始的链,还原和写回时的操作为遍历该链,对每个状态为Imagejnap的结点,从映射表中取出映射关系A->B,执行数据块B到数据块A的拷贝动作。对于以其它四种状态开始的链,写回操作和以Imagejnap开始的链一样,还原操作则略过链首的数据拷贝动作。还原和写回动作完成以后,需要分析硬盘,重新创建第一个还原点。如果m>1,由于要保证数据还原和写入后,不能破坏第m个还原点之前的数据,处理上要复杂的多。1)对于以Imagejnap开始的链,还原和写回时的操作为判断该链是否存在于旧状态表中。a)如果存在,判断该链的长度是否比旧链的长,如果是,则将链中新的数据块追加到到旧链中,如图3所示,图中位于上方的旧状态链,位于下方的是当前状态链。在旧状态表中将B块的状态改为Imagejnap,将C块的状态改为Image。在旧映射表中,记录映射关系B->C。称这种操作为追加状态链操作。b)如果不存在,则遍历该链,对每个状态为Imagejnap的结点,从映射表中取出映射关系A->B,执行数据块B到数据块A的拷贝动作,并将Imagejnap改为Occupied,同时将旧状态表中相应的状态也改为Occupied。2)对于Protect_map和Protect_map_cow开始的链,还原操作为遍历该链,对每个状态为Imagejnap的结点,从映射表中取出映射关系A->B,执行数据块B到数据块A的拷贝动作,并将Imagejnap改为Occupied,同时将旧状态表中相应的状态也改为Occupied。3)对于Protectjnap开始的链,写回操作和还原操作的差别在于对于链首的处理。对链首的处理和第m个还原点时该数据块的状态有关。根据表1数据块状态转换关系可知,数据块的当前状态为Protectjnap或Protect_map_cow,它在第m_l个还原点的状态(旧状态)可能为Protect、Protect—map禾口Protect_map_cow之—。a)旧状态为Protect或Protect_map_cow,如图4所示,在旧状态表中,将A的状态改为Protect_map,将B的状态改为Image。将映射关系A->B记录在旧映射表中。称这种操作为增加映射操作。b)旧状态为Protectjnap,此时有两种处理方法,第一种方法如图5所示,在旧状态表中,将B的状态由Image改为Occupied,在旧映射表中,将映射关系A->B改为A->B2。称这种操作为映射指针移动操作。第二种方法如图6所示,将B2块的数据拷贝到B块。称这种操作映射块拷贝操作。第一种方法,勿需数据拷贝,节约时间,第二种方法使得磁盘数据更紧凑。4)对于Protect_map_cow开始的链,写回操作和以Protectjnap开始的链相似,对对链首的处理和旧状态有关a)旧状态为Protect,参照图4,执行增加映射操作。b)旧状态为Pr0teCt_map_C0W,如果B=B2,参照图3,执行追加状态链操作。否贝U,参照图4,执行增加映射操作。c)旧状态为Protectjnap,如果B=B2,参照图3,执行追加状态链操作。如果BΦΒ2,参照图5和图6,可选择映射指针移动操作或映射块拷贝操作。5)对于以Protect2_map和Protect2_map_cow开始的链,还原和写回操作是一样的,它的旧状态可能为Free、Protect2、Protect2_map和Protect2_map_cow之一。当旧状态为Protect2、Protect2_map或Protect2_map_cow时,处理禾口以Protectjnap禾口Protect_map_cow开始的链的写回操作是相似的,不再赘述。当旧状态为Free时,如图7所示,将旧状态由Free改为Occupied,将B2块的数据拷贝到A块。称这种操作为自由块拷贝操作。还原和写回动作完成以后,在第m-1个还原点的基础上,重新创建第m个还原点。权利要求一种硬盘数据保护与还原方法,其特征在于保护卡管理数据区是动态的生成的。2.如权利要求1所述的保护与还原方法,其特征还在于在动态保护卡管理数据区基础上的多点保护与还原方法。3.如权利要求1所述的保护与还原方法,其特征还在于对保护卡管理数据的保护和对硬盘上的受保护数据的保护是按相同方式进行的。4.如权利要求2所述的多点保护与还原方法,其特征还在于第一个还原点的状态表是通过分析硬盘各分区的文件系统得到的,此后的还原点的状态表则是通过分析前一个还原点的状态表得到的。5.如权利要求2所述的多点保护与还原方法,其特征还在于,通过引入写时拷贝技术,在设置新还原点时不需要进行数据拷贝工作。6.如权利要求2所述的多点保护与还原方法,其特征还在于包含以下操作追加状态链操作、增加映射操作、映射指针移动操作、映射块拷贝操作、自由块拷贝操作。全文摘要本发明公开了一种基于动态数据区的硬盘数据保护与还原方法,该方法的数据管理区和映射区都可以动态增长,克服了传统的基于静态数据区方法中数据区容易溢出和无法实现多点保护与还原的缺点。在创建动态保护卡管理数据区基础上,给出了单点保护与还原实现方法。在单还原点的基础上,根据状态转换规则,给出了创建新还原点的实现方法。在多还原点的基础上,通过引入写时拷贝、追加状态链、增加映射、映射指针移动、映射块拷贝以及自由块拷贝等操作,实现了任意多个还原点的保护与还原方法。文档编号G06F11/14GK101819544SQ20101011606公开日2010年9月1日申请日期2010年3月2日优先权日2010年3月2日发明者王静申请人:王静
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1