GUID磁盘分区表GUID Partition Table,缩写:GPT)其含义为“全局唯一标识磁盘分区表”,是一个实体硬盘的分区表的结构布局的标准。它是可扩展固件接口EFI)标准(被Intel用于替代个人计算机的BIOS)的一部分,被用于替代BIOS系统中的一64bits来存储逻辑块地址和大小信息的主开机纪录(MBR)分区表
注意:MBR包括引导程序和分区表
   GPT只包括分区表

  • 在MBR硬盘中,分区信息直接存储于主引导记录(MBR)中(主引导记录中还存储着系统的引导程序)。但在GPT硬盘中,分区表的位置信息储存在GPT头中。但出于兼容性考虑,硬盘的第一个扇区仍然用作MBR,之后才是GPT头。
  • 跟现代的MBR一样,GPT也使用逻辑区块位址(LBA)取代了早期的CHS寻址方式。MBR信息存储于LBA 0,GPT头存储于LBA 1,接下来才是分区表本身。

  • (LBA0)

  • 在GPT分区表的最开头,处于兼容性考虑仍然存储了一份传统的MBR,用来防止不支持GPT的硬盘管理工具错误识别并破坏硬盘中的数据,这个MBR也叫做保护MBR。在支持从GPT启动的操作系统中,这里也用于存储第一阶段的启动代码。在这个MBR中,只有一个标识为0xEE的分区,以此来表示这块硬盘使用GPT分区表。不能识别GPT硬盘的操作系统通常会识别出一个未知类型的分区,并且拒绝对硬盘进行操作,除非用户特别要求删除这个分区。这就避免了意外删除分区的危险。另外,能够识别GPT分区表的操作系统会检查保护MBR中的分区表,如果分区类型不是0xEE或者MBR分区表中有多个项,也会拒绝对硬盘进行操作。
  • 在使用MBR/GPT混合分区表的硬盘中,这部分存储了GPT分区表的一部分分区(通常是前四个分区),可以使不支持从GPT启动的操作系统从这个MBR启动,启动后只能操作MBR分区表中的分区。如Boot Camp就是使用这种方式启动Windows。 [2]
  • (LAB1)
    分区表头定义了硬盘的可用空间以及组成分区表的项的大小和数量。在使用64位Windows Server 2003的机器上,最多可以创建128个分区,即分区表中保留了128个项,其中每个都是128字节。(EFI标准要求分区表最小要有16,384字节,即128个分区项的大小)
  • 分区表头还记录了这块硬盘的GUID,记录了分区表头本身的位置和大小(位置总是在LBA 1)以及备份分区表头和分区表的位置和大小(在硬盘的最后)。它还储存着它本身和分区表的CRC32校验。固件、引导程序和操作系统在启动时可以根据这个校验值来判断分区表是否出错,如果出错了,可以使用软件从硬盘最后的备份GPT中恢复整个分区表,如果备份GPT也校验错误,硬盘将不可使用。所以GPT硬盘的分区表不可以直接使用16进制编辑器修改。
  • 主分区表和备份分区表的头分别位于硬盘的第二个扇区(LBA 1)以及硬盘的最后一个扇区。备份分区表头中的信息是关于备份分区表的。
  • (LBA 2–33)
  • GPT分区表使用简单而直接的方式表示分区。一个分区表项的前16字节是分区类型GUID。例如,EFI系统分区的GUID类型是{C12A7328-F81F-11D2-BA4B-00A0C93EC93B}。接下来的16字节是该分区唯一的GUID(这个GUID指的是该分区本身,而之前的GUID指的是该分区的类型)。再接下来是分区起始和末尾的64位LBA编号,以及分区的名字和属性。
相对字节偏移量
(十六进制)
字节数 说明[整数皆以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~* * 保留,通常是全零填充
分区项结构
相对字节偏移量
(十六进制)
字节数 说明[整数皆以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个字符
分区类型
相关操作系统 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)],必须是VFAT格式
None BC13C2FF-59E6-4262-A352-B275FD6F7172 扩展boot分区,必须是VFAT格式
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 69DAD710-2CE4-4E3C-B16C-21A1D49ABED3 ARM32根分区 (/) 这是systemd的发明,可用于无fstab时的自动挂载
Linux B921B045-1DF0-41C3-AF44-4C6F280D3FAE AArch64根分区 (/) 这是systemd的发明,可用于无fstab时的自动挂载
Linux 3B8F8425-20E0-4F3B-907F-1A25A76F98E8 服务器数据分区(/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 不自动挂载,也就是不自动分配盘符

https://www.cnblogs.com/yinheyi/p/7279508.html

http://blog.chinaunix.net/uid-24774106-id-3497929.html

https://www.zhihu.com/question/27652991

https://www.zhihu.com/search?type=content&q=windows%20boot%20manage

https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-2000-server/cc976786(v=technet.10)

http://www.jinbuguo.com/storage/gpt.html

Hard Disk Driver(GPT)的更多相关文章

  1. Making your first driver - complete walkthrough(使用VisualDDK)

    This article describes how to create, build and debug your first driver using Visual Studio and Visu ...

  2. parted分区详解 查看UUID两种方式 blkid 和 ls -l /dev/disk/by-uuid

    通常我们用的比较多的一般都是fdisk工具来进行分区,但是现在由于磁盘越来越廉价,而且磁盘空间越来越大:而fdisk工具他对分区是有大小限制的,它只能划分小于2T的磁盘.但是现在的磁盘空间很多都已经是 ...

  3. GPT分区在IBM服务器上安装linux不能引导的解决方法

    提示: Your boot partition is on a disk using the GPT partitioning Scheme but this machines cannot boot ...

  4. Live disk migration with libvirt blockcopy

    nova采用 libvirt blockcopy(python  API virDomainBlockRebase)来做live snapshot. Create the base image: $ ...

  5. kvm初体验之八:调整vm的vcpu, memory, disk大小

    假设host上创建的vm的名字为vm1. 1. 查看vm1的domain information [root@tanghuimin thm]# virsh dominfo vm1 Id: 10 Nam ...

  6. PatentTips - Universal RAID Class Driver

    BACKGROUND OF THE INVENTION The present invention relates to the field of data storage devices. Comp ...

  7. Asynchronous Disk I/O Appears as Synchronous on Windows

    Summary File I/O on Microsoft Windows can be synchronous or asynchronous. The default behavior for I ...

  8. kvm 随笔

    1. 查看kvm虚拟机状态 # virsh list --all   2. KVM虚拟机开机 # virsh start windows   3. KVM虚拟机关机或断电 (1) 关机 virsh关机 ...

  9. Create Windows Server 2008 cluster from the command line

    How to create a Windows Server 2008 cluster from the command line? Creating a cluster in Server 2008 ...

随机推荐

  1. List中bean某属性值转换为list

    List<类> lst = new ArrayList<>() ; lst.stream().map(类::get需要取得仠的属性名).collect(Collectors.t ...

  2. (转)null和NULL和nullptr和””区别

    突然想到这个有趣的问题:C语言和C++对大小写是敏感的,也就是说null和NULL是区别对待的.NULL代表空地址,null只是一个符号.便来深究,看了很多资料,总结如下: 其实null和NULL都是 ...

  3. 14 —— npm —— 基本使用 ——初始化项目

    概念:类似积木,可以组装成各种应用 node 的强大之处 : 可以随意使用这些组件 一,npm 是什么: nodejs 自带的包(模块)管理工具 二,查看 npm 的所有选项 三,查看各个选项的具体作 ...

  4. MySLQ排序后标记排行

    查询排行及所有(表名.*) 1. ; AS top, customer.* FROM customer 2. AS top, customer.* ) r, customer ORDER BY cus ...

  5. 04-String——课后作业1:字串加密

    题目:请编写一个程序,加密或解密用户输入的英文字串要求设计思想.程序流程图.源代码.结果截图. 程序设计思想:首先由用户选择是加密还是解密,利用String类中的charAt函数依次取出字串中的字符, ...

  6. 堆栈 pop push

    1.什么是堆栈 1.1堆栈 堆栈可以看作程序的心脏 所有重要的数据都会在这个里面体现(比如运算一道算术题,虽然还没算出最终答案,但是你在算出最终结果前的一些过程值可以放进堆栈) 堆栈这块内存比较特殊, ...

  7. Java IO 乱码

    InputStreamReader isr = new InputStreamReader(new FileInputStream("./test/垃圾短信训练集80W条.txt" ...

  8. 「黑科技」智能消毒防疫机器人 技术方案介绍-disinfection robot

    消毒机器人 小新防疫消杀机器人 - 自主导航全方位360°臭氧杀菌消毒机器人,采用臭氧无阻碍.无死角.遍布整个空间除菌:强力涡轮风机,30㎡室内空气循环6次/h,10分钟速效杀菌.除异味.自动转化为氧 ...

  9. CocoaPods为多个target添加依赖库/Podfile的配置

    Podfile的相关配置,请看官方文档http://guides.cocoapods.org/syntax/podfile.html 1)多个target公用相同库,还可以添加额外的不同第三方库 编辑 ...

  10. 委托、Action、Func使用

    参考 using System; using System.Collections.Generic; using System.Linq; using System.Text; using Syste ...