数据如何存储在磁盘上? - 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。
我之前在 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。