您的位置:首页 > 其它

数据恢复软件设计与实现(三)

2013-11-09 21:07 155 查看
3  主引导记录MBR及分区表

在一个硬盘使用之前,出于管理的原因,首先要对硬盘进行分区,也就是分为几个部分,类似于建房子需要划分为不同的房间。其中每个部分为独立的分区,有信息记录分区的起始、结束、大小等信息。分区和后面的文件系统是完全独立的,没有必然的联系。

硬盘有很多划分分区的方法,Windows系统主要有MBR磁盘分区、动态磁盘卷、GPT磁盘分区。这三种方法各有优势,主流的应用是MBR磁盘分区。

3.1 主引导记录MBR的结构

MBR磁盘分区是使用最广泛的一种分区结构,Windows、Linux、UNIX系统都支持MBR分区方式。

MBR(Mater Boot Record)称为主引导记录。MBR对于一个磁盘是最关键的,一般位于磁盘的最开始位置,即C/H/S地址的0柱面0磁头1扇区,LBA地址的0扇区,占一个扇区(512字节)大小。主要由四部分组成:引导程序、磁盘签名、分区表、结束标志,如图3-1所示。



引导程序:占用前面440个字节,偏移地址为 0 ~ 1B7H。引导程序对于计算机的启动非常重要的。BIOS通过自检后读取硬盘0扇区的MBR,然后把控制权交给MBR的引导程序,接下来引导程序判断MBR最后是不是以55AA结束,如果不是则出错。继续查找分区表中的活动分区,再把控制权交给分区中的引导记录。如果主引导记录出问题,则计算机不能正常启动。引导程序由操作系统写入,而且一般都是固定的。

磁盘签名:占4个字节,偏移地址1B8H ~ 1BBH,是Windows系统对硬盘初始化时写入的一个签名。同一台计算机的多个磁盘签名不能相同,否则会认为磁盘没有初始化。如果磁盘签名丢失,系统也会认为该硬盘没有初始化。

分区表(Disk Partition Table):64字节,偏移地址 1BEH ~ 1FDH,这是非常重要的一个结构。分区表存放的四个分区表项,每个表项占16字节,分区表项是对分区的描述。

结束标志:最后的两个字节,固定是55AA,如果没有这个结束标志MBR是无效的。

3.2 磁盘主分区结构

硬盘在使用之前都要在逻辑上划分为一个个分区。每个分区有起始地址,结束地址,大小。MBR磁盘的分区形式有三种:主分区、扩展分区、非DOS分区。由于MBR中的分区表只有64字节,所以只能分4个主分区,如果需要更多的,就要靠扩展分区延伸。扩展分区在MBR的记录是一个主分区记录,所以一般硬盘有三个主分区和一个扩展分区。使用Winhex打开一个硬盘的记录如图3-2所示。



分区表从1BEH偏移开始,每个分区表项16字节,共有四个分区表项。每个字节都有具体的意义,具体意义如表 3-1所示。

表 3-1 分区表项的含义
相对偏移地址

字段长度

含义
0x00

1字节

引导标志(Boot Indicator),是否为活动分区
0x01

1字节

起始磁头(Start Head)
0x02

6位

起始扇区(Start Sector),只用了6位
0x03

10位

起始柱面(Start Cylinder)
0x04

1字节

分区类型(Partition Type Indicator),如果FAT32或NTFS
0x05

1字节

结束磁头(End Head)

0x06

6位

结束扇区(End Sector),只用了6位

0x07

10位

结束柱面(End Cylinder)

0x08~0x0B

4字节

本分区之前使用的扇区数(Sectors Preceding Partition)

0x0C~0x0F

4字节

本分区的总扇区数(Sectors in Partition)

根据表3-1可以解析出来图3-2中的分区表项。第一个分区表项含义:80H活动分区,起始磁头32,起始扇区33,起始柱面0,分区类型NTFS,结束磁头223,结束扇区19,结束柱面12,分区前扇区数2048,本分区扇区总数204800。其实在这种情况下,起始/结束磁头、起始/结束扇区、起始/结束柱面显得毫无意义,系统只要根据本分区之前的扇区数就可以定位到唯一的扇区,即这个分区的绝对起始扇区,根据扇区总数可以得到大小。

3.3 扩展分区结构

扩展分区是在MBR分区表项不够用的情况下产生的。扩展分区不是实际意义上的分区,它是一个指向下一个用来定义分区参数的指针,这种指针结构形成一个单向链表。这样MBR分区表项中除了主磁盘分区外,仅需要存储一个被称为扩展分区的分区信息,通过这个扩展分区的信息就可以找到下一个分区的起始位置,从而可以找到所有的分区。

扩展分区中的每个逻辑驱动器的分区信息都存在一个类似于MBR的扩展引导记录(EBR,Extended Boot Record)中,如图3-3。EBR只有分区表项和结束标志,没有引导记录和磁盘签名,所以前面的数据是什么并不关心。而EBR的分区表项中只使用了两项,另外两项全部为0,这两项中第一项用来描述本逻辑分区,第二项描述下一个EBR,这样就可以形成一条单向链表。EBR的含义和MBR分区表项一样。



一个硬盘的分区结构示例,如图 3-4所示。



3.4 MBR和分区表的修复

3.4.1 MBR修复

如果计算机使用不当,误分区,误Ghost,或者突然间断电,都很容易造成MBR丢失损坏,导致计算机无法启动。防止此类事情发生,在计算机正常的时候备份好MBR,以防不测。如果没有备份,也可以从其他正常的计算机拷贝一份MBR过来,但是不要分区表部分,因为不同计算机分区表千差万别,只要MBR的引导程序、结束标志相同的,分区表单独修复。

修复MBR的思路很简单,就是预先定义好一个引导程序,然后把引导程序和结束标志写进去,写进去的时候不要修改分区表部分,磁盘签名可以使用全0。备份MBR就读取磁盘0扇区的内容,把引导程序和磁盘签名部分写入一个文件保存好。恢复MBR就是把这个保存的文件写入磁盘0扇区。MBR处理部分比较简单,就不贴代码了。

3.4.2 分区表修复

由于分区表是非常复杂的,千差万别,分区表项的个数、位置和大小都是不定的,交叉分区更复杂,编程实现恢复非常困难,要真正恢复还是靠人工分析。

简单的分区表丢失情况就是MBR中的分区表部分损坏,而其他的扩展分区正常。这时只要按照分区表的规律可以找到分区并修复。Windows系统在分区的时候,第一个分区总是在磁盘的一定偏移位置,Windows XP系统分区后,第一个分区在磁盘的绝对偏移地址 63扇区,Windows 7系统则在 2048扇区(本文是基于Windows 7系统研究的,所以以Windows 7系统分析)。直接读取偏移2048扇区的内容并且判断是不是一个有效的分区,判断的依据是:文件系统的DBR是一个固定的格式,有一些标志,如刚开始的跳转指令和DBR的结束标志55AA,如果满足这两项就认为是一个有效的分区,可以加入MBR分区表。然而在这个2048分区DBR中也保留着这个分区的描述,根据这些信息可以确定下一个分区的位置。这样不断递归遍历就可以找到完整的分区表项。

恩,未完,请往下看
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据恢复