GPT or MBR: How do I know?
You can use
parted -lto determine the type of partition table. Eg:
$ sudo parted -l Model: ATA TOSHIBA THNSNS25 (scsi) Disk /dev/sda: 256GB Sector size (logical/physical): 512B/512B Partition Table: msdos Number Start End Size Type File system Flags 1 4194kB 32.2GB 32.2GB primary ext4 boot 2 32.2GB 256GB 224GB primary ext4 Model: ATA Hitachi HDT72101 (scsi) Disk /dev/sdb: 1000GB Sector size (logical/physical): 512B/512B Partition Table: msdos Number Start End Size Type File system Flags 1 1049kB 32.2GB 32.2GB primary ext4 boot 2 32.2GB 996GB 964GB primary ext4 3 996GB 1000GB 4295MB primary linux-swap(v1)
Partition Tablefield shows that I am using a
msdosMBR partition table (the one still commonly used for Linux and Windows) on both disks. From the
partedcan create (and thus hopefully identify) the following types of partition table (or more broadly `disk label'):
bsd dvh gpt - this is a GPT partition table loop - this is raw disk access without a partition table mac msdos - this is a standard MBR partition table pc98 sun
It is worth adding the command for listing a single partition since this is not obvious without some knowledge of
partedand it can be a pain finding the data you need if there are multiple drives. For
/dev/sdayou would do:
parted /dev/sda print
That is a great command, Graeme. Although I've been using Linux for several years, I had never really noticed it. Thanks!
On linux, you can check this via the
gdisktool which should be available for any distro.
gdisk -l /dev/sda
/dev/sdais the device node of the physical drive, not a partition (
/dev/sda2, etc. are partitions).
If you see something that includes:
*************************************************************** Found invalid GPT and valid MBR; converting MBR to GPT format in memory. ***************************************************************
You have a MBR style disk. Don't worry, this did not do any harm.
If you don't see this warning, you have a GPT disk, or a hybrid GPT/MBR disk. The later are used mostly on Apple machines intended to dual-boot versions of MS Windows which do not support GPT.
gdiskwill indicate this with:
Found valid GPT with hybrid MBR; using GPT
They may also be used in other situations where support for both styles is required.
Or the reverse - trying to use `cfdisk` on a GPT partition will also result in a warning.
If not installed and not in a `gdisk` package, it can be found in the `gptfdisk` package... at least on Gentoo.
@orion I would not recommend that as some versions of tools like `fdisk` or `cfdisk` may support GPT and therefore not show an error.
For me `gdisk` detects a hybrid GPT+MBR partition table and gives `Found valid GPT with hybrid MBR; using GPT.`. This seems to be the only method which will detect a hybrid table.
As the OS was not specified, here is FreeBSD way of doing things.
All is done through the
gpartcommand (short for GEOM partioner - nothing to do with GNU).
gpart showwould show you all the available partitions of all the disks, but you can specify the device to have a more precise look on one:
legacy partition layout with MBR (aka "msdos") and BSD partition schemes (a 2-level partitioning was usually required for BSD systems, unless using the full disk):
=> 63 67108801 ada0 MBR (32G) 63 67108545 1 freebsd [active] (32G) 67108608 256 - free - (128k) => 0 67108545 ada0s1 BSD (32G) 0 2097152 2 freebsd-swap (1.0G) 2097152 65011393 1 freebsd-ufs (31G)
modern partition layout using GPT:
gpart show /dev/ada2
=> 34 976773101 ada2 GPT (465G) 34 6 - free - (3.0k) 40 128 1 freebsd-boot (64k) 168 67108864 2 freebsd-swap (32G) 67109032 901775360 3 freebsd-zfs (430G)
To know more, all is in the
$ sudo /lib/udev/udisks-part-id /dev/sda using device_file=/dev/sda syspath=/sys/devices/pci0000:00/0000:00:0b.0/ata1/host0/target0:0:0/0:0:0:0/block/sda, offset=0 ao=0 and number=0 for /dev/sda Entering MS-DOS parser (offset=0, size=500107862016) MSDOS_MAGIC found found partition type 0xee => protective MBR for GPT Exiting MS-DOS parser Entering EFI GPT parser GPT magic found partition_entry_lba=2 num_entries=128 size_of_entry=128 Leaving EFI GPT parser EFI GPT partition table detected UDISKS_PARTITION_TABLE=1 UDISKS_PARTITION_TABLE_SCHEME=gpt UDISKS_PARTITION_TABLE_COUNT=4
Above, I've got a drive with hybrid GPT+MS-DOS partitioning. In that case, the Linux kernel ignores the MS-DOS partitioning, which is why
udiskssets UDISKS_PARTITION_TABLE_SCHEME to gpt.
That udisks-part-id tool is used to populate the udev database. So if you've got
udisksinstalled, you should be able to query that information even as a non-priviledged user with:
$ udevadm info -q property -n sda | grep UDISKS_PARTITION_TABLE_SCHEME UDISKS_PARTITION_TABLE_SCHEME=gpt
Note that you will get similar output regardless of whether there is a hybrid GPT+MBR or not. GPT requires a fake MBR with a single full disk partition of type `0xee`. In a hybrid this is a normal MBR with one `0xee` partition (and potential for major problems if the MBR data goes out of sync with the GPT data).
$ sudo fdisk -l Disk /dev/sda: 119.2 GiB, 128035676160 bytes, 250069680 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x987c1a05 Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 999423 997376 487M 83 Linux /dev/sda2 1001470 250068991 249067522 118.8G 5 Extended /dev/sda5 1001472 250068991 249067520 118.8G 8e Linux LVM
See the Disklabel type: dos. If it shows dos that means it is MBR schema else GPT schema
You can use
Examples with output:
# blkid /dev/sdc /dev/sdc: PTUUID="92f03b9b-7402-4ad2-8316-08a991c237b3" PTTYPE="gpt" # blkid -o export /dev/sdc DEVNAME=/dev/sdc PTUUID=92f03b9b-7402-4ad2-8316-08a991c237b3 PTTYPE=gpt
Or in a script, with the
-o valueoption :
disk=$1 part_type=$(blkid -o value -s PTTYPE $disk) case $part_type in gpt) echo "GPT";; dos) echo "MBR";; *) echo "partition is $part_type";; esac