1. Boot Sector 的组成
Boot Sector 也就是硬盘的第一个扇区, 它由 MBR (MasterBoot Record),DPT (D
isk 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 |---------------------------------------------|
| |
分区信息 1(16 字节)
01CD | |
01CE |---------------------------------------------|
| |
分区信息 2(16 字节)
01DD | |
01DE |---------------------------------------------|
| |
分区信息 3(16 字节)
01ED | |
01EE |---------------------------------------------|
| |
分区信息 4(16 字节)
01FD | |
|---------------------------------------------|
| 01FE |01FF |
| 55 | AA |
|---------------------------------------------|
2. 分区表结构简介
分区表由四个分区项构成, 每一项的结构如下:
: 分区状态, 0 =未激活, 0x80 = 激活 (注意此项)
BYTE State
: 分区起始磁头号
BYTE StartHead
: 分区起始扇区和柱面号,底字节的低 6 位为扇区号,
WORD StartSC
高 2 位为柱面号的第 9,10 位, 高字节为柱面号的低 8 位
: 分区类型, 如 0x0B = FAT32, 0x83 = Linux 等,
BYTE Type
00 表示此项未用,07 = NTFS
: 分区结束磁头号
BYTE EndHead
:分区结束扇区和柱面号, 定义同前
WORD EndSC
DWORD Relative :在线性寻址方式下的分区相对扇区地址
(对于基本分区即为绝对地址)
: 分区大小 (总扇区数)
DWORD Sectors
PS:在 DOS / Windows 系统下,基本分区必须以柱面为单位划分(
Sectors
* Heads 个扇区), 如对于 CHS 为 764/255/63 的硬盘,分区的最小
尺寸为 255 * 63 * 512 / 1048576
= 7.844 MB.
3. 扩展分区简介
由于主分区表中只能分四个分区, 无法满足需求,因此设计了一种扩展分区格式. 基本
上说, 扩展分
区的信息是以链表形式存放的,但也有一些特别的地方.首先, 主分区表中要有一个基本扩展
分区项,所有
扩展分区都隶属于它,也就是说其他所有扩展分区的空间都必须包括在这个基本扩展分区中.
对于 DOS /
Windows 来说, 扩展分区的类型为 0x05. 除基本扩展分区以外的其他所有扩展分区则以
链表的形式级
联存放, 后一个扩展分区的数据项记录在前一个扩展分区的分区表中,但两个扩展分区的空
间并不重叠.
扩展分区类似于一个完整的硬盘, 必须进一步分区才能使用.但每个扩展分区中只能
存在一个其他分
区. 此分区在 DOS/Windows 环境中即为逻辑盘.因此每一个扩展分区的分区表(同样存储
在扩展分区的
第一个扇区中)中最多只能有两个分区数据项(包括下一个扩展分区的数据项).
系统启动过程主要由一下几步组成(以硬盘启动为例):
1. 开机
2. BIOS 加电自检 ( Power On Self Test -- POST ),内存地址为 0ffff:0000
3. 将硬盘第一个扇区 (0 头 0 道 1 扇区, 也就是 BootSector)读入内存地址 0000:7c0
0 处.
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 S
ystem" 然后停止,或尝试软盘启动.
10. 跳转到 0000:7c00 处继续执行特定系统的启动程序.
11. 启动系统 ...
PS:以上步骤中 2,3,4,5 步是由 BIOS 的引导程序完成.6,7,8,9,10 步由 MBR 中的引导程
序完成.
一般多系统引导程序 (如 SmartFDISK, BootStar, PQBoot 等)都是将标准主引导记
录替换成自己的引
导程序, 在运行系统启动程序之前让用户选择要启动的分区.
而某些系统自带的多系统引导程序 (如 lilo, NT Loader 等)则可以将自己的引导
程序放在系统所处
分区的第一个扇区中, 在 Linux 中即为 SuperBlock (其实 SuperBlock 是两个扇区).
Boot Sector 也就是硬盘的第一个扇区, 它由 MBR (MasterBoot Record),DPT (D
isk 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 |---------------------------------------------|
| |
分区信息 1(16 字节)
01CD | |
01CE |---------------------------------------------|
| |
分区信息 2(16 字节)
01DD | |
01DE |---------------------------------------------|
| |
分区信息 3(16 字节)
01ED | |
01EE |---------------------------------------------|
| |
分区信息 4(16 字节)
01FD | |
|---------------------------------------------|
| 01FE |01FF |
| 55 | AA |
|---------------------------------------------|
2. 分区表结构简介
分区表由四个分区项构成, 每一项的结构如下:
: 分区状态, 0 =未激活, 0x80 = 激活 (注意此项)
BYTE State
: 分区起始磁头号
BYTE StartHead
: 分区起始扇区和柱面号,底字节的低 6 位为扇区号,
WORD StartSC
高 2 位为柱面号的第 9,10 位, 高字节为柱面号的低 8 位
: 分区类型, 如 0x0B = FAT32, 0x83 = Linux 等,
BYTE Type
00 表示此项未用,07 = NTFS
: 分区结束磁头号
BYTE EndHead
:分区结束扇区和柱面号, 定义同前
WORD EndSC
DWORD Relative :在线性寻址方式下的分区相对扇区地址
(对于基本分区即为绝对地址)
: 分区大小 (总扇区数)
DWORD Sectors
PS:在 DOS / Windows 系统下,基本分区必须以柱面为单位划分(
Sectors
* Heads 个扇区), 如对于 CHS 为 764/255/63 的硬盘,分区的最小
尺寸为 255 * 63 * 512 / 1048576
= 7.844 MB.
3. 扩展分区简介
由于主分区表中只能分四个分区, 无法满足需求,因此设计了一种扩展分区格式. 基本
上说, 扩展分
区的信息是以链表形式存放的,但也有一些特别的地方.首先, 主分区表中要有一个基本扩展
分区项,所有
扩展分区都隶属于它,也就是说其他所有扩展分区的空间都必须包括在这个基本扩展分区中.
对于 DOS /
Windows 来说, 扩展分区的类型为 0x05. 除基本扩展分区以外的其他所有扩展分区则以
链表的形式级
联存放, 后一个扩展分区的数据项记录在前一个扩展分区的分区表中,但两个扩展分区的空
间并不重叠.
扩展分区类似于一个完整的硬盘, 必须进一步分区才能使用.但每个扩展分区中只能
存在一个其他分
区. 此分区在 DOS/Windows 环境中即为逻辑盘.因此每一个扩展分区的分区表(同样存储
在扩展分区的
第一个扇区中)中最多只能有两个分区数据项(包括下一个扩展分区的数据项).
系统启动过程主要由一下几步组成(以硬盘启动为例):
1. 开机
2. BIOS 加电自检 ( Power On Self Test -- POST ),内存地址为 0ffff:0000
3. 将硬盘第一个扇区 (0 头 0 道 1 扇区, 也就是 BootSector)读入内存地址 0000:7c0
0 处.
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 S
ystem" 然后停止,或尝试软盘启动.
10. 跳转到 0000:7c00 处继续执行特定系统的启动程序.
11. 启动系统 ...
PS:以上步骤中 2,3,4,5 步是由 BIOS 的引导程序完成.6,7,8,9,10 步由 MBR 中的引导程
序完成.
一般多系统引导程序 (如 SmartFDISK, BootStar, PQBoot 等)都是将标准主引导记
录替换成自己的引
导程序, 在运行系统启动程序之前让用户选择要启动的分区.
而某些系统自带的多系统引导程序 (如 lilo, NT Loader 等)则可以将自己的引导
程序放在系统所处
分区的第一个扇区中, 在 Linux 中即为 SuperBlock (其实 SuperBlock 是两个扇区).