Partition

在 GPT 中如何計算 ID_PART_ENTRY_UUID?

  • October 9, 2020

標籤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_UUIDID_PART_ENTRY_UUID

我想這是可能的,因為udevadm可以做到。

更新:實際上我使用綁定liblkid而不是 CLI blkid,但我想這沒關係。

對於 GPTID_PART_TABLE_UUID並且ID_PART_ENTRY_UUID不相關,這些只是來自 GPT 標頭 (for ID_PART_TABLE_UUID) 和 GPT 分區條目 (for ) 的唯一 UUID(或者實際上是在 libblkid 中轉換為 UUID 的 GUID ID_PART_ENTRY_UUID)。

UDev 擁有這些資訊僅僅是因為它具有基本的父子關係知識,並且對於分區,來自父(磁碟)的一些基本資訊被添加到分區數據中(參見60-persistent-storage.rules UDev 規則)。

引用自:https://unix.stackexchange.com/questions/613738