数据恢复知识笔记

1.    Boot Sector 的组成

 

  Boot Sector 也就是硬盘的第一个扇区, 它由 MBR (MasterBoot Record),DPT (Disk Partition Table) Boot Record ID 三部分组成.

  MBR 又称作主引导记录占用 Boot Sector 的前 446 个字节( 0 to 0x1BD ),存放系统主引导程序 (它负责从活动分区中装载并运行系统引导程序).

  DPT 即主分区表占用 64 个字节 (0x1BE to 0x1FD),记录了磁盘的基本分区信息. 主分区表分为四个分区项, 每项 16 字节,分别记录了每个主分区的信息(因此最多可以有四个主分区).

  Boot Record ID 即引导区标记占用两个字节 (0x1FE and0x1FF), 对于合法引导区, 它等于 0xAA55, 这是判别引导区是否合法的标志.

  Boot Sector 的具体结构如下图所示:

 

   0000 |---------------------------------------------|

      |                        |

      |                        |

      |      Master Boot Record         |

      |      主引导记录(446字节)         |

 

      |                        |

   01BD |                        |

   01BE |---------------------------------------------|

      |                        |

   01CD |      分区信息 1(16字节)         |

   01CE |---------------------------------------------|

      |                        |

   01DD |      分区信息 2(16字节)         |

   01DE |---------------------------------------------|

      |                        |

   01ED |      分区信息 3(16字节)         |

   01EE |---------------------------------------------|

      |                        |

   01FD |      分区信息 4(16字节)         |

      |---------------------------------------------|

      | 01FE        |01FF           |

      |    55     |     AA         |

      |---------------------------------------------|

  

 2. 分区表结构简介

 

  分区表由四个分区项构成, 每一项的结构如下:

  BYTE State   : 分区状态, 0 =未激活, 0x80 = 激活 (注意此项)

  BYTE StartHead : 分区起始磁头号

  WORD StartSC  : 分区起始扇区和柱面号,底字节的低6位为扇区号,

             2位为柱面号的第 9,10 , 高字节为柱面号的低 8

  BYTE Type    : 分区类型, 0x0B = FAT32, 0x83 = Linux ,

              00 表示此项未用,07 = NTFS

  BYTE EndHead  : 分区结束磁头号

  WORD EndSC   :分区结束扇区和柱面号, 定义同前

  DWORD Relative :在线性寻址方式下的分区相对扇区地址

           (对于基本分区即为绝对地址)

  DWORD Sectors  : 分区大小 (总扇区数)

 

  注意: DOS / Windows 系统下,基本分区必须以柱面为单位划分( Sectors * Heads 个扇区), 如对于 CHS 764/255/63 的硬盘,分区的最小尺寸为 255 * 63 * 512 / 1048576 = 7.844 MB.

 

 

 

 

系统启动过程主要由一下几步组成(以硬盘启动为例):

  1.
 开机 
  2. BIOS 加电自检 ( Power On Self Test -- POST ),内存地址为 0ffff:0000
  3. 将硬盘第一个扇区 (001扇区, 也就是BootSector)读入内存地址 0000:7c00 
.
  4.
 检查 (WORD) 0000:7dfe 是否等于 0xaa55,若不等于,则转去尝试其他启动介质,如果没有其他启动介质则显示"No ROM BASIC" 然后死机.
  5.
 跳转到 0000:7c00 处执行 MBR 中的程序.
  6.
 MBR 首先将自己复制到 0000:0600 ,然后继续执行.
  7.
 在主分区表中搜索标志为活动的分区.如果发现没有活动分区或有不止一个活动分区, 则转停止.
  8.
 将活动分区的第一个扇区读入内存地址 0000:7c00.

9. 检查 (WORD) 0000:7dfe 是否等于 0xaa55,若不等于则显示 "Missing Operating System" 然后停止,或尝试软盘启动.
  10.
 跳转到 0000:7c00处继续执行特定系统的启动程序.
  11.
 启动系统 ...

  以上步骤中 2,3,4,5 步是由 BIOS 
的引导程序完成.6,7,8,9,10步由MBR中的引导程序完成.

字节位移

字段长度

字段名和定义

0x01BE

BYTE

0x80

   引导指示符(Boot Indicator)   指明该分区是否是活动分区。

0x01BF

BYTE

0x01

开始磁头(Starting Head)

0x01C0

6

0x01

开始扇区(Starting Sector) 只用了0~5位。后面的两位(6位和第7)被开始柱面字段所使用

0x01C1

10

0x00

开始柱面(Starting Cylinder)   除了开始扇区字段的最后两位外,还使用了1位来组成该柱面值。开始柱面是一个10位数,最大值为1023

0x01C2

BYTE

0x07

系统ID(System ID) 定义了分区的类型,详细定义,请参阅图4

0x01C3

BYTE

0xFE

结束磁头(Ending Head)

0x01C4

6

0xFF

结束扇区(Ending Sector)     只使用了0~5位。最后两位(67)被结束柱面字段所使用

0x01C5

10

0x7B

结束柱面(Ending Cylinder) 除了结束扇区字段最后的两位外,还使用了1位,以组成该柱面值。结束柱面是一个10位的数,最大值为1023

0x01C6

DWORD

0x0000003F

相对扇区数(Relative Sectors) 从该磁盘的开始到该分区的开始的位移量,以扇区来计算

0x01CA

DWORD

0x00DAA83D

总扇区数(Total Sectors) 该分区中的扇区总数

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值