我有一个使用 GPT 的磁盘,上面只有 1 个分区(Ext4),根据UEFI,第一个16 Bytes
应该GPT Partition Entry Array
是Partition Type GUID
。所以我提取了我的分区Partition Type GUID
并读取了它的第一个32 Digits
,因为它是十六进制形式。然后我得到了 GUID ,在与维基百科af3dc60f838472478e793d69d8477de4
上的列表进行核对后,我发现这个特定的 GUID 没有任何意义。因此,这引发了一个问题:谁决定类型 GUID 及其对应的类型?是否有类型及其 GUID 的完整列表,或者我的列表根本不存在?以零结尾的列表被截断:GPT Partition Entry Array
af3dc60f838472478e793d69d8477de4e18058ef52250344ba2f0ae31c057fa60008000000000000ffb7c0d10100000000000000000000006500780074003400740062
GUID 是混合端的。它们在磁盘上存储的字节顺序与文本表示的字节顺序不同 - 由于历史原因,GUID 由几个不同的字段组成,其中一些是线性存储的字节数组,而另一些是小端存储的整数。
通常使用“GUID”和“UUID”来区分这两种存储方式,术语“UUID”表示使用线性 1:1 表示,术语“GUID”表示字节交换表示(尽管这不是每个人都遵循的硬性规定)。由于 UEFI 是一种非常 Microsoft 的格式,因此它使用 Microsoft 的混合字节序的 GUID 样式。
af3dc60f 8384 7247 8e79 3d69d8477de4
因此,您从 GPT 获得的字节字符串实际上代表 GUID{0fc63daf-8483-4772-8e79-3d69d8477de4}
,它表示“Linux 文件系统”。请注意前三个字段是如何进行字节交换的,因为它们最初用于将时间戳的各个部分表示为整数值。GPT 是 UEFI 的一部分,因此 UEFI 规范首先定义某些类型的 GUID(例如 EFI 系统分区)。然后每个操作系统或每个供应商为其目的定义自己的类型 GUID(例如 Microsoft 为“Microsoft Basic Data”定义 GUID,Linux 为“Linux 文件系统”定义 GUID)。GUID 本身通常是通过遵循随机 GUID 生成算法来决定的。
没有官方注册,因为 GUID 的整个想法是您只需遵循算法并获得唯一的 GUID,而不会与任何其他人冲突,所以每个人都这样做。
例如,当 systemd 开发人员决定为每种 CPU 架构创建一组“Linux /usr”GUID(后来是“Linux /usr dm-verity”等等)时,他们只需运行
uuidgen
足够的次数即可创建 GUID。Linux
fdisk
工具中嵌入了相当长的列表(目前有 219 个条目),而维基百科有时可作为一种非官方注册表。