数据恢复与硬盘数据结构

说到 数据恢复,我们就不能不提到硬盘的数据结构、文件的存储原理,甚至操作 系统的启动流程,这些是你在恢复硬盘数据时不得不利用的基本知识。即使你不需要恢复数据,理解了这些知识(即使只是稍微多知道一些),对于你平时的 电脑操作和应用也是很有帮助的。

  我们就从硬盘的数据结构谈起吧……

  硬盘数据结构

  初买来一块硬盘,我们是没有办法使用的,你需要将它 分区、格式化,然后再 安装上操作 系统才可以使用。就拿我们一直沿用到现在的 Win9x/Me系列来说,我们一般要将硬盘分成 主引导扇区操作系统引导扇区、FAT、DIR和Data等五部分(其中只有主引导扇区是唯一的,其它的随你的分区数的增加而增加)。

  1. 主引导扇区

   主引导扇区位于整个硬盘的0磁道0柱面1扇区,包括硬盘主引导记录MBR(Main Boot Record)和 分区表DPT(Disk Partition Table)。其中主引导记录的作用就是检查分区表是否正确以及确定哪个分区为引导分区,并在程序结束时把该分区的启动程序(也就是操作 系统引导扇区)调入内存加以执行。至于分区表,很多人都知道,以80H或00H为开始标志,以55AAH为结束标志,共64字节,位于本扇区的最末端。值得一提的是,MBR是由分区程序(例如DOS 的Fdisk.exe)产生的,不同的操作系统可能这个扇区是不尽相同。如果你有这个意向也可以自己去编写一个,只要它能完成前述的任务即可,这也是为什么能实现多系统启动的原因(说句题外话:正因为这个主引导记录容易编写,所以才出现了很多的引导区 病毒)。

  2.操作 系统引导扇区

OBR(OS Boot Record)即操作 系统引导扇区,通常位于硬盘的0磁道1柱面1扇区(这是对于DOS来说的,对于那些以多重引导方式启动的系统则位于相应的主 分区/ 扩展分区的第一个扇区),是操作系统可直接访问的第一个扇区,它也包括一个引导程序和一个被称为BPB( BIOS Parameter Block)的本分区参数记录表。其实每个逻辑分区都有一个OBR,其参数视分区的大小、操作系统的类别而有所不同。引导程序的主要任务是判断本分区根目录前两个文件是否为操作系统的引导文件(例如MSDOS或者起源于MSDOS的 Win9x/Me的IO.SYS和MSDOS.SYS)。如是,就把第一个文件读入内存,并把控制权交予该文件。BPB参数块记录着本分区的起始扇区、结束扇区、文件存储格式、硬盘介质描述符、根目录大小、FAT个数、分配单元(Allocation Unit,以前也称之为簇)的大小等重要参数。OBR由高级格式化程序产生(例如DOS 的Format.com)。

  3. 文件分配表

  FAT(File Allocation Table)即 文件分配表,是DOS/ Win9x 系统的文件寻址系统,为了数据 安全起见,FAT一般做两个,第二FAT为第一FAT的 备份, FAT区紧接在OBR之后,其大小由本 分区的大小及文件分配单元的大小决定。关于FAT的格式历来有很多选择,Microsoft 的DOS及 Windows采用我们所熟悉的FAT12、FAT16和FAT32格式,但除此以外并非没有其它格式的FAT,像Windows NT、OS/2、UNIX/Linux、Novell等都有自己的文件管理方式。

  4. 目录区

  DIR是Directory即根 目录区的简写,DIR紧接在第二FAT表之后,只有FAT还不能定位文件在磁盘中的位置,FAT还必须和DIR配合才能准确定位文件的位置。DIR记录着每个文件(目录)的起始单元(这是最重要的)、文件的属性等。定位文件位置时,操作 系统根据DIR中的起始单元,结合FAT表就可以知道文件在磁盘的具体位置及大小了。在DIR区之后,才是真正意义上的数据存储区,即DATA区。

  5.数据区

  DATA虽然占据了硬盘的绝大部分空间,但没有了前面的各部分,它对于我们来说,也只能是一些枯燥的二进制代码,没有任何意义。在这里有一点要说明的是,我们通常所说的格式化程序(指高级格式化,例如DOS下的Format程序),并没有把DATA区的数据 清除,只是重写了FAT表而已,至于 分区硬盘,也只是修改了MBR和OBR,绝大部分的DATA区的数据并没有被改变,这也是许多硬盘数据能够得以修复的原因。但即便如此,如MBR/OBR/FAT/DIR之一被破坏的话,也足够咱们那些所谓的DIY老鸟们忙乎半天了……需要提醒大家的是,如果你经常整理磁盘,那么你的数据区的数据可能是连续的,这样即使MBR/FAT/DIR全部坏了,我们也可以使用磁盘编辑软件(比如DOS下的DiskEdit),只要找到一个文件的起始保存位置,那么这个文件就有可能被恢复(当然了,这需要一个前提,那就是你没有覆盖这个文件……)。

  硬盘 分区方式

  我们平时说到的 分区概念,不外乎三种:主分区、 扩展分区和逻辑分区。

  主 分区是一个比较单纯的分区,通常位于硬盘的最前面一块区域中,构成逻辑C磁盘。在主分区中,不允许再建立其它逻辑磁盘。

  扩展 分区的概念则比较复杂,也是造成分区和逻辑磁盘混淆的主要原因。由于硬盘仅仅为分区表保留了64个字节的存储空间,而每个分区的参数占据16个字节,故 主引导扇区中总计可以存储4个分区的数据。操作 系统只允许存储4个分区的数据,如果说逻辑磁盘就是分区,则系统最多只允许4个逻辑磁盘。对于具体的应用,4个逻辑磁盘往往不能满足实际需求。为了建立更多的逻辑磁盘供操作系统使用,系统引入了 扩展分区的概念。

  所谓扩展 分区,严格地讲它不是一个实际意义的分区,它仅仅是一个指向下一个分区的指针,这种指针结构将形成一个单向链表。这样在 主引导扇区中除了主分区外,仅需要存储一个被称为 扩展分区的分区数据,通过这个扩展分区的数据可以找到下一个分区(实际上也就是下一个逻辑磁盘)的起始位置,以此起始位置类推可以找到所有的分区。无论 系统中建立多少个逻辑磁盘,在主引导扇区中通过一个扩展分区的参数就可以逐个找到每一个逻辑磁盘。

  需要特别注意的是,由于主 分区之后的各个分区是通过一种单向链表的结构来实现链接的,因此,若单向链表发生问题,将导致逻辑磁盘的丢失。

  数据存储原理

  既然要进行数据的恢复,当然数据的存储原理我们不能不提,在这之中,我们还要介绍一下数据的删除和硬盘的格式化相关问题……

  文件的读取

  操作 系统目录区中读取文件信息(包括文件名、后缀名、文件大小、修改日期和文件在数据区保存的第一个簇的簇号),我们这里假设第一个簇号是0023。
  操作 系统从0023簇读取相应的数据,然后再找到FAT的0023单元,如果内容是文件结束标志(FF),则表示文件结束,否则内容保存数据的下一个簇的簇号,这样重复下去直到遇到文件结束标志。

  文件的写入

  当我们要保存文件时,操作 系统首先在DIR区中找到空区写入文件名、大小和创建时间等相应信息,然后在Data区找到闲置空间将文件保存,并将Data区的第一个簇写入DIR区,其余的动作和上边的读取动作差不多。

  文件的删除

  看了前面的文件的读取和写入,你可能没有往下边继续看的信心了,不过放心, Win9x的文件删除工作却是很简单的,简单到只在 目录区做了一点小改动——将目录区的文件的第一个字符改成了E5就表示将改文件删除了。
  Fdisk和Format的一点小说明
  和文件的删除类似,利用Fdisk删除再建立 分区和利用Format格式化逻辑磁盘(假设你格式化的时候并没有使用/U这个无条件格式化参数)都没有将数据从DATA区直接删除,前者只是改变了分区表,后者只是修改了FAT表,因此被 误删除的分区和 误格式化的硬盘完全有可能恢复……


硬盘引导的条件:
1.硬盘物理性正确:用DISKEDIT能看到物理硬盘或用 CMOS SETUP时能识别硬盘参数或用IDE软件能测出硬盘参数。

2.主引导区(0 CYLINDER 0 SIDE 1 SECTOR)正确:结束部分要有55 AA, 分区表内要有一个80标记,代表可激活,主引导区代码正确,有80标记对应的分区结束部分有55 AA。
分区表位置信息举例:(从1BE开始)
80 00 02 00 01 03 51 30 01 00 00 00 03 51 00 00
① ② ③ ④ ⑤ ⑥
它们各自的含义如下:
①可自举 分区
分区起始地址为0头0柱面2扇区;
③DOS 分区,04或06代表DOS分区,05代表 扩展分区,65代表NOVELL分区;
分区终止地址为3头304柱面17扇区;
⑤区相对扇区号为1;
分区实用扇区数为20739个。

3.引导区正确:
BPB表代码要正确:
EB 3C 90 4d 53 44 4f 53 35 2e 30 00 02 04 01 00 02 00 02
a b c d e f g

00 00 F8 50 00 27 00 08 00 27 00 00 00
h i j k l m n
a 代表JMP
b 版本号
c 每个扇区的字节数
d 每个簇的扇区数
e 保留扇区数
f FAT的个数
g 根目录项的个数
h 扇区的总数
i 介质说明符
j 每个FAT所占的扇区数
K 每个磁道的扇区数
l 磁头个数
m 隐藏扇区的个数
n 存放计算的驱动器号和磁头号

结束部分为55 AA,并且最后部分的英文字母(屏幕的右侧)为IO SYSMSDOS SYS。

4.根目录上前两条必须是引导文件IO.SYS、MSDOS.SYS,且必须存放在连续的扇区。

5.引导文件IO.SYS、MSDOS.SYS和COMMAND.COM文件要正确。

修复硬盘:

1.准备好工具盘TOOLS、杀 病毒盘VRVNT和引导盘。

2.检查 CMOS配置是否正确。

3.用DISKEDIT 备份 系统数据。备份 分区表、BOOT区和FAT1、FAT2。
注意: 备份至软盘,不要在硬盘上备份或做其它COPY动作。

4.用DISKEDIT分析硬盘。根据硬盘引导的条件,判断硬盘 故障的原因,采用不同的修复方法。

5.若不满足硬盘引导第五条件,用干净、正确的 系统文件COPY或REPLACE。

6.若不满足硬盘引导第四条件,用DISKEDIT将根目录上的CHAIN LINK前约20个簇填为0,然且用SYS c: 命令TRANSFER 系统

7.若不满足硬盘引导第三条件,用VRVNT盘,将配置项中的校验开关改为覆盖方式,然后用修复引导区进行修复(即使在C盘不出现的情况下也可进行)。

8.若不满足硬盘引导第二条件,首先要了解该硬盘的 分区情况。

A. 若只有一个C盘,用 系统盘引导,运行TOOLS盘中的NOFDISK,该软件必须驻留在内存中,可用MI/A查看,然后运行FDISK,先将原有 分区删除,然后重新进行分区,即可修复分区表。

B.若有多个逻辑硬盘
如果能知道各个逻辑硬盘的确切大小,则用以上方法即可恢复,即用FDISK将原有的各逻辑硬盘重新进行 分区(必须驻留NOFDISK)。

如果不知道各个逻辑硬盘的情况,用DISKEDIT中的FIND菜单寻找学符串00 00 00 55 AA,并判断是否为EXTEND 分区的分区信息,如果找到,即可知道EXTEND分区的起始位置,并可推算DOS主分区的起始和结束位置,并推算相关的参数,由于备逻辑盘是连续的,由EXTEND分区信息,可找到各逻辑硬盘的分区信息,并推算出EXTEND分区的结束位置及相关参数,将推算出的相关信息写入主分区表中,即可恢复分区表。

注意:EXTEND 分区为05,DOS分区为04或06。

用DISKEDIT中的OBJECT菜单选择PHYSICAL SECTOR,键入0,0,1,即可进入主引导区。用V IEW菜单中的AS PARTITION TABLE项可看 分区结构。一般情况下主引导区BIGDOS的起始位置SIDE=1 SECTOR=1 ,EXTEND分区的起始位置SIDE=0 SECTOR=1,而ENDING LOCATION处SIDE和SECTOR必然是最大值。可直接在该分区表中修改数据。光标移至任意处回车,可显示该数据处的分区结构,并可通过F2和F6切换。后一个分区的STARTING LOCATION必然是前一个分区ENDING LOCATION的下一个扇区。NUMBER OF SECTORS可通过分区的ENDING LOCATION和STARTING LOCATION计算出,例如,STARTING LOCATION的SIDE=1,CYLINDER=0,SECTOR=1,ENDING LOCATION的SIDE=7,CYLINDER=262,SECTOR=39则通过以下式子计算:

主引导区的RELATIVE SECTORS 是SECTOR的最大值。
EXTEND 分区的RELATIVE SECTORS=主引导区的RELATIVE SECTORS+主引导区的NUMBER OF SECTORS。
EXTEND 分区的NUMBER OF SECTORS=本分区的ENDING LOCATION (换算为SECTORS)-本分区的RELATIVE SECTORS。

下面是某116M硬盘(参数为CYLINDER=760 HEAD=8 SECTOR=39)共分有:
C盘(DOS引导盘)大小为40M
DOS扩充盘 大小为76M
DOS扩充盘上的逻辑驱动器为:
D: 32M E: 3M F: 4M G:6M H:7M I:7M J:17M


Starting Location Ending Location Relative Number of
System Boot Side Cylinder Sector Side Cylinder Sertor Sertors Sertors
BIGDOS Yes 1 0 1 7 262 39 39 82017
h1 c1 s1 h2 c2 s2 r1 n1
EXTEND No 0 263 1 7 760 39 82056 155376
h3 c3 s3 h4 c4 s4 r2 n2
unused No 0 0 0 0 0 0 0 0

unused No 0 0 0 0 0 0 0 0


即:r1=s2
n1=(h2+1)*(c2+1)*s2-s2
r2=r1+n1
n2=(h4+1)*(c4+1)*s4-r2

光标停留在EXTEND行,按回车键出现下列DOS扩展 分区逻辑分区表:

Starting Location Ending Location Relative Number of
System Boot Side Cylinder Sector Side Cylinder Sertor Sertors Sertors
DOS-16 No 1 263 1 7 472 39 39 65481
h5 c5 s5 h6 c6 s6 r3 n3
EXTEND No 0 473 1 7 492 39 65520 6240
h7 c7 s7 h8 c8 s8 r4 n4
unused No 0 0 0 0 0 0 0 0

unused No 0 0 0 0 0 0 0 0


公式:r3=s6
n3=(h6+1)*(c6+1)*s6-r3-r2
r4=r3+n3
n4=(h8+1)*(c8+1)*s8-r4-r2

光标停留在EXTEND行,按回车键出现下列DOS扩展 分区逻辑分区表:

Starting Location Ending Location Relative Number of
System Boot Side Cylinder Sector Side Cylinder Sertor Sertors Sertors
DOS-12 No 1 473 1 7 492 39 39 6201
h9 c9 s9 h10 c10 s10 r5 n5
EXTEND No 0 493 1 7 519 39 71760 8424
h11 c11 s11 h12 c12 s12 r6 n6
unused No 0 0 0 0 0 0 0 0

unused No 0 0 0 0 0 0 0 0


公式:r5=s10
n5=(h10+1)*(c10+1)*s10-r5-r2-r4
r6=r4+r5+n5
n6=(h12+1)*(c12+1)*s12-r2-r6

光标停留在EXTEND行,按回车键出现下列DOS扩展 分区逻辑分区表:

Starting Location Ending Location Relative Number of
System Boot Side Cylinder Sector Side Cylinder Sertor Sertors Sertors
DOS-12 No 1 493 1 7 519 39 39 8385
h13 c13 s13 h14 c14 s14 r7 n7
EXTEND No 0 520 1 7 559 39 80184 12480
h15 c15 s15 h16 c16 s16 r8 n8
unused No 0 0 0 0 0 0 0 0

unused No 0 0 0 0 0 0 0 0


公式:r7=s14
n7=(h14+1)*(c14+1)*s14-r7-r2-r4-n4
r8=r5+r6+n6-r7
n8=(h16+1)*(c16+1)*s16-r2-r8

光标停留在EXTEND行,按回车键出现下列DOS扩展 分区逻辑分区表:

Starting Location Ending Location Relative Number of
System Boot Side Cylinder Sector Side Cylinder Sertor Sertors Sertors
DOS-12 No 1 520 1 7 559 39 39 12441
EXTEND No 0 560 1 7 605 39 92664 14352
unused No 0 0 0 0 0 0 0 0
unused No 0 0 0 0 0 0 0 0

光标停留在EXTEND行,按回车键出现下列DOS扩展 分区逻辑分区表:

Starting Location Ending Location Relative Number of
System Boot Side Cylinder Sector Side Cylinder Sertor Sertors Sertors
DOS-12 No 1 560 1 7 605 39 39 14313
EXTEND No 0 606 1 7 651 39 107016 14352
unused No 0 0 0 0 0 0 0 0
unused No 0 0 0 0 0 0 0 0

光标停留在EXTEND行,按回车键出现下列DOS扩展 分区逻辑分区表:

Starting Location Ending Location Relative Number of
System Boot Side Cylinder Sector Side Cylinder Sertor Sertors Sertors
DOS-12 No 1 606 1 7 651 39 39 14313
EXTEND No 0 652 1 7 760 39 121368 34008
unused No 0 0 0 0 0 0 0 0
unused No 0 0 0 0 0 0 0 0

光标停留在EXTEND行,按回车键出现下列DOS扩展 分区逻辑分区表:

Starting Location Ending Location Relative Number of
System Boot Side Cylinder Sector Side Cylinder Sertor Sertors Sertors
DOS-16 No 1 652 1 7 760 39 39 33969
unused No 0 0 0 0 0 0 0 0
unused No 0 0 0 0 0 0 0 0
unused No 0 0 0 0 0 0 0 0

C.若有NOVELL 分区,采用B方法,NOVELL分区为65。

9.若不满足硬盘引导的多个条件,则按 分区表,BOOT区等顺序修复。

10.在修复前或修复后均用VRVNT查找 病毒,发现后消除病毒。

你可能感兴趣的:(数据结构)