]> sourceware.org Git - lvm2.git/commitdiff
dev-type: detect mixed dos partition with gpt's PMBR main master 1479882293
authorPeter Rajnoha <prajnoha@redhat.com>
Thu, 3 Oct 2024 07:38:11 +0000 (09:38 +0200)
committerPeter Rajnoha <prajnoha@redhat.com>
Thu, 3 Oct 2024 07:55:36 +0000 (09:55 +0200)
Detect when we have mixed dos partition with gpt's PMBR partition.

This is not a sane configuration, but detect it anyway, just in case
someone configures such partition layout manually and forcefully and
incorrectly defines one of the partition types to be the GPT's PMBR.

For example:

  ❯  fdisk -l /dev/sdc

  Device     Boot Start    End Sectors Size Id Type
  /dev/sdc1        2048  67583   65536  32M 83 Linux
  /dev/sdc2       67584 262143  194560  95M ee GPT

Before:
(The partition filter passes even though there's real existing dos
partition - the empty GPT PMBR overrides it.)

  ❯  pvcreate /dev/sdc
  WARNING: PMBR signature detected on /dev/sdc at offset 510. Wipe it? [y/n]:
  Wiping PMBR signature on /dev/sdc.
  Physical volume "/dev/sdc" successfully created.

With this patch applied:
(The GPT PMBR does not override the existence of the dos partition.)

  ❯  pvcreate /dev/sdc
    Cannot use /dev/sdc: device is partitioned

lib/device/dev-type.c

index e89ed82c8323ecd308749a761d44d74fbfcaab9a..e3504e2b7d9e5ddbf8aeb357f18bd949dc70df36 100644 (file)
@@ -663,7 +663,7 @@ static int _has_partition_table(struct device *dev)
                                 * If this is GPT's PMBR, then also
                                 * check for gpt partition table.
                                 */
-                               if (buf.part[p].sys_ind == PART_MSDOS_TYPE_GPT_PMBR)
+                               if (buf.part[p].sys_ind == PART_MSDOS_TYPE_GPT_PMBR && !ret)
                                        ret = _has_gpt_partition_table(dev);
                                else
                                        ret = 1;
This page took 0.036955 seconds and 5 git commands to generate.