|  | 磁头(Head)/盘面(Side)        柱面(Cylinder)/磁道(Track)         扇区(Sector)   硬盘主引导扇区  =  硬盘主引导记录(MBR) +  硬盘分区表(DPT)用FDISK 进行硬盘分区时产生的, 它属于整个硬盘而不属于某个独立的DOS 分区, 是硬盘正确引导和使用的必要条件.
 物理位置:0柱面0磁头1扇区(Cylinder  0,  Head  0,  Sector  1)  系统扇区(System Secotrs):  0C-0H-2S,0C-0H-63S,共 62 Sectors 大小:512字节
 其中:MBR  446字节(0000--01BD),DPT  64字节(01BE--01FD),结束标志2字节(55  AA)
 功能:MBR通过检查DPT分区信息引导系统跳转至DBR
 详解:    (DEBUG -A:  MOV AX,0201    MOV BX,0200    MOV CX,0001    MOV DX,0080    INT 13)
 
| 000H--08AH | MBR启动程序(寻找开机分区) |  
| 08BH--0D9H | MBR启动字符串 |  
| 0DAH--1BCH | 保留(  "0  ") |  
| 1BEH--1FDH | 硬盘分区表 |  
| 1FEH--1FFH | 结束标志(55AA) |   
 
 硬盘分区表(DPT)
 
| 偏移地址 | 字节数 | 含义分析 |  
| 01BE | 1 | 分区类型:00表示非活动分区;80表示活动分区;其他为无效分区 |  
| 01BF ~ 01C1 | 3 | 分区的起始地址(磁头/扇区/柱面):通常第一分区的起始地址开始于1磁头0柱面1扇区,因此这三个字节应为010100  |  
| 01C2 | 1 | 常見的分区操作系统的类型:00 [none-use]        04 [DOS  FAT16 <32M]    05 [EXTEND] 06 [DOS  FAT16 >32M]    07 [NTFS (OS/2)]   0B [ FAT32]      83 [LINUX >64M]  |  
| 01C3 ~ 01C5 | 3 | 该分区的结束地址(磁头/扇区/柱面) |  
| 01C6 ~ 01C9 | 4 | 该分区起始逻辑扇区[在线性寻址方式下的分区相对扇区地址] |  
| 01CA ~ 01CD | 4 | 该分区占用的总扇区数 |  注释:  注意分区的起始地址 (磁头/扇区/柱面) 和结束地址 (磁头/扇区/柱面) 中字节分配:00000000  01000001  00010101  (第一字节为磁头,第二字节2~7位为扇区,第二字节0~1位和第三字节为柱面)
 DPT  总共64字节(01BE--01FD), 如上所示每个分区占16个字节,  所以可以表示四个分区,  这也就是为什么一个磁盘的主分区和扩展分区之和总共只能有四个的原因.
 
 
| 分區的操作系統類型 详细信息 |  
| 
| 00 | Empty partition-table entry |  
| 01 | DOS FAT12 |  
| 04 | DOS FAT16 (up to 32 MB) |  
| 05 | DOS 3.3+ extended partition |  
| 06 | DOS 3.31+ FAT16 (over 32 MB) |  
| 07 | OS/2 HPFS, Windows NT NTFS, Advanced Unix |  
| 08 | OS/2 v1.0-1.3, AIX bootable partition, SplitDrive |  
| 09 | AIX data partition |  
| 0A | OS/2 Boot Manager |  
| 0B | Windows 95+ FAT32 |  
| 0C | Windows 95+ FAT32 (using LBA-mode INT 13 extensions) |  
| 0E | DOS FAT16 (over 32 MB, using INT 13 extensions) |  
| 0F | Extended partition (using INT 13 extensions) |  
| 17 | Hidden NTFS partition |  
| 1B | Hidden Windows 95 FAT32 partition |  
| 1C | Hidden Windows 95 FAT32 partition (using LBA-mode INT 13 extensions) |  
| 1E | Hidden LBA VFAT partition |  
| 42 | Dynamic disk volume |  
| 50 | OnTrack Disk Manager, read-only partition |  
| 51 | OnTrack Disk Manager, read/write partition |  
| 81 | Linux |  
| 82 | Linux Swap partition, Solaris (Unix) |  
| 83 | Linux native file system (ext2fs/xiafs) |  
| 85 | Linux EXT |  
| 86 | FAT16 volume/stripe set (Windows NT) |  
| 87 | HPFS fault-tolerant mirrored partition, NTFS volume/stripe set |  
| BE | Solaris boot partition |  
| C0 | DR-DOS/Novell DOS secured partition |  
| C6 | Corrupted FAT16 volume/stripe set (Windows NT) |  
| C7 | Corrupted NTFS volume/stripe set |  
| F2 | DOS 3.3+ secondary partition |  |    
 逻辑驱动器
 扩展分区的信息位于以上所示的硬盘分区表(DPT)中, 而逻辑驱动器的信息则位于扩展分区的起始扇区, 即该分区的起始地址(柱面/扇区/磁道)所对应的扇区,  该扇区中的信息与硬盘主引导扇区的区别是不包含MBR,而16字节的分区信息则表示的是逻辑驱动器的起始和结束地址等.
     所以, 在磁盘仅含有一个主分区, 一个扩展分区(包含多个逻辑驱动器)的情况下,即使由于病毒或其他原因导致硬盘主引导扇区的数据丢失(包括DPT),也可以通过逻辑驱动器的数据来恢复整个硬盘.
   绝对扇区=磁头号*每道扇区数[3F] + 柱面号*最大磁头数[一般是FF]*每道扇区数 + 扇区号  - 1  最大磁头数=(((总扇区数 + 起始逻辑扇 - 扇区止) / 每道扇区数[3F])-磁头号止) / 柱面号止  或 最大磁头数=(((起始逻辑扇 +1 - 扇区起) / 每道扇区数[3F])-磁头号起) / 柱面号起  例如:  以下是一个硬盘的分区情况.    
|   | 磁头 | 柱面 | 扇区 | 磁头 | 柱面 | 扇区 |  起始扇(逻辑) | 结束扇 |  总共扇区 |  
| MBR | 0 | 0 | 1 |  |  |  |  |  |  |  
| C | 1 | 0 | 1 | 239 | 276 | 63  | 63 | 4,188,239 | 4,188,177 |  
| 扩 |  0  | 277 | 1 | 239 | 554 | 63 | 4,188,240 | 8,391,599 | 4,203,360 |  
| D |  1  | 277 | 1 | 239 | 554 | 63 | 4,188,303 | 8,391,599 | 4,203,297 |       如果主分区表损坏,  则可以通过手工查找扩展分区表中所包含的逻辑驱动器数据,  在本例中就是D盘所对应的数据,  然后将其起始扇(逻辑)减去63就是所对应的扩展分区的起始扇(逻辑),  将其起始地址(磁头/扇区/柱面)改为0柱面就是扩展分区的起始地址.  然后通过扩展分区就可以得到主分区C的信息,  然后就可以使用FDISK/MBR命令和手工填写分区表恢复整个硬盘. 该例所对应的分区表数据:80  01
 01  00  06  EF  7F  14  3F  00  00  00  11  E8  3F  00  00  00
 41  15  05  EF  BF  2A  50  E8  3F  00  60  23  40  00  00  00
 00  00  00  00  00  00  00  00  00  00  00  00  00  00  00  00
 00  00  00  00  00  00  00  00  00  00  00  00  00  00  55  AA
 算法过程: (以第一个分区为例)
 EF  7F 14 对应的磁头号EFH = 239D, 柱面号7F高二位与14H=114H = 276D,   扇区号7F低六位= 3FH = 63D 起始逻辑扇= 3F  00  00  00 = 3FH = 63D 分区总扇区数= 11  E8  3F  00 = 3FE811H = 4188177D 最大磁头数= ((((4188177+63)-63)/63)-239)/276=240D = 0F0H 01  01  00 对应的逻辑扇 = 1*63 + 240*0*63 + 1 - 1 =  63D EF  7F 14 对应的逻辑扇 = 239*63 + 240*276*63 + 63 - 1 = 4188239D     扩展分区表数据:00  01
 41  15  07  EF  BF  2A  8F  E8  3F  00  21  23  40  00
 注意:  逻辑起始扇区和总共分区数是左边为低位,  如该例的扩展分区的起始地址为8F E8 3F 00转换十进制时要先变为00 3F E8 8F,  总共占用分区数21 23 40 00要先变为00 40 23 21,  同理当手工填写该值时也要进行高低位转换.
 
 扩展逻辑盘寻找说明:1 在主分区的分区表中,寻找扩展分区的物理地址
 2 在扩展分区地址所指扇区尾部,查找扩展分区表(扩展卷),结构与主分区表相同
 3 扩展分区表的物理地址中,将磁头数加1,其余不变,则为第一个逻辑驱动器(如D盘)的BOOT扇区物理地址
 4 根据扩展驱动器的系统分类(FAT16/FAT32,以2048MB为界限),查看FAT表与ROOT区
 5 如果还有E、F……等盘,则继续寻找符合要求的BOOT扇区,BOOT扇区规定在每个磁头的1号扇区
        系统启动过程主要由一下几步组成(以硬盘启动为例)1. 开机
 2. BIOS 加电自检 ( Power On Self Test -- POST ) 内存地址为 0FFFF : 0000
 3. 将硬盘第一个扇区 (0头0道[柱面]1扇区,也就是Boot Sector) 读入内存地址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中的引导程序完成.
 | 
评论