主引導記錄(Master Boot Record,縮寫:MBR),又叫作主引導扇區,是計算機開機後訪問硬盤時所必需要讀取的首個扇區,它在硬盤上的三維地址爲(0柱面,0磁頭,1扇區)。在深刻討論主引導扇區內部結構的時候,有時也將其開頭的446字節內容特指爲「主引導記錄」(MBR),其後是4個16字節的「磁盤分區表」(DPT),以及2字節的結束標誌(55AA)。所以,在使用「主引導記錄」(MBR)這個術語的時候,須要根據具體狀況判斷其究竟是指整個主引導扇區,仍是主引導扇區的前446字節。以下:html
對應到我電腦第一個扇區:數據結構
主引導記錄最開頭是第一階段引導代碼。其中的硬盤引導程序的主要做用是檢查分區表是否正確而且在系統硬件完成自檢之後將控制權交給硬盤上的引導程序(如GNU GRUB)。 它不依賴任何操做系統,並且啓動代碼也是能夠改變的,從而可以實現多系統引導。
ide
硬盤分區表佔據主引導扇區的64個字節(偏移01BEH–偏移01FDH),能夠對四個分區的信息進行描述,其中每一個分區的信息佔據16個字節。具體每一個字節的定義能夠參見硬盤分區結構信息。spa
從主引導記錄的結構能夠知道,它僅僅包含一個64個字節的硬盤分區表。因爲每一個分區信息須要16個字節,因此對於採用MBR型分區結構的硬盤,最多隻能識別4個主要分區(Primary partition)。因此對於一個採用此種分區結構的硬盤來講,想要獲得4個以上的主要分區是不可能的。這裏就須要引出擴展分區了。擴展分區也是主要分區的一種,但它與主分區的不一樣在於理論上能夠劃分爲無數個邏輯分區。操作系統
擴展分區中邏輯驅動器的引導記錄是鏈式的。每個邏輯分區都有一個和MBR結構相似的擴展引導記錄(EBR),其分區表的第一項指向該邏輯分區自己的引導扇區,第二項指向下一個邏輯驅動器的EBR,分區表第3、第四項沒有用到。設計
Windows系統默認狀況下,通常都是隻劃分一個主分區給系統,剩餘的部分所有劃入擴展分區。這裏有下面幾點須要注意:htm
在MBR分區表中最多4個主分區或者3個主分區+1個擴展分區,也就是說擴展分區只能有一個,而後能夠再細分爲多個邏輯分區。 blog
在Linux系統中,硬盤分區命名爲sda1-sda4或者hda1-hda4(其中a表示硬盤編號多是a、b、c等等)。在MBR硬盤中,分區號1-4是主分區(或者擴展分區),邏輯分區號只能從5開始。接口
在MBR分區表中,一個分區最大的容量爲2T,且每一個分區的起始柱面必須在這個disk的前2T內。你有一個3T的硬盤,根據要求你至少要把它劃分爲2個分區,且最後一個分區的起始扇區要位於硬盤的前2T空間內。若是硬盤太大則必須改用GPT。內存
那麼如今來對主引導扇區中的DPT來進行分析:
80 01 01 00 07 FE FF FF 3F 00 00 00 00 34 80 0C
80:表示該分區爲活動分區
01 01 00:開始磁頭/開始扇區和開始柱面
07 :文件系統標誌位 07表示NTFS文件系統
FE FF FF :結束磁頭/結束扇區和結束柱面
00 00 00 3F :分區起始的相對扇區號
0C 80 34 00:分區總的扇區數
後面三個表項的分析方法同上。
每一分區的第1至第3字節是該分區起始地址。其中第1字節爲起始磁頭號(面號);第2字節的低6位爲起始扇區號,高2位則爲起始柱面號的高2 位;第3字節爲起始柱面號的低8位。所以,分區的起始柱面號是用10位二進制數表示的,最大值爲2^10 = 1024,因邏輯柱面號從0開始計,故柱面號的顯示最大值爲1023。同理,用6位二進制數表示的扇區號不會超過2^6 – 1 = 63;用8位二進制數表示的磁頭號不會超過2^8 – 1 = 255。每一分區的第5至第7字節表示分區的終止地址,各字節的釋義與第1至第3字節相同。這裏咱們假設一種極端的狀況:若是讓第5至第7字節的全部二進制位都取1,就得到了柱面號、磁頭號和扇區號所能表示的最大值,從而獲得最大絕對扇區號爲:
1024 × 256 × 63 = 16,515,072
這個扇區以前的全部物理扇區所包含的字節數爲:
16,515,072 × 512Bytes ≈ 8.46GB。
由此可知硬盤的容量設計爲何會有8.4GB這一檔,分區表每一分區的第1至第3字節以及第5至第7字節的數據結構已經不能知足大於 8.46GB的大容量硬盤的須要。考慮到向下兼容的須要,業界並未對從DOS時代就如此定義的硬盤分區表提出更改意見,不然改動所牽涉的面太廣,會形成硬件和軟件發展上的一個斷層,幾乎沒法被業界和用戶所接受。硬盤廠商解決這一問題的方法是定義了新的INT 13服務擴展標準。新的INT 13服務擴展標準再也不使用操做系統的寄存器傳遞硬盤的尋址參數,而使用存儲在操做系統內存裏的地址包。地址包裏保存的是64位LBA地址,若是硬盤支持 LBA尋址,就把低28位直接傳遞給ATA接口,若是不支持,操做系統就先把LBA地址轉換爲CHS地址,再傳遞給ATA接口。經過這種方式,能實如今 ATA總線基礎上CHS尋址的最大容量是136.9 GB,而LBA尋址的最大容量是137.4GB。新的硬盤傳輸規範ATA 133規範又把28位可用的寄存器空間提升到48位,從而支持更大的硬盤。
分區表每一分區的第8至第11字節表示該分區的起始相對扇區數(即該扇區以前的絕對扇區個數),高位在右,低位在左;第12至第15字節表示該分區實際佔用的扇區數,也是高位在右,低位在左;分區表這類數據結構的表達方式與機器中數據的實際存儲方式在順序上是一致的,即低位在前,高位在後。所以,在從16進制向十進制做數值轉換時,需將字段中的16進制數以字節爲單位翻轉調位,用4個字節能夠表示最大2^32個扇區,即2TB=2048GB。
系統在分區時,各分區都不容許跨柱面,即均以柱面爲單位,這就是一般所說的分區粒度。在未超過8.4GB的分區上,C/H/S的表示方法和扇區數的表示方法所表示的分區大小是一致的。超過8.4GB的/H/S/C通常填充爲FEH/FFH/FFH,即C/H/S所能表示的最大值;有時候也會用柱面對 1024的模來填充。不過這幾個字節是什麼其實都可有可無了。
從上面能夠看到我電腦的DPT只有一個主分區和一個擴展分區。
主分區從63扇區開始,大小爲209728512扇區。 約爲100GB也就是個人C盤大小。
擴展分區從209728575扇區開始,大小爲415408770扇區。 約爲198GB也就是我後面兩個盤的大小。
擴展分區中的每一個邏輯驅動器都存在一個相似於MBR的擴展引導記錄(Extended Boot Record,EBR)。
擴展引導記錄包括一個擴展分區表和扇區結束標誌55AA。一個邏輯驅動器中的引導扇區通常位於相對扇區32或63。若是磁盤上沒有擴展分區,那麼就不會有擴展引導記錄和邏輯驅動器。第一個邏輯驅動器的擴展分區表中的第一項指向它自身的引導扇區;第二項指向下一個邏輯驅動器的EBR,若是不存在進一步的邏輯驅動器,第二項就不會使用,而被記錄成一系列零。若是有附加的邏輯驅動器,那麼第二個邏輯驅動器的擴展分區表的第一項會指向它自己的引導扇區,第二個邏輯驅動器的擴展分區表的第二項指向下一個邏輯驅動器的EBR。擴展分區表的第三項和第四項永遠都不會被使用。
擴展分區表項中的相對扇區數是從擴展分區開始的扇區到該邏輯驅動器中第一個扇區的扇區數;佔用的扇區數是指組成該邏輯驅動器的扇區數目。
有時候在磁盤的末尾會有剩餘空間,因爲分區是以1柱面的容量爲分區粒度的,那麼若是磁盤總空間不是整數個柱面的話,不夠一個柱面的剩下的空間就是剩餘空間了,這部分空間並不參與分區,因此通常沒法利用。
咱們來到擴展分區的EBR。
擴展分區第一項:起始相對63扇區,大小爲207640062扇區。 約爲99G我D盤的大小。
擴展分區第二項(指向下一個邏輯驅動器的EBR)起始相對207640125扇區,大小爲207768645扇區。爲我最後一個盤的大小。
再來到這個指向的這個邏輯驅動器的EBR。
只有一項:起始相對63扇區,大小爲207768582扇區。約爲99G我E盤的大小。
固然末尾還有一些剩餘空間。625142448-625137345 2M多的剩餘空間。
WinHex和咱們分析出來的是同樣的。
因此也能夠本身寫個程序來分析。
最後附上幾個常見的分區類型。