数据恢复软件设计与实现(三)
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 分区表项的含义
根据表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中也保留着这个分区的描述,根据这些信息可以确定下一个分区的位置。这样不断递归遍历就可以找到完整的分区表项。
恩,未完,请往下看
在一个硬盘使用之前,出于管理的原因,首先要对硬盘进行分区,也就是分为几个部分,类似于建房子需要划分为不同的房间。其中每个部分为独立的分区,有信息记录分区的起始、结束、大小等信息。分区和后面的文件系统是完全独立的,没有必然的联系。
硬盘有很多划分分区的方法,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.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中也保留着这个分区的描述,根据这些信息可以确定下一个分区的位置。这样不断递归遍历就可以找到完整的分区表项。
恩,未完,请往下看
相关文章推荐
- 数据恢复软件设计与实现(二)
- 数据恢复软件设计与实现(五)
- 数据恢复软件设计与实现(六)
- 数据恢复软件设计与实现(七)
- 数据恢复软件设计与实现(八)
- 数据恢复软件设计与实现(九)
- 数据恢复软件设计与实现(一)
- 用Qt写软件系列六:博客园客户端的设计与实现(用Fiddler抓包,用CURL提交数据,用htmlcxx解析HTML)
- Web网页数据抽取软件的设计与实现
- 自己兴趣使然设计并开发了一款web管理方式的远程数据增量备份/恢复软件
- “两地三中心”容灾备份设计与实现_数据备份_数据恢复-阿里云
- 数据结构基础(9) --单链表的设计与实现(2)之高级操作
- 这款数据恢复软件有哪些强大功能呢?
- 研读《基于Hadoop的海量业务数据分析平台的设计与实现》----flume一章学习小结
- 漫谈数据仓库之拉链表(原理、设计以及在Hive中的实现)
- CDMA 无线数据模块网络连接程序的设计与实现
- 介绍几款专业的数据恢复软件
- 数据恢复软件(一):一个恢复BMP位图文件的小程序
- Window XP驱动开发(十一) USB2.0 芯片CY7C68013A+FPGA实现的高速传输系统设计(软件及硬件)
- 数据恢复软件