硬盘,由很多柱面(Cylinder)组成,每个柱面,有一定数量的磁头(Head),每个磁头又可分为一定数量个扇区(Sector)。
磁盘的定位可义用类似于三维坐标的形式表示,即(柱面,磁头,扇区)或者(C, H, S) 。这种表示方法被称为 CHS(Cylinder-Head-Sector) Address 。C和H的索引都从0开始,S的索引则从1开始。如果把三维坐标转换为一维坐标,就是 LBA(Logical Block Addressing),表示的是从磁盘第一个扇区算起的第几个扇区。LBA的索引从0开始。
目前常见的硬盘,每个柱面有255个磁头,每个磁头有63个扇区,即
据此也很容易在 CHS 地址和 LBA 地址这间进行转换:
MBR(Master Boot Record),即硬盘的主引导记录,存储在硬盘的第一个扇区。
它由三个部分组成,主引导记录MBR、硬盘分区表DPT(Disk Partition Table)和硬盘有效标志。
MBR 数据结构
偏移 | 长度 | 描述 |
---|---|---|
0x0000 | 440 | 引导代码 |
0x01B8 | 4 | 磁盘标识 |
0x01BC | 2 | 一般为 0x0000 |
0x01BE | 64 | 四个16byte的DPT |
0x01FE | 2 | MBR 有效标志 0xAA55 |
可见,MBR最多能标识4个主要分区(Primary Partition)。扩展分区是主分区的一种,用于划分更多的逻辑分区。
硬盘分区结构信息
偏移 | 长度(字节) | 描述 |
---|---|---|
00H | 1 | 分区状态:00=非活动分区;80=活动分区;其它数值没有意义 |
01H | 3 | 分区起始扇区的 CHS Address。详见表格下方。 |
04H | 1 | 文件系统标志位。详见表格下方 |
05H | 3 | 分区结束扇区的CHS Address。详见表格下方 |
08H | 4 | 分区起始扇区的 LBA Address |
0CH | 4 | 分区总的扇区数 |
分区总的扇区数是一个4字节的无符号整数,因此,每个分区理论上不能超过 2^32*512 = 2*2^40 = 2 TB
每个分区(Partition)也有自己的引导扇区,被称为 VBR(Volume Boot Record) 或者 Partition Boot Sector,即该分区的第一扇区。
MBR中的引导代码通常寻找第一个活动分区(Active Partition),并将控制权交给该分区的引导代码,进而进行系统引导。
在当前分区的根目录下寻找文件 NTLDR ,由该文件负责进一步的引导。
文件 boot.ini 是 NTLDR 的配置文件,可以通过配置改变引导方式。
文件 bootfont.bin 是用来汉化引导过程中的中文字符的。
文件 "ntdetect.com" 被ntldr调用来检测当前系统环境。