libblkid: print PTUUID, the partition table uuid
PATCH v3 1/1 libblkid: print PTUUID, the partition table uuid
Call it ID_PART_TABLE_UUID in udev rules.
---
v3: Call it ID_PART_TABLE_UUID in udev rules
libblkid/src/partitions/gpt.c | 8 ++++---- libblkid/src/partitions/partitions.c | 14 +++++++++++--- misc-utils/blkid.c | 3 +++ 3 files changed, 18 insertions(+), 7 deletions(-)
libblkid/src/partitions/gpt.c +4 -4
@@ -320,14 +320,10 @@ static int probe_gpt_pt(blkid_probe pr,if (blkid_probe_set_magic (pr, lba <<9 ,sizeof (GPT_HEADER_SIGNATURE_STR ) -1 , (unsigned char *)GPT_HEADER_SIGNATURE_STR )) goto err; -if (blkid_partitions_need_typeonly (pr)) -/* caller does not ask for details about partitions */ -return 0 ; - ls =blkid_probe_get_partlist (pr);if (!ls) goto err; tab =blkid_partlist_new_parttable (ls,"gpt" , lba <<9 );
@@ -336,10 +332,14 @@ static int probe_gpt_pt(blkid_probe pr, guid = h->disk_guid;swap_efi_guid (&guid);blkid_parttable_set_id (tab, (const unsigned char *) &guid); +if (blkid_partitions_need_typeonly (pr)) +/* caller does not ask for details about partitions */ +return 0 ; + ssf =blkid_probe_get_sectorsize (pr) /512 ; fu =le64_to_cpu (h->first_usable_lba); lu =le64_to_cpu (h->last_usable_lba);
libblkid/src/partitions/partitions.c +11 -3
@@ -35,10 +35,12 @@* * NAME=value interface, supported tags: * * @PTTYPE: partition table type (dos, gpt, etc.). * +* @PTUUID: partition table uuid (gpt only) +* * @PART_ENTRY_SCHEME: partition table type * * @PART_ENTRY_NAME: partition name (gpt and mac only) * * @PART_ENTRY_UUID: partition UUID (gpt only)
@@ -568,17 +570,18 @@ nothing:*/ static int partitions_probe (blkid_probe pr,struct blkid_chain *chn) {int rc =1 ;size_t i; +blkid_partlist ls; +blkid_parttable pt;if (!pr || chn->idx <-1 )return -1 ;blkid_probe_chain_reset_vals (pr, chn); -if (chn->binary) -partitions_init_data (chn); + ls =partitions_init_data (chn);if (!pr->wipe_size && (pr->prob_flags &BLKID_PROBE_FL_IGNORE_PT )) goto details_only; DBG(LOWPROBE, blkid_debug("--> starting probing loop [PARTS idx=%d]",
@@ -600,14 +603,19 @@ static int partitions_probe(blkid_probe pr, struct blkid_chain *chn)continue ; name = idinfos[i]->name;/* all checks passed */ -if (!chn->binary) +if (!chn->binary) {blkid_probe_set_value (pr,"PTTYPE" , (unsigned char *) name,strlen (name) +1 ); + pt =blkid_partlist_get_table (ls); +if (pt && pt->id &&strcmp (name,"gpt" ) ==0 ) +blkid_probe_set_value (pr,"PTUUID" , + pt->id,37 ); + }DBG (LOWPROBE ,blkid_debug ("<-- leaving probing loop (type=%s) [PARTS idx=%d]" , name, chn->idx)); rc =0 ;break ; }
misc-utils/blkid.c +3 -0
@@ -251,10 +251,13 @@ static void print_udev_format(const char *name, const char *value)printf ("ID_FS_%s=%s\n" , name, safe);blkid_encode_string (value, enc,sizeof (enc));printf ("ID_FS_%s_ENC=%s\n" , name, enc); + }else if (!strcmp (name,"PTUUID" )) { +printf ("ID_PART_TABLE_UUID=%s\n" , value); + }else if (!strcmp (name,"PTTYPE" )) {printf ("ID_PART_TABLE_TYPE=%s\n" , value); }else if (!strcmp (name,"PART_ENTRY_NAME" ) || !strcmp (name,"PART_ENTRY_TYPE" )) {
Signature · 1 line
1.8.3.222.g430da9e
Karel Zak
maintainerPTUUID and PARTUUID (was: [PATCH v3] libblkid: print PTUUID, the partition table uuid)
Quoted 7 lines · Gabriel de Perthuis
---
v3: Call itID_PART_TABLE_UUIDin udev ruleslibblkid/src/partitions/gpt.c | 8 ++++---- libblkid/src/partitions/partitions.c | 14 +++++++++++--- misc-utils/blkid.c | 3 +++ 3 files changed, 18 insertions(+), 7 deletions(-)
I have applied a little bit different version. Anyway, you have to modify udevd to make it usable with in built-in blkid. It also exports MBR ID (so the change is not GPT specific) as partition table pseudo UUID. Examples:
# blkid -p -o udev /dev/sda ID_PART_TABLE_UUID=3549290f-417c-4941-8503-f7835109b821 ID_PART_TABLE_TYPE=gpt
# blkid -p -o udev /dev/sdb ID_PART_TABLE_UUID=54e743a7 ID_PART_TABLE_TYPE=dos
Note that I have also add support for Dos partitions pseudo-uuids. The implementation is compatible with Linux kernel root=PARTUUID= command line option.
The PARTUUID for Dos partitions is based on MBR Id and partition number, for example:
# blkid /dev/sdb1 /dev/sdb1: TYPE="ext2" PARTUUID="54e743a7-01"
is the first partition on disk with PTUUID=54e743a7. So you can use
# mount PARTUUID="54e743a7-01" /mnt/test
Karel
Signature · 2 lines
Karel Zak <[email protected]> http://karelzak.blogspot.com
Re: PTUUID and PARTUUID (was: [PATCH v3] libblkid: print PTUUID, the partition table uuid)
Quoted 13 lines · Karel Zak
Quoted 2 lines · Gabriel de Perthuis
---
v3: Call itID_PART_TABLE_UUIDin udev rulesI have applied a little bit different version. Anyway, you have to modify udevd to make it usable with in built-in blkid. It also exports MBR ID (so the change is not GPT specific) as partition table pseudo UUID. Examples:
# blkid -p -o udev /dev/sda ID_PART_TABLE_UUID=3549290f-417c-4941-8503-f7835109b821 ID_PART_TABLE_TYPE=gpt
Quoted 8 lines
# blkid -p -o udev /dev/sdb ID_PART_TABLE_UUID=54e743a7 ID_PART_TABLE_TYPE=dosNote that I have also add support for Dos partitions pseudo-uuids. The implementation is compatible with Linux kernel root=PARTUUID= command line option.
v1 of the patch had those MBR ids, I deliberately removed them in v2 because they weren't unique on the disks I had.
Calling those UUIDs will create false expectations.
Quoted 11 lines
The PARTUUID for Dos partitions is based on MBR Id and partition number, for example:
# blkid /dev/sdb1 /dev/sdb1: TYPE="ext2" PARTUUID="54e743a7-01"is the first partition on disk with PTUUID=54e743a7. So you can use
# mount PARTUUID="54e743a7-01" /mnt/testKarel