How can I tell whether my harddrive is laid out using an MBR or GPT format?


You can use parted -l to 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)

The Partition Table field shows that I am using a msdos MBR partition table (the one still commonly used for Linux and Windows) on both disks. From the man page parted can create (and thus hopefully identify) the following types of partition table (or more broadly `disk label'):

gpt    - this is a GPT partition table
loop   - this is raw disk access without a partition table
msdos  - this is a standard MBR partition table


It is worth adding the command for listing a single partition since this is not obvious without some knowledge of parted and it can be a pain finding the data you need if there are multiple drives. For /dev/sda you would do:

parted /dev/sda print
| improve this answer | |
  • That is a great command, Graeme. Although I've been using Linux for several years, I had never really noticed it. Thanks! – Tim Mar 18 '14 at 15:59
  • 3
    parted /dev/sda p will do, too. – sjas May 4 '15 at 22:35
  • i had to do "sudo parted -l" – Santropedro Oct 30 '18 at 3:43

On linux, you can check this via the gdisk tool which should be available for any distro.

gdisk -l /dev/sda

Here, /dev/sda is the device node of the physical drive, not a partition (/dev/sda1, /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. gdisk will 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.

| improve this answer | |
  • Or the reverse - trying to use cfdisk on a GPT partition will also result in a warning. – orion Mar 18 '14 at 14:54
  • If not installed and not in a gdisk package, it can be found in the gptfdisk package... at least on Gentoo. – user44370 Mar 18 '14 at 15:22
  • 2
    @orion I would not recommend that as some versions of tools like fdisk or cfdisk may support GPT and therefore not show an error. – goldilocks Mar 18 '14 at 15:37
  • 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. – Graeme Mar 18 '14 at 19:11
  • @Graeme : Thanks. I was unaware of these (the original hybrid reference was edited in by Stephane Chazelas), but I did a bit of reading and added some details. – goldilocks Mar 18 '14 at 20:34

As the OS was not specified, here is FreeBSD way of doing things.

All is done through the gpart command (short for GEOM partioner - nothing to do with GNU).

A simple gpart show would 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):

    $gpart show

    =>      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 gpart manual.

| improve this answer | |

With udisks on Linux:

$ 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)
found partition type 0xee => protective MBR for GPT
Exiting MS-DOS parser
Entering EFI GPT parser
GPT magic found
Leaving EFI GPT parser
EFI GPT partition table detected

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 udisks sets UDISKS_PARTITION_TABLE_SCHEME to gpt.

That udisks-part-id tool is used to populate the udev database. So if you've got udisks installed, 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
| improve this answer | |
  • 2
    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). – Graeme Mar 18 '14 at 18:55


$ 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

| improve this answer | |

In my Alpine Linux Partition scripts I use:

check_scheme() {
    fdisk -l $1 |grep "Disklabel type:" |awk '{ print $3 }'
| improve this answer | |
  • On my Ubuntu 18.04 system fdisk -l /dev/sda | grep -i disklabel returns nothing, (GNU Fdisk 1.3.0a). – agc Nov 18 '18 at 18:02

You can use blkid.

Examples with output:

# blkid /dev/sdc
/dev/sdc: PTUUID="92f03b9b-7402-4ad2-8316-08a991c237b3" PTTYPE="gpt"

# blkid -o export /dev/sdc

Or in a script, with the -o value option :

part_type=$(blkid -o value -s PTTYPE $disk)
case $part_type in
    gpt)  echo "GPT";;
    dos)  echo "MBR";;
    *)    echo "partition is $part_type";;
| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.