挽救磁盘上被小文件覆盖了的大文件

Author: 童明贵 Date: 1994-04-08

        挽救磁盘上被小文件覆盖了的大文件
        ●童明贵
        进行文件拷贝或存盘时,出于种种原因一个文件覆盖了别的一个文件。被覆盖的文件让它轻易的丢失实在可惜,为此假设第一个文件名为FILEOLD,第二个文件名为:FILENEW。FILEOLD被FILENEW覆盖后的文件名为:FILEXXX。要从FILEXXX文件恢复文件FILEOLD,请按下列步骤操作:
        一、改FILEXXX长度。
        进入PCTOOLS。按〈F3〉进入磁盘服务状态。按“E”,选磁盘编辑功能,输入驱动器代表字母确认FILEXXX所在磁盘,按〈F2〉,屏上出现功能菜单后,按“R”,屏上右边出现磁盘文件目录,左边出现机器码,按〈F3〉进入修改状态,光标出现在第一个机器码处,将光标移到文件名FILEXXX下一行的倒数第三、四字节处将其改成:FFFF(假设FILEOLD长度不超过64K)。按〈F5〉、“U”写盘,按任一键、〈ESC〉后回到磁盘服务状态。
        二、改FILEXX中FILENEW的结束标志。
        按〈F3〉进入文件服务状态。光标移到文件FILEXX上,按“E”选文件编辑修改功能,这时可以看到FILENEW的内容,查找文件FILENEW尾部的结束标志〈EOF〉。
        ■如果找到结束标志。将光标移到文件结尾标志的机器码“1A”处,将“1A”改成“20”,按〈F5〉存盘。
        ■如果未找到结束标志。按〈ESC〉退出修改状态。
        三、删除文件FILEXXX。
        四、恢复文件FILEXXX。
        五、用字处理软件将文件FILEXXX修改还原成FILEOLD文件。
        用字处理软件将FILEXXX读入(如FILEOLD是由WPS编辑出的文件,用WPS读入FILEXXX时,屏上会出现“文件包含有非法字符,删除它(Y/N)?”,请回答“Y”)。这时我们可以看到文件前部是FILENEW的内容,后部是FILEOLD的内容。把FILEOLD前面被FILENEW覆盖部分重新输入。然后逐页翻阅文件,找到FILEOLD的结尾后,如果以后还有其它内容,则指定文件结束位置或将其后多余的部分删去,以FILEOLD为文件名重新存盘。至此,FILEOLD文件就全部恢复了。
        注意:
        ■如果FILEOLD的长度在1_4K内(视磁盘FAT表中的每簇扇区容量而定)可省去三、四两个步骤。
        ■FILEOLD及FILENEW必须是文本文件。
        ■FILEOLD被覆盖后,最好立即作恢复工作,如再向该磁盘写入其它文件,则恢复文件成功的可能变小。
        ■文件FILEOLD必须比FILENEW大,而且在FILENEW、FILEOLD两文件长之差不是很大时,本法意义不大。
        
        恢复磁盘上被覆盖了的文件__续《挽救磁盘上被小文件覆盖了的大文件》
        ●童明贵
        《挽救》一文中提到的文件覆盖现象仅是文件覆盖现象的一个类别而已,现在我们来看另一个类别的覆盖。比如:在DOS下使用“COPY FILENEW FILEOLD”后,FILEOLD会被FILENEW覆盖;WPS、WORDSTAR、FOXPRO2. 0等软件在文件编辑中途存盘时,如果存盘文件名与磁盘上原有文件同名,同样也会产生覆盖。若有人还依旧用笔者《挽救》一文的作法去解决这个问题的话,就会发现行不通了。
        属于这种覆盖类型的覆盖还发生在作下列操作的时候:删除磁盘上的一些文件后,又重新拷贝上一些文件。
        这里设磁盘上原有的文件名为:FILEOLD,FILEOLD被FILENEW覆盖后的文件名为:FILENEW。现要恢复原文件请按下列步骤操作:
        ■若要保存FILENEW,请先将它拷贝到别的盘上。否则,直接删除文件FILENEW。
        ■查找FILEOLD的起始簇号。
        ■修改FILENEW的起始簇号及长度。
        ■恢复文件FILENEW。
        ■用相应软件将文件FILENEW的多余部分去掉。
        ■将文件名“FILENEW”改成“FILEOLD”。
        注意:
        FILEOLD被覆盖后,最好立即作恢复工作(如再向该磁盘写入其它文件,特别是重启动机器后,又向磁盘写入了其它文件,则恢复成功的可能性将大大变小)。下面是以上操作的原理及解释。
        我们仍旧用PCTOOLS或DEBUG来观察磁盘上关键部分的变化。在开机后的连续工作中(指中途不换磁盘、不重新启动机器),可以从文件扇区分配表FAT的使用上发现,在磁盘空间够用的条件下,新写入的文件并不占用开机以来删除文件所释放出来的前面的磁盘扇区,而是接着使用后面的扇区,这就使原来的文件实际上得到了完好的保存。同时还可以从文件扇区分配表FAT的使用上发现,如果发生的是属于本文所指类型的覆盖,则新写入FILENEW文件所使用的磁盘扇区一般并不占用FILEOLD所用过的扇区。这就是能使被覆盖文件得到完全恢复的根本原因。
        从目录扇区里可以看到:新文件FILENEW目录项占据了原文件FILEOLD目录项。所以,先删除文件FILENEW,既可以归还FILEOLD的目录项,又可以释放FILENEW所占用的磁盘空间。
        由于文件FILEOLD的内容还在盘上,以文件FILEOLD前面某些信息为线索查找起始簇号自然可行。查找工作用PCTOOLS磁盘服务功能“FIND”来完成。
        由于新文件FILENEW目录项在占据原文件FILEOLD目录项时,将原文件长度、起始簇号都作了改写。因此要还原FILEOLD就必须将FILENEW的簇号改成原来FILEOLD的大小。在不知道原文件长度时,应把长度改得稍大,以利原文件的完全回收。
        在文件的FAT表里可以看到,当FILENEW覆盖FILEOLD之后,FILEOLD的簇号链消失了,所以本文采用了先删除FILENEW,后来又恢复FILENEW的作法使FILEOLD原来的簇号链通过PCTOOLS的UNDELETE得到完全恢复。