硬盘分区MBR与GPT

MBR与GPT分区

  • 参考总结文章,以及表格内容来自:

1、GPT分区数据格式分析:https://blog.csdn.net/diaoxuesong
2、GPT分区详解:http://www.jinbuguo.com/storage/gpt.html

  • MBR与GPT分区分析工具:WinHex

MBR与GPT指的是磁盘分区表类型,其中MBR分区表也叫做DOS分区表。

  • 什么是逻辑存储块?

逻辑存储块是与物理存储块进行区分的,因为不论是NAND还是机械硬盘都存在坏块的情况,在使用存储设备时遇到损坏的存储块就会被驱动程序或固件自动跳过,因此坏块对于驱动程序以上的应用程序来说是透明的
,他们对存储设备的存储块进行的编号称为 逻辑块地址(LBA: Logic Block Address)。

MBR分区

(一)概述
  • MBR的意思是Master Boot Record(主分区引导记录),位于硬盘的0磁道、0柱面、1扇区的主引导扇区中,通常所指的MBR分区指的是主引导扇区。

  • 主引导扇区(共 512 bytes)由三大部分组成:
    (1)MBR:Master Boot Record(主分区引导记录)占据 446 bytes(逻辑地址:0x00 ~ 0x1BD),BIOS在计算机启动时读取并执行此代码;
    (2)DPT:Disk Partition Table(硬盘分区表)占据 64 bytes(逻辑地址:0x1BE ~ 0x1FD);
    (3)Magic Number(硬盘有效标志位)占据 2 bytes ,值为 0x55 0xAA(逻辑地址: 0x1FE ~ 0x1FF);

  • MBR分区表(主引导扇区)结构图:
    《硬盘分区MBR与GPT》

  • MBR分区表(主引导扇区)实例:
    《硬盘分区MBR与GPT》
    注:
    红色部分 – 主分区引导记录( 其中蓝色覆盖部分为磁盘签名
    蓝色部分 – DPT分区表
    黑色部分 – 硬盘有效标志位

  • 磁盘签名(偏移 0x1B8 ~ 0x1BB):windows磁盘签名是windows系统在对硬盘做初始化时写入的一个标签,它是mbr扇区不可或缺的一个组成部分。window是系统靠这个签名来识别硬盘,如果硬盘上的签名丢失,Windows系统就会认为该硬盘没有初始化。

#磁盘签名的获取方法:
(1) 通过WinHex工具获取
(2) 读取注册表:HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices找到对应的盘符设备,其值(16进制)的前 4 个。 
(3) CMD指令获取:
      diskpart
      list disk
      select disk (number)
      uniqueid disk(显示磁盘签名,GPT分区则显示GUID)
(二)DPT: Disk Partition Table详解
  • MBR分区的分区表在引导扇区中占据了 64 bytes字节大小,其中每一个分区占据 16 bytes,因而MBR所能分配的最大分区数量为 4 个主分区(不包含逻辑扩展分区),这 16 个字节描述了一个分区的基本信息。

  • DPT实例,分别以不同颜色标记区每一个分区表项:
    《硬盘分区MBR与GPT》

  • DPT分区表项详细数据结构:

偏移字节数(bytes)说明
0x1BE10x80 活动分区(系统分区) / 00 非活动分区(普通分区)
0x1BF~0x1C13第2个字节表示该分区的起始磁头号 / 第3个字节的低六位表示分区起始扇区号 / 第3个字节的高两位与第4个字节表示分区起始柱面号
0x1C21该位表示分区文件系统标志:0x05/0x0F表示当前分区为扩展分区;0x06为FAT16文件系统;0x0B为FAT32文件系统;0x07为NTFS文件系统
0x1C3~0x1C53该3位字节与2~4字节相似,表示当前分区的结束磁头号、扇区号、柱面号
0x1C6~0x1C94该4位字节表示当前分区的逻辑起始扇区号,且该4位为小端存储
0x1CA~0x1CD4该4位字节表示当前分区占用的扇区数目,且该4位为小端存储
  • 在分区表项中分别使用3个字节表示分区的起始和结束的柱面、磁头和扇区号,通过这种方式来确定分区的位置称为CHS寻址,但是这种方式最大只能支持 8G 大小的分区。对于这种限制提出了 LBA(Logical Block Address) 寻址方法,将所有的扇区从0开始编号,并以分区表项中的 4 bytes 表示分区的LBA的起始扇区。

  • 分区起始扇区:
    以第一个分区为例,该分区的起始扇区表示为 80 00 00 00 ,但是该项是小端存储,所以实际的表示为 00 00 00 80,即第128个扇区,以每个扇区 512 bytes来计算该分区的起始偏移地址为 128 * 512 = 65536 bytes。

  • 分区占用扇区:
    分区所占用的扇区数量由每个分区表项的最后四个字节决定,即32位,因此每个主分区的最大大小为 2^32*512 ~= 2TB (MBR的限制),因此超过2T的分区是无法表示的, 同样的该项为小端存储,例如表示为 00 E8 3F 00 , 实际表示为 00 3F E8 00。

(三)MBR的限制
  • 存储
    同上所说因为只能用32为表示磁盘占用大小以及逻辑起始扇区,所以磁盘是不能超过2TB
  • 分区数量
    引导扇区中只分配了64 bytes字节给DPT,每个分区表项由16 bytes组成 ,因此就限制了所能分配的分区最大为4个主分区或3个主分区与1个扩展分区(扩展分区最多只能有一个)。
  • 安全问题
    MBR在磁盘上仅有一个区块,若损坏后很难恢复。

GPT分区

(一)概述
  • GPT:GUID Partition Table即全局唯一标识磁盘分区表。主要由 Protective MBR + EFI组成,其中EFI也可细分为4个部分。
  • 保护MBR(Protective MBR),逻辑块地址 LBA0
  • EFI分区
    (1)EFI信息区(Primary GUID Partition Header),也叫做GPT头,逻辑块地址 LBA1。
    (2)分区表(GUID Partition Table),该区域由GPT头定义,一般占用 LBA2 ~ LBA33 扇区,其中每个分区在扇区中占据128 bytes,称为分区表项。
    (3)GPT分区,也就是分区的实际位置。
    (4)备份分区,包含了GPT头与分区表的备份, 逻辑块地址LBA -34 ~ LBA -1。
  • GPT分区表结构图:

《硬盘分区MBR与GPT》

(二)优点
  • GPT分区相较于MBR分区方案相比,具有如下的优点:
    (1)支持2TB以上的磁盘。
    (2)每个磁盘的分区个数 几乎 没有限制,但Windows系统最多只允许划分128个分区。
    (3)分区的大小 几乎 没有限制,在分区表项中分区大小使用 64 bytes表示。
    (4)GPT分区自带备份,位于磁盘首尾,其中一部分被破坏后,可以通过另外一部分恢复。
    (5)分区类型不易冲突,MBR在DPT的分区项中使用 1 bytes 表示分区类型,而GPT在分区项中使用一个 16 bytes GUID来标识分区类型。
    (6)每个分区可以有一个名称。
(三)保护MBR:Protective MBR
  • GPT分区为了兼容传统的MBR分区,其第一个逻辑块地址 LBA 0 与MBR分区一致,但为了和传统的MBR进行区分,其中DPT只有一个分区,且该分区类型为EE,传统的MBR类型中EE表示保护类型,以此来防止其中的数据被篡改。同时设置保护MBR也可以防止不能识别GPT分区的磁盘工具对磁盘进行分区或格式化等操作。
  • 保护MBR实例:
    《硬盘分区MBR与GPT》
    图中标记部分所示为保护MBR中DPT分区项,改分区类型为EE(黄色标记部分)。
(四)EFI:Primary GUID Partition Header(GPT头)
  • GPT头/EFI信息区,位于磁盘的1号扇区,实例如下:
    《硬盘分区MBR与GPT》
  • GPT头详细数据结构如下表所示:
    :在EFI信息分区(GPT头中)整数部分以小端方式存储。
偏移字节数说明
0x200~0x2078GPT头签名“45 46 49 20 50 41 52 54”(ASCII码为“EFI PART”) ,为固定值
0x208~0x20B4GPT分区版本号,当前版本号为1.0版,值为“00 00 01 00”
0x20C~0x20F4GPT头的大小,通常为92字节,即“5C 00 00 00”
0x210~0x2134GPT头 CRC 校验和
0x214~0x2174保留位,必须为 “00 00 00 00”
0x218~0x21F8EFI信息区(GPT头)的起始扇区号,通常为“ 01 00 00 00 00 00 00 00 ” , 即 LBA 1
0x220~0x2278备份的EFI信息区(GPT头)的扇区号,即EFI分区的结束扇区号 ,通常在磁盘的最后一个扇区
0x228~0x22F8GPT实际分区的起始扇区号,通常为“22 00 00 00 00 00 00 00”,即 LBA 34
0x230~0x2378GPT实际分区的结束扇区号
0x238~0x24716当前磁盘的GUID,全球唯一标识符
0x248~0x24F8分区表项的起始扇区号,通常限定为“02 00 00 00 00 00 00 00”,即 LBA 2
0x250~0x2534分区表项的总数,通常限定为“80 00 00 00”,即128个
0x254~0x2574每个分区表项占用的字节数,通常限定为“80 00 00 00 ”,即 128 bytes
0x258~0x25B4分区表CRC校验和
0x25C~0x3FF该扇区剩余字节保留位 ,通常由 0 填充
(五)EFI:GPT entries(分区表项)
  • 分区表项的个数与大小均在GPT头中定义,通常占据了LBA 2 ~ LBA 34 共32个逻辑块即32个扇区,扇区大小 = 512bytes时 ,一扇区可存储4个分区项。
  • 扇区的大小不为512个字节时,一个扇区可能存放4个以上的分区项,也可能只存放一个分区项的一部分。除了 LBA 0 和 LBA 1之外,GPT仅规范了数据结构的尺寸,并不关心使用了多少个扇区(就是说逻辑块的大小不一定为32个)。
  • 此外在普通硬盘中 逻辑块 = 扇区,但是在某些硬盘中(如:支持以NAND FLASH为材料的SSD)一个读写单元是2KB或4KB,此时一个LBA的大小就是2KB/4KB.
  • 分区表项实例,图中标记部分为第一个分区:
    《硬盘分区MBR与GPT》
  • 分区表项详细数据结构如下表所示:
偏移字节数说明
0x400 ~ 0x40F16使用 GUID 表示的分区类型
0x410 ~ 0x41F16使用 GUID 表示的该分区的唯一标识符
0x420 ~ 0x4278该分区的起始扇区,用 LBA 表示,共 32 bit 表示
0x428 ~ 0x42F8该分区的结束扇区,用 LBA 表示,共 32 bit 表示
0x430 ~ 0x4378表示该分区的属性
0x438 ~ 0x47F72使用 UTF-16LE 编码,存储分区名称,最大可存储32个字符
  • 分区表项中的 分区类型 表示如下表所示:
操作系统GUID说明
00000000-0000-0000-0000-000000000000未使用
024DEE41-33E7-11D3-9D69-0008C781F39FMBR分区表
C12A7328-F81F-11D2-BA4B-00A0C93EC93BEFI系统分区
BC13C2FF-59E6-4262-A352-B275FD6F7172扩展boot分区,必须是VFAT格式
21686148-6449-6E6F-744E-656564454649BIOS引导分区
D3BFE2DE-3DAF-11DF-BA40-E3A556D89593Intel Fast Flash (iFFS) partition (for Intel Rapid Start technology)
WINE3C9E316-0B5C-4DB8-817D-F92DF00215AE微软保留分区
WINEBD0A0A2-B9E5-4433-87C0-68B6B72699C7基本数据分区
WINDE94BBA4-06D1-4D40-A16A-BFD50179D6ACWindows恢复环境
LINUX0FC63DAF-8483-4772-8E79-3D69D8477DE4基本数据分区
LINUX44479540-F297-41B2-9AF7-D131D5F0458Ax86根分区 (/) 这是systemd的发明,可用于无fstab时的自动挂载
LINUX4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709x86-64根分区 (/) 这是systemd的发明,可用于无fstab时的自动挂载
LINUX69DAD710-2CE4-4E3C-B16C-21A1D49ABED3ARM32根分区 (/) 这是systemd的发明,可用于无fstab时的自动挂载
LINUXB921B045-1DF0-41C3-AF44-4C6F280D3FAEAArch64根分区 (/) 这是systemd的发明,可用于无fstab时的自动挂载
LINUX3B8F8425-20E0-4F3B-907F-1A25A76F98E8服务器数据分区(/srv) 这是systemd的发明,可用于无fstab时的自动挂载
LINUX933AC7E1-2EB4-4F13-B844-0E14E2AEF915HOME分区 (/home) 这是systemd的发明,可用于无fstab时的自动挂载
LINUX0657FD6D-A4AB-43C4-84E5-0933C84B4F4F交换分区(swap) 不是systemd的发明,但同样可用于无fstab时的自动挂载
LINUXA19D880F-05FC-4D3B-A006-743F0F84911ERAID分区
LINUXE6D6D379-F507-44C2-A23C-238F2A3DF928逻辑卷管理器(LVM)分区
LINUX8DA63339-0007-60C0-C436-083AC8230908保留
  • 分区表项中的 分区属性 如下表所示(windows)
Bit说明
0系统分区(磁盘分区工具必须将此分区保持原样,不得做任何修改)
1EFI隐藏分区(EFI不可见分区)
2传统的BIOS的可引导分区标志
60只读
62隐藏
63不自动挂载,也就是不自动分配盘符
(六)备份区域
  • GPT头与所有分区表项的备份,内容完全相同,仅只是放在了磁盘末尾,主要作用是用于数据恢复。
    原文作者:快看,有奥特曼
    原文地址: https://blog.csdn.net/qq_43958643/article/details/115727987
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞