GPT 中如何计算 ID_PART_ENTRY_UUID?

GPT 中如何计算 ID_PART_ENTRY_UUID?

标签ID_PART_ENTRY_UUID是如何计算的?我可以从 出发ID_PART_TABLE_UUIDID_PART_ENTRY_UUID

GPT我有一个带有分区表和一些分区的磁盘。

我需要确定哪些分区与我的磁盘相关。磁盘中的所有分区都引用该磁盘中的分区表。我可以找到这个分区表 ID udevadm

$ sudo udevadm info /dev/loop18p1 | grep ID_PART_TABLE_UUID
E: ID_PART_TABLE_UUID=75e3b937-1ff1-4166-a51f-524b98278e6e

然而,不幸的是udevadm(以及parted等等)不适合我,我必须使用blkid

我可以从磁盘找到分区表 ID:

$ sudo blkid -po udev /dev/loop18 | grep ID_PART_TABLE_UUID
ID_PART_TABLE_UUID=75e3b937-1ff1-4166-a51f-524b98278e6e

ID_PART_TABLE_UUID分区中不存在:

$ sudo blkid -po udev /dev/loop18p1
ID_PART_ENTRY_SCHEME=gpt
ID_PART_ENTRY_NAME=primary
ID_PART_ENTRY_UUID=bcf5e461-90db-4625-a471-6c1d61126773
ID_PART_ENTRY_TYPE=0fc63daf-8483-4772-8e79-3d69d8477de4
ID_PART_ENTRY_NUMBER=1
ID_PART_ENTRY_OFFSET=34
ID_PART_ENTRY_SIZE=195279
ID_PART_ENTRY_DISK=7:18

只有ID_PART_ENTRY_UUID。在MBR分区表中,ID_PART_ENTRY_UUID只是ID_PART_TABLE_UUID加上分区的序号,所以我可以轻松处理它。但GPT表中ID_PART_ENTRY_UUID是一个棘手的哈希值。我想这个哈希值ID_PART_TABLE_UUID与我可以用它来识别磁盘分区相关。

那么,这个哈希值ID_PART_ENTRY_UUID是如何计算的呢?我可以ID_PART_TABLE_UUID从出发吗ID_PART_ENTRY_UUID

我想这是可能的,因为udevadm可以做到。

更新:实际上我使用绑定来liblkid代替 CLI blkid,但我认为这并不重要。

答案1

对于 GPTID_PART_TABLE_UUID和不相关,这些只是来自 GPT 标头(对于)和 GPT 分区条目(对于)ID_PART_ENTRY_UUID的唯一 UUID(或者实际上是在 libblkid 中转换为 UUID 的 GUID)。ID_PART_TABLE_UUIDID_PART_ENTRY_UUID

UDev 拥有这些信息只是因为它具有基本的父子关系知识,并且对于分区,来自父级(磁盘)的一些基本信息被添加到分区数据中(请参阅60-persistent-storage.rules UDev 规则)。

相关内容