Login dark
author: 零贰
title: 虚拟还原的工作原理探讨
date: 2008-11-02 06:43:57
category: [编程代码]
tags: [代码,电脑,硬盘,程序,编程,虚拟还原]

<p>虚拟还原的工作原理探讨 一</p><p>一、软件系统的保护与还原</p><p>  长期以来,学校机房、网吧等人员流动大,机器很多的场所,系统管理员的工作都非常烦琐,经常要重新安装系统、查杀病毒等。如何对硬盘中现有的操作系统和软件进行保护和还原就成了一个课题。
  系统的保护和还原的方法从原理上来说主要分三类,一是保护,二是还原,三称为虚拟还原。</p><!--more-->
<p>1.系统保护
  系统保护,就是防止硬盘的重要信息被破坏,防止注册表改写和文件I/O操作等。用户被置于一个预先设置好的环境中,只能干此软件系统允许你干的事情。相对而言,这种方法对用户的约束太多,局限很大,对操作系统进程的干预也比较多,运行效率有一定影响。基于这种思路的软件代表有:美萍、网管大师、方竹等等。另外,通过手工修改注册表隐藏一些系统功能也属于这种方法。
  系统保护,好比筑堤抗洪,“千里之堤,毁于蚁穴”,系统漏洞可谓防不胜防,事实上水平高点的用户都有办法饶过它的防护。另外,操作系统升级带来系统内部一些功能变化,这些软件也必须做相应修改,很被动。总的来说,这类软件从思路来说是一种被动防御的姿态,效果不会太理想。
  系统保护只是对一些操作进行了限制,硬盘上的数据是动态变化的,它不能根据需要恢复到某一个时点的系统内容。</p><p>2.系统还原
  系统还原,就是预先将系统内容做好全部或部分备份,当系统崩溃或者混乱需要重新安装的时候,将原来的备份进行恢复,将系统内容还原到备份那个时点的内容。这种方法不干预用户的操作,不干扰系统进程。基于还原最简单也最原始的方法是用一个同样大的硬盘一比一地将系统克隆或拷贝下来。更好一点的方法是将系统分区(一般是C盘)用GHOST或WINIMAGE等做个镜像,保存到另外的硬盘或分区上。
  系统还原比较于系统保护,虽然有诸多优点,但它的缺点也很明显:需要占用很大硬盘空间,需要大量的还原时间。这些缺点实际上阻碍了它在实际工作中的应用范围,除了家庭用户和一些重要部门对重要数据用这个方法以外,学校和网吧等极少采用这种“笨”办法。
  系统还原的特点是可以根据需要将系统还原到备份那个时点的内容。</p><p>3.虚拟还原
  虚拟还原的工作原理实际上是基于系统保护的,但它的保护做在系统的最底层,先于操作系统,类似于引导型病毒(A型病毒)。它对系统进程有一定干扰,但是这个干扰几乎可以不被察觉。它不干预用户的任何操作,对普通用户来说,可以当它是透明的——根本不存在。
  虚拟还原的工作方式又类似于系统还原,可以在需要的时候将系统进行“备份”,这个备份的速度非常快,最多十几秒就可以完成。它需要占用少量硬盘空间,占用率低于数据量的千分之一。同时它的还原速度也是惊人的,同样最多需要十几秒种。
  正由于虚拟还原同时具有系统保护和系统还原的优点,又尽可能避免了它们的一些重要缺点,所以基于虚拟还原方式的软件越来越受到用户青睐。这些软件的代表有:还原精灵,虚拟还原,硬盘还原卡(其实是做在硬件上的软件,主要为了防止盗版)等。
  虚拟还原的保护看上去相当神奇,如果按系统还原的工作原理来理解,从硬盘占用到还原速度绝对不可思议。它的保护原理在下一节里面再和大家一起分析</p><p>虚拟还原的工作原理探讨二</p><p>二、虚拟还原的工作原理探讨</p><p>  由于本人不认识这些虚拟还原的软件作者,没有机会跟他们请教,所以以下关于其工作原理的探讨都是基于雨人的猜想和臆测,你如果对原理不感兴趣,完全可以跳过这个部分。</p><p>1.文件存储分配原理
  我们知道,硬盘上最重要的数据区除了BOOT(引导区)外,是ROOT(根目录)和FAT(文件分配表),ROOT里面记录的是文件或子目录的属性、尺寸、日期以及它的起始簇(软盘里面是扇区)。FAT表里面记录的是每个簇的使用分配情况。
   正常情况下,当我们向硬盘里面添加一个新文件,OS(操作系统)首先在ROOT里面将文件属性等填进去,在FAT表里面按一定算法找到一个空簇,将它标记为被该文件占用后,在ROOT里面将这个簇做为起始簇记录进去,然后将文件内容写入这个簇。如果文件没有写完,系统再在FAT里找一个空簇,将其标记为占用,然后在前一个簇的最后做一个指针向这个新的簇,形成一个单链表,接着再在这个新的簇里面继续写内容。如此重复直到文件内容完全记录完毕。最后系统根据占用的总簇数计算出文件尺寸,取出当前时间写到ROOT里面。
  当我们删除一个文件的时候,系统实际上并不到每个簇去清除内容,而只是把ROOT里面文件名的首字符换成&符号,就是标记这个文件为删除,然后延着链表在FAT表中将该文件占用的所有簇释放(标记为空),这样新的文件写入的时候就可以使用这些被释放的簇。
  当我们改变一个文件的属性或名字的时候,系统实际只在ROOT里面做一点改动而已。
  子目录下的文件稍微复杂一些,它们的目录信息不是记录在ROOT里面,而是在子目录所指的第一个簇,实际是个SUBROOT。
  实际硬盘的存储还要复杂得多,比如它的FAT表还有个副表,用作容错处理。我们这里只是为了讨论虚拟还原的原理,就不做深入讨论,只是简单说明一下。</p><p>2.虚拟还原的保护原理
  根据雨人的臆测,虚拟还原的软件是这样工作的:
  它首先将ROOT、SUBROOT以及FAT表都做个备份。然后,软件将备份的数据以及它的工作参数(密码、自动还原时间等)一起保存在硬盘上。这些空间也同时保护起来。
  当用户删除文件、改名、改文件属性的时候,系统按正常情况处理,还原软件不做任何干涉。因为这些操作只针对ROOT和FAT表,并不去动数据区的任何数据。而这两个表软件已经备份过,需要的时候完全可以恢复。
  最复杂的是添加新文件的情况。为了保护原来的数据,还原软件不允许在已经保护的簇进行任何的覆盖操作,即使现在的FAT表里面标记是空的,还原软件通过对照备份的FAT表,只要这个簇在表里面,它就会要求OS(操作系统)去找一个新的簇。这样数据区的数据就不会被覆盖。
  其实这样说起来简单,但是OS不会知道系统里面已经装了个RECOVERY(虚拟还原软件),所以它还会按同样的算法把同一个簇找出来。这样的话会形成死循环,无法工作下去。
  换一种方法,如果RECOVERY在删除文件的时候也不释放FAT表,那么OS找新簇的时候自然避开了已经保护的簇,但是有新问题:我们在做SCANDISK的时候会报出很多丢失的簇。
  或者,RECOVERY根本就象个病毒一样,把一个虚假的ROOT显示给我们看,让我们以为文件已经删除了,其实硬盘上的ROOT它什么也不动。这很象以前一个叫DIR2病毒干的那样。
  其实我一直就觉得RECOVERY象个病毒一样在工作,至少安装以后,系统的ANTI VIRUS(反病毒功能)必须DISABLE,否则开机就报警,无法工作。</p><p>  当我