数据如何存储在磁盘上? - EFI GUID

How is data stored on disk? - EFI GUID

我之前在 SuperUser 上发布过这个问题,但我觉得它更适合程序员。

如果我没理解错的话,根据GPT,LBA 2 的前16 个字节是磁盘上第一个分区的分区类型GUID。在 Windows 磁盘管理中,第一个分区被指定为 EFI 系统分区。然而,经过进一步调查,EFI 系统分区的 GUID 是:

C12A7328-F81F-11D2-BA4B-00A0C93EC93B

但前 16 个字节告诉我的不是这样:

28732AC1-1FF8-D211-BA4B-00A0C93EC93B

有趣的是,前 3 个部分是小端,而其他 2 个是大端。

为什么会这样?

EFI_GUID数据类型声明如下:

typedef struct {
  UINT32  Data1;
  UINT16  Data2;
  UINT16  Data3;
  UINT8   Data4[8];
} EFI_GUID;

因为原始的 EFI 架构(IA64 LE 和 IA32e)默认是小端字节序的,整数也是。我还没有真正在 big-endian 机器上看到 UEFI 实现,所以我不知道是否会以其他方式存储标准 GUID。