1. 程式人生 > >01MBR分區幸運快三平臺搭建結構、DPT分區表、EBR擴展引導

01MBR分區幸運快三平臺搭建結構、DPT分區表、EBR擴展引導

code 值轉換 內容 電腦 ntfs 無法 字節數 window oot

主引導幸運快三平臺搭建論壇:haozbbs.com Q1446595067 記錄(Master Boot Record,縮寫:MBR),又叫做主引導扇區,是計算機開機後訪問硬盤時所必須要讀取的首個扇區,它在硬盤上的三維地址為(0柱面,0磁頭,1扇區)。在深入討論主引導扇區內部結構的時候,有時也將其開頭的446字節內容特指為“主引導記錄”(MBR),其後是4個16字節的“磁盤分區表”(DPT),以及2字節的結束標誌(55AA)。因此,在使用“主引導記錄”(MBR)這個術語的時候,需要根據具體情況判斷其到底是指整個主引導扇區,還是主引導扇區的前446字節。如下:

image

對應到我電腦第一個扇區:

image

啟動代碼

主引導記錄最開頭是第一階段引導代碼。其中的硬盤引導程序的主要作用是檢查分區表是否正確並且在系統硬件完成自檢以後將控制權交給硬盤上的引導程序(如GNU GRUB)。 它不依賴任何操作系統,而且啟動代碼也是可以改變的,從而能夠實現多系統引導。
硬盤分區表

硬盤分區表占據主引導扇區的64個字節(偏移01BEH–偏移01FDH),可以對四個分區的信息進行描述,其中每個分區的信息占據16個字節。具體每個字節的定義可以參見硬盤分區結構信息。

image

從主引導記錄的結構可以知道,它僅僅包含一個64個字節的硬盤分區表。由於每個分區信息需要16個字節,所以對於采用MBR型分區結構的硬盤,最多只能識別4個主要分區(Primary partition)。所以對於一個采用此種分區結構的硬盤來說,想要得到4個以上的主要分區是不可能的。這裏就需要引出擴展分區了。擴展分區也是主要分區的一種,但它與主分區的不同在於理論上可以劃分為無數個邏輯分區。

擴展分區中邏輯驅動器的引導記錄是鏈式的。每一個邏輯分區都有一個和MBR結構類似的擴展引導記錄(EBR),其分區表的第一項指向該邏輯分區本身的引導扇區,第二項指向下一個邏輯驅動器的EBR,分區表第三、第四項沒有用到。

Windows系統默認情況下,一般都是只劃分一個主分區給系統,剩余的部分全部劃入擴展分區。這裏有下面幾點需要註意:

在MBR分區表中最多4個主分區或者3個主分區+1個擴展分區,也就是說擴展分區只能有一個,然後可以再細分為多個邏輯分區。
在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。

image

擴展分區第一項:起始相對63扇區,大小為207640062扇區。 約為99G我D盤的大小。

擴展分區第二項(指向下一個邏輯驅動器的EBR)起始相對207640125扇區,大小為207768645扇區。為我最後一個盤的大小。

再來到這個指向的這個邏輯驅動器的EBR。

image

只有一項:起始相對63扇區,大小為207768582扇區。約為99G我E盤的大小。

當然末尾還有一些剩余空間。625142448-625137345 2M多的剩余空間。

image

WinHex和我們分析出來的是一樣的。

image

所以也可以自己寫個程序來分析。

最後附上幾個常見的分區類型。

image

01MBR分區幸運快三平臺搭建結構、DPT分區表、EBR擴展引導