MBR GPT

1.MBR

1.1 MBR的組成

一個扇區的硬盤主引導記錄MBR由4個部分組成。

主引導程序(偏移地址0000H--0088H),它負責從活動分區中裝載,并運行系統引導程序。
出錯信息數據區,偏移地址0089H--00E1H為出錯信息,00E2H--01BDH全為0字節。
分區表(DPT,Disk Partition Table)含4個分區項,偏移地址01BEH--01FDH,每個分區表項長16個字節,共64字節為分區項1、分區項2、分區項3、分區項4。
結束標志字,偏移地址01FE--01FF的2個字節值為結束標志55AA,如果該標志錯誤系統就不能啟動。

WechatIMG5207.jpeg
typedef struct {
    char    bootinst[446];   /* space to hold actual boot code */
    PHMBRTABLE partitions[4];
    unsigned short  signature;/* set to 0xAA55 to indicate PC MBR format */
} mbr_head;
master_boot_record
master_boot_record

1.2 MBR中的分區信息結構

占用512個字節的MBR中,偏移地址01BEH--01FDH的64個字節,為4個分區項內容(分區信息表)。它是由磁盤介質類型及用戶在使用 FDISK定義分區時確定的。在實際應用中,FDISK對一個磁盤劃分的主分區可少于4個,但最多不超過4個。每個分區表的項目是16個字節,其內容含義如下表所示。

|存儲字節位 |內容及含義 |
|---------|
|第1字節 |引導標志。若值為80H表示活動分區,若值為00H表示非活動分區。第2、3、4字節 本分區的起始磁頭號、扇區號、柱面號。其中:磁頭號——第2字節;扇區號——第3字節的低6位;柱面號——為第3字節高2位+第4字節8位。|
|第5字節 |分區類型符。00H——表示該分區未用(即沒有指定);06H——FAT16基本分區;0BH——FAT32基本分區;05H——擴展分區;07H——NTFS分區;0FH——(LBA模式)擴展分區(83H為Linux分區等)。|
|第6、7、8字節| 本分區的結束磁頭號、扇區號、柱面號。其中:磁頭號——第6字節;扇區號——第7字節的低6位;柱面號——第7字節的高2位+第8字節。|
|第9、10、11、12字節| 本分區第一個扇區。|
|第13、14、15、16字節| 本分區的總扇區數。|

typedef struct {
    unsigned char  bootid;         /* bootable?  0=no, 128=yes  */
    unsigned char beghead ;    /* beginning head number */
    unsigned short begsect : 6;    /* beginning sector number */
    unsigned short begcyl  : 10;   /* 10 bit nmbr */
    unsigned char  systid;         /* Operating System type indicator code */
    unsigned char endhead ;    /* ending head number */
    unsigned short endsect : 6;    /* ending sector number */
    unsigned short endcyl  : 10;   /* also a 10 bit nmbr */
    unsigned int relsect;          /* first sector relative to start of disk */
    unsigned int numsect;          /* number of sectors in partition */
} mbr_table;
fdisk_partition_partitions
fdisk_partition_partitions

1.3 MBR的限制

MBR 分區系統是一個數據結構補丁的大雜燴,用于克服早期的限制。MBR 自身完全駐留在一個硬盤的第一個扇區(512 字節)上。MBR 的前 400 個字節專門用于存儲代碼:boot loader(引導裝載程序)。計算機引導時,BIOS 讀取并執行這段代碼。

在這個代碼區域之后,MBR 存儲數據在 4 個分區上,這些分區稱為主分區。每個分區采用兩種方法描述:“柱面/磁頭/扇區(CHS)” 標記法和 “邏輯塊(LBA)” 標記法。今天,CHS標記法幾乎成為了老古董,因為它是一個 24 位的數字。這意味著它只限于描述 8GB 磁盤區域。32 位的 LBA 值支持 2TB大小。但是這個 2TB 上限不太容易突破,因為在 MBR 中沒有留下任何未分配的字段,可以用于向 LBA 地址添加更多位

除了這個 2TB 問題之外,MBR 還有其他困難。主要困難是 4 個主分區的限制。要克服這個限制,可能的方法是將一個主分區放到一邊,作為一個占位符(稱為擴展分區),用于容納任意數量的附加分區(稱為邏輯分區)。然而,這是一種笨拙的權宜之計,會導致一些問題。比如,安裝多個操作系統時,如果過多的操作系統要求自身擁有過多的主分區,就會出現困難。

MBR 還有數據完整性問題。它是一個單一數據結構,容易受到誤操作和磁盤故障的損壞。另外,由于邏輯分區以一種鏈接表結構定義,如果一個邏輯分區損壞,就會阻止對剩余的邏輯分區的訪問。這些數據結構都沒有任何形式的錯誤探測功能,因此,損壞很難定位。


2.GPT

2.1 GPT的組成

GPT結構
GPT結構
GPT結構數據
GPT結構數據

2.2 保護MBR

保護MBR包含一個DOS分區表(LBA0),只包含一個類型值為0xEE的分區項,在小于2TB的磁盤上,大小為整個磁盤;在更大的磁盤上,它的大小固定為2TB。它的作用是阻止不能識別GPT分區的磁盤工具試圖對其進行格式化等操作,所以該扇區被稱為“保護MBR”。實上,
上,EFI根本不使用這個分區表。

保護MBR
保護MBR

2.3 EFI部分

EFI部分又可以分為4個區域:EFI信息區(GPT頭)、分區表、GPT分區、備份區域。

1. EFI信息區(GPT頭)

起始于磁盤的LBA1,通常也只占用這個單一扇區。其作用是定義分區表的位置和大小。GPT頭還包含頭和分區表的校驗和,這樣就可以及時發現錯誤。

2. 分區表

分區表區域包含分區表項。這個區域由GPT頭定義,一般占用磁盤LBA2~LBA33扇區。分區表中的每個分區項由起始地址、結束地址、類型值、名字、屬性標志、GUID值組成。分區表建立后,128位的GUID對系統來說是唯一的。

3. GPT分區

最大的區域,由分配給分區的扇區組成。這個區域的起始和結束地址由GPT頭定義。

4. 備份區

備份區域位于磁盤的尾部,包含GPT頭和分區表的備份。它占用GPT結束扇區和EFI結束扇區之間的33個扇區。其中最后一個扇區用來備份1號扇區的EFI信息,其余的32個扇區用來備份LBA2~LBA33扇區的分區表。

2.4 EFI信息區數據結構

相對字節偏移量(十六進制) 字節數 說明[整數皆以little endian方式表示]
00~07 8 GPT頭簽名“45 46 49 20 50 41 52 54”(ASCII碼為“EFI PART”)
08~0B 4 版本號,目前是1.0版,其值是“00 00 01 00”
0C~0F 4 GPT頭的大小(字節數),通常為“5C 00 00 00”(0x5C),也就是92字節。
10~13 4 GPT頭CRC校驗和(計算時把這個字段本身看做零值)
14~17 4 保留,必須為“00 00 00 00”
18~1F 8 EFI信息區(GPT頭)的起始扇區號,通常為“01 00 00 00 00 00 00 00”,也就是LBA1。
20~27 8 EFI信息區(GPT頭)備份位置的扇區號,也就是EFI區域結束扇區號。通常是整個磁盤最末一個扇區。
28~2F 8 GPT分區區域的起始扇區號,通常為“22 00 00 00 00 00 00 00”(0x22),也即是LBA34。
30~37 8 GPT分區區域的結束扇區號,通常是倒數第34扇區。
38~47 16 磁盤GUID(全球唯一標識符,與UUID是同義詞)
48~4F 8 分區表起始扇區號,通常為“02 00 00 00 00 00 00 00”(0x02),也就是LBA2。
50~53 4 分區表總項數,通常限定為“80 00 00 00”(0x80),也就是128個。
54~57 4 每個分區表項占用字節數,通常限定為“80 00 00 00”(0x80),也就是128字節。
58~5B 4 分區表CRC校驗和
5C~* * 保留,通常是全零填充
    typedef struct {
    BYTE   SIGNATURE[8];
    DWORD  Revision;
    DWORD  Headersize;
    DWORD  CRC32OfHeader;
    DWORD  Reserved;
    UINT64 CurrentLBA;
    UINT64 BackupLBA; //location of the other head copy
    UINT64 FirstUsableLBA; //primary partition table last LBA+1
    UINT64 LastUsableLBA; //secondary parition table first LBA-1
    BYTE DiskGUID[16];
    UINT64 PartitionEntries;
    DWORD  NumOfPartitions;
    DWORD  SizeOfPartitionEntry;
    DWORD  CRC32ofPartitionArray;
    BYTE reserved[420];
} gpt_head_table;
gptheader
gptheader

2.5 分區表

分區項結構

|相對字節偏移量(十六進制) |字節數 |說明[整數皆以little endian方式表示]|
|------------------------|
|00~0F |16 |用GUID表示的分區類型|
|10~1F |16 |用GUID表示的分區唯一標示符|
|20~27 |8 |該分區的起始扇區,用LBA值表示。|
|28~2F |8 |該分區的結束扇區(包含),用LBA值表示,通常是奇數。|
|30~37 |8 |該分區的屬性標志|
|38~7F |72 |UTF-16LE編碼的人類可讀的分區名稱,最大32個字符。|

typedef struct {
    BYTE PartitionTypeGUID[16];
    BYTE PartitionGUID[16];
    UINT64 PartitionStartLBA;
    UINT64 PartitionEndLBA;
    UINT64 PartitionProperty;
    wchar_t PartitionName[36]; //Unicode
} gpt_paptition_table;

分區類型

|相關操作系統 |GUID[little endian] |含義|
|------------|
|None |00000000-0000-0000-0000-000000000000 |未使用|
|None |024DEE41-33E7-11D3-9D69-0008C781F39F |MBR分區表|
|None |C12A7328-F81F-11D2-BA4B-00A0C93EC93B |EFI系統分區[EFI System partition (ESP)]|
|None |21686148-6449-6E6F-744E-656564454649 |BIOS引導分區,其對應的ASCII字符串是"Hah!IdontNeedEFI"。|
|None |D3BFE2DE-3DAF-11DF-BA40-E3A556D89593 |Intel Fast Flash (iFFS) partition (for Intel Rapid Start technology)|
|Windows |E3C9E316-0B5C-4DB8-817D-F92DF00215AE |微軟保留分區|
|Windows |EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 |基本數據分區|
|Windows |DE94BBA4-06D1-4D40-A16A-BFD50179D6AC |Windows恢復環境|
|Linux |0FC63DAF-8483-4772-8E79-3D69D8477DE4 |數據分區。Linux曾經使用和Windows基本數據分區相同的GUID。這個新的GUID是由 GPT fdisk 和 GNU Parted 開發者根據Linux傳統的"8300"分區代碼發明的。|
|Linux |44479540-F297-41B2-9AF7-D131D5F0458A |x86根分區 (/) 這是systemd的發明,可用于無fstab時的自動掛載|
|Linux |4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709 |x86-64根分區 (/) 這是systemd的發明,可用于無fstab時的自動掛載|
|Linux |3B8F8425-20E0-4F3B-907F-1A25A76F98E8 |Server Data (/srv) 這是systemd的發明,可用于無fstab時的自動掛載|
|Linux |933AC7E1-2EB4-4F13-B844-0E14E2AEF915 |HOME分區 (/home) 這是systemd的發明,可用于無fstab時的自動掛載|
|Linux |0657FD6D-A4AB-43C4-84E5-0933C84B4F4F |交換分區(swap) 不是systemd的發明,但同樣可用于無fstab時的自動掛載|
|Linux |A19D880F-05FC-4D3B-A006-743F0F84911E |RAID分區|
|Linux |E6D6D379-F507-44C2-A23C-238F2A3DF928 |邏輯卷管理器(LVM)分區|
|Linux |8DA63339-0007-60C0-C436-083AC8230908 |保留|

Microsoft還進一步對分區的屬性進行了細分:低位4字節表示與分區類型無關的屬性,高位4字節表示與分區類型有關的屬性。Microsoft目前使用了下列屬性:

|Bit |解釋|
|-----|
|0 |系統分區(磁盤分區工具必須將此分區保持原樣,不得做任何修改)|
|1 |EFI隱藏分區(EFI不可見分區)|
|2 |傳統的BIOS的可引導分區標志|
|60 |只讀|
|62 |隱藏|
|63 |不自動掛載,也就是不自動分配盤符|

分區屬性
分區屬性

2.6 備份分區表,備份GPT頭

備份區
備份區

備份分區表和分區頭在硬盤數據的末尾,里面的數據和結構跟分區表和分區頭內一樣。是頭部的一個備份。

2.7 GPT優勢

GPT的最大好處當然是它消除了 2TB 這個障礙。但是,即使您不必處理 2TB 的磁盤,您也可能會考慮采用 GPT。CRC 和備份數據結構是在低于 2TB 的磁盤上轉換到 GPT 的最重要的好處,盡管這一點存在爭議。主分區和邏輯分區的區別喪失也可能對一些用戶很重要。遺憾的是,許多需要主分區的操作系統都不能從 GPT 磁盤引導。


工具

010 editor

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,048評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,414評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,169評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,722評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,465評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,823評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,813評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,000評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,554評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,295評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,513評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,035評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,722評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,125評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,430評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,237評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,482評論 2 379

推薦閱讀更多精彩內容

  • 申明:本文只是在閱讀國內文章基礎上整理而來,并不深入,也不專業,請務必帶著懷疑態度來閱讀本文,并希望得到您的建議和...
    笑笑爸比閱讀 5,350評論 2 6
  • 分區表 一個磁盤拋開物理組成部分的話,就是一個地址序列,這個序列從0~n-1,每個地址包含512B(字節)的控件。...
    CoderKo1o閱讀 1,907評論 0 2
  • 轉載聲明:本文雖然不是本人100%原創,但也是辛辛苦苦整理的,可以轉載,但請注明出處 這篇文章是關于折騰Windo...
    SOMCENT閱讀 8,084評論 3 37
  • 原文 https://zhuanlan.zhihu.com/p/26098509 對很多PC的使用者來說,UEFI...
    ditt0閱讀 1,109評論 0 2
  • 由于簡書沒有目錄 想看目錄的直接打開CSDN的同名文章 目錄: [TOC] 磁盤分區格式介紹 一般來說,磁盤分區表...
    李慶雪閱讀 28,069評論 9 61