一种计算机硬盘数据多时间点快速存储与恢复方法 所属技术领域
本发明涉及计算机信息安全领域,尤其是存储于硬盘的数据信息自身的安全,提供了在计算机使用过程中对硬盘数据多个可任意选择的时间点进行快速存储与恢复的方法。
背景技术
在大部分的计算机PC、笔记本系统中,硬盘是基本的数据存储设备,确保硬盘数据的安全对整个计算机信息安全意义重大。在计算机使用过程中,感染计算机病毒、各类应用程序的隐含缺陷以及用户失误操作,都难免会发生数据丢失或被破坏的现象,并造成无法挽回的损失。
目前各种硬盘数据的安全保护方法,大多采用基于数据备份的措施,让用户选择硬盘相关数据内容作为备份目标,并在硬盘未被使用的部分空间划分出可被保护的区域,然后复制所需数据内容在划分出的受保护区域中做备份;当需要恢复数据时,再从受保护地区域中取出备份的数据覆盖目标硬盘。这种方法有两个缺陷:其一,将数据在硬盘中完全复制一份会占用大量的硬盘可用空间,如备份不同时间点的数据则占用比例成倍增加;其二,一个或多个硬盘的数据的备份与恢复,将消耗大量时间且往往需要用户中断工作并进入特殊的操作环境,操作不便。
用户在计算机使用过程中往往希望保存硬盘不同时期的数据内容。例如在用户无法确认当前时间点硬盘内容正确性的情况下,希望能够在保存当前时间点硬盘内容的同时,不破坏此前所保存时间点的数据内容;或用户在安装某个至关系统安全的软件前,希望能将此刻硬盘的系统数据快速保存,假使软件安装后发现某些故障问题而无法处理或卸载时,可以快速地恢复此前所保存的硬盘内容从而使系统恢复;还有的用户要在一个操作系统中因为不同的使用目的而安装不同的操作系统或软件,但又不希望将各个软件安装在一起从而导致降低操作系统的运行效率,所以往往希望在不同时间点保存安装有不同操作系统或软件的硬盘内容,然后在需要时选择不同时间点的硬盘内容作为当前时间段的硬盘数据。
硬盘的数据往往占用空间很大,单纯的复制备份很占用硬盘空间,如果再用复制备份来保存多个时间点的数据内容,硬盘开销是几乎无法忍受的。更重要的,是在这些复制与备份的操作中,占用了大量的宝贵时间,因而很多计栓剂使用者往往就放弃了硬盘数据保存及备份,从而为硬盘数据安全埋下隐患。
目前市面所流行的各类还原卡产品,初步解决了快速保存于恢复硬盘数据的功能,提高了保护硬盘数据的效率,但其不足是仅限于保存一个时间点的硬盘数据,远远无法满足用户的复杂需求。
【发明内容】
为了解决现有硬盘数据的快速保存及恢复方法只能保存单一时间点的硬盘数据、占用硬盘空间大、操作繁琐漫长等一系列问题,本发明提供了一种计算机硬盘数据多时间点快速存储与恢复的方法。这种存储与恢复方法能让用户在工作中快速保存、还原多个不同时间点的硬盘数据。
本发明的技术方案是:通过截获操作系统针对硬盘的读写请求,为每个时间点请求读写的地址分配不同的真实硬盘地址,并记录硬盘请求地址和真实分配的硬盘地址间的映射关系,使得不同时间点硬盘数据状态的请求互不干扰,这样可以实时、增量地存储硬盘变动的数据,且使数据动态存放于同一块硬盘的剩余空间。在需要时可多次保存当前时间点的数据状态,在恢复某个已保存时间点的数据状态时,只需在映射关系表中将操作系统的读写请求重新定向到该时间点。
本发明有两个关键部分:1)截获操作系统的读写请求。2)为每个时间点硬盘请求要读写的地址分配不同的真实硬盘地址,并记录硬盘请求地址和真实分配的硬盘地址间的映射关系。
1、截获操作系统的读写请求是通过在当前操作系统中安装一个中间驱动,中间驱动位于操作系统硬盘读写访问和磁盘设备端口驱动之间,由中间驱动管理对磁盘设备端口驱动的所有调用,这样可以对各个时间点的所有硬盘读写请求统一分配真实硬盘地址。
2、为每个时间点硬盘请求要读写的地址分配不同的真实硬盘地址,并记录硬盘请求地址和真实分配的硬盘地址间的映射关系,通过两个数据结构实现:各个时间点的块索引表、块计数表。各个时间点的块索引表用来详细记录各个时间点硬盘数据的分布情况和硬盘请求地址与真实分配的硬盘地址间的映射关系。比如,当本发明方案截获一个对硬盘的读请求,方案将根据这个时间点块索引表中硬盘地址的映射关系,把这个读请求映射到它在硬盘真实的地址,映射的硬盘真实的地址可能和这个请求要读的地址不同。各个时间点的块索引表中的信息需要相互沟通,比如必须让其他时间点知道某个时间点已经占用的硬盘地址,其他时间点就可以回避使用已经占用的硬盘区域,块计数表就是为这个目的而设计的,它记录各个地址被不同时间点占用的次数。
本发明将硬盘地址分块管理,一个块包含一个或多个扇区,扇区的个数一般是2的幂,每个扇区地址唯一对应一个块地址,这样分块管理可以提高本发明的执行效率。
下面介绍块索引表的详细设计:
各个时间点的块索引表是记录各个时间点对块地址的使用情况,每个时间点有唯一的一个块索引表,其中,当前时间点的块索引表叫做当前块索引表。一个时间点的块索引表实际上是一个以块地址为下标的数组,每个元素包含两个部分:块地址状态、块地址转移指针。
块索引表的块地址状态记录了这个块地址在这个时间点时的使用状态,它实际上是一个整数值,不同的值代表不同的使用状态,使用状态可以是:空闲、已使用、已保护、已转移、待转移、坏地址;其具体含义是:
(1)标识为空闲的块地址是指这个块没有被任何时间点的数据占用;
(2)标识为已使用的块地址是指这个块已经被当前时间点的数据占用;
(3)标识为已保护的块地址是指这个块已经被存储过的时间点数据占用;
(4)标识为坏地址的块地址是指这个块对应的区域有故障而无法使用;
(5)已转移是对一个标识为已保护的块地址写数据时出现的情况:当前时间点需要写一个已保护的块A时,需要在分区中重新找到一个空闲的块B,以后当前时间段对原来已保护块A的所有硬盘读写都转移成对块B的读写访问,映射后,原来块A的地址状态就由已保护变成已转移,即当前时间点所有对原来地址的访问均转移到新地址B;
(6)待转移是对一个标识为已转移的硬盘地址保存后出现的情况:在保存一个时间点时,如果当前时间点中块A已经标识为已转移且它的映射是块B,在保存后,为了保证块B的内容不被后来时间点的硬盘访问破坏,块A的地址状态就由已转移变成待转移。
块索引表的块地址转移指针用来把对这个块的访问请求转换成对另一个块的访问请求,当一个块的使用状态是已转移、待转移时,就需要把对这个块的访问请求转移到这个块的块地址转移指针所指的新块地址。
下面是块计数表的详细设计:
块计数表是记录各个块地址被不同时间点占用的次数。所有的时间点共用同一个块计数表,块计数表记录了各个块地址被不同时间点占用的次数,它也是一个以块地址为下标的数组,每个元素是一个记录次数的整数。
本发明的技术方案在操作上分为三个部分,分别是硬盘数据快速存储、硬盘数据快速保存、硬盘数据快速恢复。
1、硬盘数据快速存储包括以下步骤:
(1)为当前时间点建立块索引表;
(2)截获当前操作系统所有的硬盘访问请求;
(3)根据块索引表中块地址的使用状态,将截获硬盘访问中的地址映射到合适的硬盘真实块地址,再将根据映射更改索引表中各个占用的块地址的块地址状态、块地址转移指针。
2、硬盘数据快速保存包括以下步骤:
(1)修改当前块索引表中块地址状态,将要保存的块设置成保护状态;
(2)将当前块索引表保存到硬盘适当位置;
(3)根据已保存时间点块索引表中块地址状态更新块计数表;
(4)为下一个时间点建立新的块索引表。
3、硬盘数据快速恢复包括以下步骤:
(1)从硬盘适当位置找出要恢复时间点的块索引表;
(2)用这个时间点的块索引表覆盖当前块索引表;
(3)根据此时块计数表中块的引用情况更新当前块索引表中块地址状态。
本发明的硬盘数据快速存储方法中,将截获硬盘访问中的地址映射到合适的硬盘真实块地址,再将根据映射更改索引表中各个占用的块地址的块地址状态、块地址转移指针的方法是:
(1)对于写操作的硬盘访问,如果写操作所指的块在块索引表中的使用状态为空闲,则直接将写操作和它所指的真实块地址相映射,并在块索引表中把访问所指块的使用状态由空闲更改成已使用;如果写操作所指的块在块索引表中的使用状态为已使用,则直接将写操作和它所指的真实块地址相映射;如果写操作访问所指的块在块索引表中的使用状态为已保护或坏地址,则搜索一个空闲的新块,将写操作和这个搜索到的新块相映射,然后在块索引表中把新块的使用状态由空闲更改成已保护,还要将原来块的地址转移指针指向新块;如果写操作所指的块在块索引表中的使用状态为已转移,则先通过块地址转移指针找到转移后的目标块,然后将硬盘写操作和这个目标块相映射;如果写操作所指的块在块索引表中的使用状态为待转移,则首先搜索一个空闲的新块,将写操作和这个搜索到的新块相映射,然后在块索引表中把新块的使用状态由空闲更改成已保护,再将原来块的地址转移指针重新指向新块,再把原来块的使用状态由待转移更改成已转移;
(2)对于读操作的硬盘访问,如果读操作所指的块在块索引表中的使用状态为空闲或已使用,则直接将读操作和它所指的真实块地址相映射;如果读操作所指的块在块索引表中的使用状态为已保护、已转移、待转移或坏地址,则先通过块地址转移指针找到转移后的目标块,再将读操作和这个搜索到的目标块相映射。
本发明的硬盘数据快速保存方法中,修改当前块索引表中块地址状态,将要保存的块设置成保护状态的方法是:对于地址状态是已使用、已转移的块,将其块地址状态分别更改成已保护、待转移。根据已保存时间点块索引表中块地址状态更新块计数表的方法是:对于保存时间点块索引表中块地址状态是已保护、待转移的块,在块计数表中将其引用次数加1。
本发明的硬盘数据快速恢复方法中,根据块计数表中块的引用情况更新当前块索引表中块地址状态的方法是:如果某个块在当前块索引表中块地址状态是空闲而且在块计数表中的引用次数不是0,则将此块在当前块索引表中块地址状态更改为已保护。
本发明的有益效果是,可以快速地保存硬盘使用过程中多个时间点的数据状态,各个时间点的数据相互不影响,而且用户可以方便删除已保存的各个时间点,极大的扩展了硬盘数据保存的选择范围;保存一个时间点的硬盘数据只需保存当前块索引表并更新块计数表,整个保存过程的硬盘读写量很小,可以迅速完成;保存硬盘数据不额外占用大量硬盘空间,极大节省硬盘空间;用户在保存数据时不需要进入特别的操作环境,在等待片刻后就可以继续工作,极大地方便了用户操作。
【附图说明】
图1是本发明多个时间点间相互关系的实施例。
图2是本发明三个时间点的存储效果实施例。
图3是一个时间点块索引表的实施例。
图4是一个硬盘地址的使用属性变化实施例。
图5是本发明的中间驱动在三种操作系统平台上实现的结构层次图。
图6是本发明保存操作与还原操作的流程图。
图7是本发明快速恢复程序实施例。
【具体实施方式】
下面在特定实施例的上下文中描述本发明,但并不旨在这样限定本发明。
图1是本发明存储的多个时间点间相互关系实施例,显示了某个硬盘一种可能的多个时间点间相互关系。
图1中一共有14个时间点,其中各个时间点保存的先后顺序就是数字的大小顺序。时间点1是用户第一个保存的时间点,用户在后续的使用当中又连续地保存了5个时间点。在这6个时间点中,时间点1是时间点2的上一个时间点,时间点2是时间点3的上一个时间点,直到时间点5是时间点6的上一个时间点。在保存了时间点6后,用户将硬盘的数据恢复到了时间点2的状态,从恢复的时间点2开始,用户又开始了新的使用,在新的使用过程中用户又做了4次保存,这里时间点2是时间点7的上一个时间点,时间点9是时间点10的上一个时间点。从时间点相互关系上看,可以说用户从时间点2又引出了一个硬盘的使用分支,时间点7、8、9、10就是这个分支上的时间点。同理,用户在恢复时间点8后又从时间点8引出了时间点11;在恢复时间点3后引出了时间点12;再一次恢复时间点2后引出了时间点13、14。
从图1可以看出,用户的保存可以是将任何当前时间点的硬盘数据记录下来,恢复可以是将任何时间点的硬盘数据恢复。
图2演示了一个硬盘在保存了三个时间点后,各时间点及硬盘真实硬盘的效果图。图2中最上方是用户通过操作系统在三个时间点时各自看到的硬盘,这个用户在这三个时间点看到的硬盘都是经过映射后的虚拟硬盘,虚拟硬盘的地址是连续的,用户感觉不到它与真实硬盘的任何区别,操作系统在发硬盘读写请求时不会发现有任何不同。图2的中间部分是中间驱动。中间驱动截获当前时间段操作系统所有的硬盘访问,也就是任何对虚拟硬盘的访问。然后中间驱动根据每个时间点的硬盘地址映射关系将虚拟地址和硬盘真实物理地址相映射,最后转换成对硬盘真实物理地址的访问。每个时间点的硬盘地址映射关系是由每个时间点的块索引表决定的。图2的下方是真实硬盘和块计数表。块计数表的第一行是硬盘块地址,第二行是块的引用次数。
在图2的实施例中,用户在时间点1、2、3的虚拟硬盘中分别存储了数据ABCD、ACDG、ABHC,三个时间点的虚拟地址①②③④分别被映射到块‘1’‘2’‘3’‘4’、‘1’‘3’‘4’‘10’、‘1’‘2’‘8’‘9’。在块计数表中可以看到各个块的引用次数。其中要注意的是,时间点3虚拟硬盘地址④的内容是C,它在硬盘真实的存储块地址是9。
从图2可以看到保存一个时间点的硬盘数据只需要将当前时间点的块索引表保存,并且更新块计数表,每个时间点数据保存不用额外保存,极大节省硬盘空间。
图3是图2实施例中时间点3的块索引表的实施例。图3中可以清楚地看到,时间点3不但记录了和自己相关的块(1、2、3、4、8、9)的地址状态,而且还记录被其他时间点占用的块(10)的地址状态。
在图4是一个硬盘地址使用属性变化实施例,这个实施例演示了一个硬盘真实块地址出现的各种状态。图4实施例中,块1在时间点1的块索引表中的地址状态一开始是空闲,后来操作系统写A到块1,于是块1在时间点1的地址状态变成已使用。当保存时间点1时,块1在时间点1的地址状态又变成已保护,同时把块1在块计数表中的引用次数加1。保存时间点1的块索引表后进入时间点2,建立时间点2的块索引表。在时间点2,操作系统又需要写B到块1,这时需要在时间点2的块索引表中找到一个空闲块,比如块2,将B写到块2,同时将块2在时间点2的地址状态变成已保护,然后在时间点2的索引表中将块1的地址转移指针指向块2,再把块1的地址状态改换成已转移。将块2在时间点2的地址状态变成已保护是因为,在时间点2中操作系统有可能还要使用块2,为了告诉中间驱动块2已经不能直接写入所以要将块2的地址状态变成已保护。在时间点2中如果操作系统后来还要写C到块1,根据块1的地址状态和地址转移指针,把C直接写到块2。在保存时间点2时,将块1在时间点2的地址状态变成待转移,表示如果在后来的时间点想写块1,需要重新将块1映射到一个新的空闲地址。在后面的时间点3中操作系统又需要写D到块1,这时在时间点3的块索引表中再找到一个空闲块,比如块3,将D写到块3,同时将块3在时间点3的地址状态变成已保护,然后将块1在时间点3的块转移指针指向块3,再把块1在时间点3的地址状态改成已转移。
图4显示的使用属性变化表明,本发明可以很方便、快速地更改地址的使用属性。
图5是本发明的中间驱动在三种平台上实现的结构层次图,三种平台分别是Windows、Linux和Dos。在Windows平台上中间驱动位于文件系统驱动和设备驱动之间,中间驱动将截获所有对硬盘设备驱动的调用。在Linux平台上中间驱动位于Linux的块设备驱动之中,实际上在块设备驱动中加了一个过滤层,所有对硬盘驱动的调用都将由这个过滤层截获。在Dos平台上,通过替换原来dos下的Int13H入口,在新的Int13H入口和原有Int13H入口间加入中间驱动,中间驱动截获对Int13H的调用,重新映射后再调用原有的Int13H。
图6是本发明保存操作与还原操作的流程图,左边是保存操作流程图,右边是恢复操作的流程图。
用户在工作当中觉得需要保存某个时间点时,用户请求保存,然后中间驱动会中止所有的硬盘访问,接着将当前块索引表保存到硬盘适当位置并根据已保存的时间点块索引表中块地址状态更新块计数表,再为下面的时间点创建新的块索引表,最后中间驱动开启磁盘访问,用户可以继续工作了。
从图5显示的保存流程图可以看出,整个保存操作用户只需等待片刻而不需要重新启动计算机。
用户在需要恢复某个时间点时,用户请求恢复操作,然后控制程序会在硬盘某个位置写一个恢复请求标志,接着重新启动计算机,在计算机引导操作系统以前会进入快速恢复程序,用户选择要的恢复时间点,从硬盘适当位置找出要恢复时间点的块索引表,用这个时间点的块索引表覆盖当前块索引表,根据此时块计数表中块的引用情况更新当前块索引表中块地址状态,恢复完成后再引导新的操作系统。
图7是本发明快速恢复程序实施例,展示了如何根据用户请求调用恢复程序。图7中给出了引导操作系统以前,计算机在各个阶段要执行的程序:bios初始化->MBR中的程序->恢复查询程序->bootSector程序->bootblock程序->OS loader程序。其中bootSector程序、bootblock程序和OS loader程序都是系统硬盘的引导程序。可以看出本实施例通过在MBR和bootSector之间加入了一个恢复查询程序来检查控制程序是否在硬盘上写过恢复请求标志,如果有则表示用户要恢复操作,于是就调用快速恢复程序。在恢复结束后在返回到bootSector程序引导新恢复的操作系统。加入恢复查询程序的方法就是修改MBR程序将后续运行的程序由bootSector换成恢复查询程序,再由恢复查询程序启动bootSector。