MBR(Main Boot Record 主引导记录区)位于整个硬盘的0磁道0柱面1扇区。在512字节的主引导扇区中,MBR只占用了其中的446个字节,另外的64个字节交给了 DPT(Disk Partition Table硬盘分区表),最后两个字节“55,AA”是分区的结束标志。这个整体构成了硬盘的主引导扇区。
2.硬盘分区DPT详解
分区表由4项组成,每项16个字节(Byte).共4×16 = 64字节(Byte)。每项描述一个分区的基本信息。(80) (01 01 00) (07) (FE FF FF) (3F 00 00 00) (82 C1 3B 3A)
3.实例讲解
第一项:
(80) (01 01 00) (07) (FE FF FF) (3F 00 00 00) (82 C1 3B 3A)
-
(80): 代表这个分区(C盘)为活动分区。即系统会从C盘启动。
-
(01 01 00) :表示这个分区(C盘)的起始扇区为(0柱面,1磁头,1扇区)。
-
(07):表示这个分区的文件系统为NTFS。
-
( FE FF FF):磁头号:254; 扇区号:(11 1111)2=(63)10; 柱面号:(11 1111 1111)2=(1023)10
(FE)16=(254)10 ;(FF)16=(1111 1111)2;(FF)16=(1111 1111)2;
故该分区(C盘)结束扇区为(1023柱面,254磁头,63扇区)。
-
(3F 00 00 00) : 反向,(00 00 00 3F) 16 = (63) 10,为该分区(C盘)起始逻辑扇区号与逻辑0扇区号之差。表示该分区(C盘)前面已有63个扇区,这63个扇区为系统隐藏扇区。
-
(82 C1 3B 3A) : 反向,(3A 3B C1 82)16=(976994690)10。表明该分区(C盘)有976994690个扇区。即(0柱面,1磁头,1扇区)至(1023柱面,254磁头,63扇区)共有976994690个扇区。
第二项:(00) (FE FF FF) (07) (FE FF FF) (00 C8 3B 3A) (00 88 FF 14)
和第一项解析一样。第三项:
(00) (FE FF FF)(0F) (FE FF FF) (00 50 3B 4F) (00 18 35 25)
-
(0F) :表示该分区为扩展分区
-
(FE FF FF) :磁头号:(254) 10;扇区号:(11 1111) 2 = (63) 10 ; 柱面号:(11 1111 1111) 2 = (1023) 10
(FE) 16 = (254) 10 (FF) 16 = (1111 1111) 2 (FF) 16 = (1111 1111) 2;
但这是不准确的,因为当柱面号的真实值超过1023时,表示柱面号的10位也依然是1023。
-
(00 50 3B 4F) : 反向,(4F 3B 50 00)16=(1329287168)10,表示扩展分区共的起始扇区号为1329287168扇区。指向E盘的地址。
-
(00 18 35 25): 反向,(25 35 18 00)16=(624236544)10,表示扩展分区有624236544个扇区。扩展分区的大小为624236544/2/1024/1024=297G,这是这个扩展分区的大小,里面又可以分无限分区。如图,我的扩展分区又分为E盘和G盘。
第三项
分区表链的查找
分区表链实际上相当于一个单向链表结构。第一个分区表,也即主分区表,可以有一项 描述扩展分区。而这一项就相当于指针,指向扩展分区。然后我们根据该指针来到扩展分 区起始柱面的0头1扇区,找到第二个分区表。对于该分区表,通常情况下:第一项描述了扩展分区中第一个分区的信息,第二项描述下一个分区,而这第二项就相当于指向第二个分 区的指针,第三项,第四项一般均为0。我们可以根据该指针来到扩展分区中第二个分区起 始柱面的0头1扇区,找到第三个分区表。以此类推,直到最后一个分区表。而最后一个分 区表只有第一项有信息,余下三项均为0.相当于其指针为空.所以只要找到了一个分区表就可 以推导找出其后面所有分区表。不过该分区表前面的分区表就不好推导出来了。但令人高兴 的是这个链表的头节点,也即主分区表的位置是固定的位于(0柱面,0磁头,1扇区)处, 我们可以很轻易的找到它,然后把剩下的所有分区表一一找到。
根据上面的信息,我们跳到1329287168扇区,这里有该分区的信息。如图
-
(07):说明是文件系统是NTFS。
-
(C1 07 40 06): 反向(06 40 07 C1)16=(104859585)10。改分区有104859585个扇区。大小为:104859585/2/1024/1024=50G。
对这个扇区的分析和上面类似,我们可以看到这个扩展分区里面只划分了两个分区,如果超过四个,需要继续链式查找。