在DOS时代,我们删除文件用DEL和DELTREE,但删除的文件仍可恢复,到了WINDOWS时代,它有一个回收站,专门用来存放临时删除的文件,如果误删除还可以恢复,而且我们发现删除文件比建立文件要快得多,那么它是如何实现的呢?
  以下我从四个方面来分析它是如何实现的:
1. 文件的存储:文件之所以能被恢复,须从文件在硬盘上的数据结构和文件的储存原理谈起。新买回的硬盘需分区、格式化后才能安装系统使用。一般要将硬盘分成主引导扇区、操作系统引导扇区、文件分配表(FAT)、目录区(DIR)和数据区(Data)五部分。 在文件删除与恢复中,起重要作用的是“文件分配表”的“目录区”,为安全起见,系统通常会存放两份相同的FAT;而目录区中的信息则定位了文件数据在磁盘中的具体保存位置——它记录了文件的起始单元(这是最重要的)、文件属性、文件大小等。 在定位文件时,操作系统会根据目录区中记录的起始单元,并结合文件分配表区知晓文件在磁盘中的具体位置和大小。 实际上,硬盘文件的数据区尽管占了绝大部分空间,但如果没有前面各部分,它实际上没有任何意义。
在WINDOWS中,文件在硬盘上的保存是以簇为单位存储的。一般说来,一个文件在硬盘上的存储并不是连续存放的(特别是硬盘进行比较频繁的读写文件后),所以为了防止同一文件存储区块的杂乱无章,文件系统会在该文件存放的最开始的一个簇(俗称文件头)的簇尾指明存放该文件的下一个簇的位置,该文件存放的最后一个簇(俗称文件尾)则记录了文件的结束标记。这样当我们要对该文件进行读取操作时,这个文件就会像一串链子一样被一个一个依次串了起来,我们才能读到这些分别存储于不同簇的整个文件。存储在硬盘中的每个文件都可分为两部分:文件头和存储数据的数据区。文件头用来记录文件名、文件属性、占用簇号等信息,文件头保存在一个簇并映射在FAT表(文件分配表)中。而真实的数据则是保存在数据区当中的。
   2.文件的删除:很多人会想当然地以为,我们删除文件时,系统会把我们删除文件的内容全部清除,即把的磁盘上的全部改写回“0”。其实这种想法是错误的,试想一下,如果我们删除一个较大(如几百MB)的文件将要花费多长时间,这样的系统工作效率将会是多么的低下。比如当我们往C盘拷一个400M的文件,大约要1分钟(视系统而言),但在删除时(放到回收站),一闪而过,几秒种了,理论上讲建交和删除应该需要相同的时间,事实上,当我们删除文件时,其实是修改文件头的前2个代码,对后面的数据区未做任何处理,同时将文件所占簇号在文件分配表中的记录清零,以释放该文件所占空间。因此,文件被删除后硬盘剩余空间就增加了;而文件的真实内容仍保存在数据区,它须等写入新数据时才被新内容覆盖,在覆盖之前原数据是不会消失的。但如果是粉碎文件(用专门软件彻底删除)时,会发现需要的时间跟开始拷贝的时间差不多了,因为它还要将数据区中的数据逐步清零了。这种修改映射在FAT表中,就为文件作了删除标记,并将文件所占簇号在FAT表中的登记项清零,表示释放空间,这也就是平常删除文件后,硬盘空间增大的原因。而真正的文件内容仍保存在数据区中,并未得以删除。要等到以后的数据写入,把此数据区覆盖掉,这样才算是彻底把原来的数据删除。如果不被后来保存的数据覆盖,它就不会从磁盘上抹掉。用Fdisk分区和Format格式化和文件的删除类似,前者只是改变了分区表,后者只是修改了FAT表,都没有将数据从数据区直接删除。
    
  如上图所示: 如果删除了文件files2(普通删除,放在回收站中),在文件头区中的files2所占的簇中的头两个字节设置一个删除标记(在DOS中是E5标记),真正存放数据的簇1-簇5未做任何修改,这也是我们看到文件放到回收站时为什么那快的原因。那么系统在读取文件头的信息时,发现files2中的删除标记,则不会显示它,在计算剩余空间时,也会把它所占的空间计算在内,但有新文件存入时,会写入它所占的簇空间(1-5),逐步覆盖原来的数据。
3、文件的恢复:从上面已经很清楚文件能被恢复了,只要通过相应的软件将删除标记去掉就可以了,
4.如何彻底删除文件:
    由文件删除的原理可知,要彻底删除数据,只有把删除文件所在的数据区完全覆盖掉。绝大部分彻底删除工具所使用的就是这个道理:把无用的数据反复写入删除文件的数据区,并进行多次地覆盖,从而达到完全删除文件的目的。
    A、要真正删除文件需要用到一些专门的软件,如瑞星带的文件粉碎机等。
    B、在其它位置建立一个跟要删除的文件同名的文件,内容肯定不一样了,但要比被删除的文件大了,然后把它拷贝到要删除文件所在位置,这时系统会提示是否覆盖,选择是,就搞定了。

文章如转载,请注明转载自:http://www.5iadmin.com/post/419.html