.\" Copyright 2011-2018 Roderick W. Smith (rodsmith@rodsbooks.com)
.\" May be distributed under the GNU General Public License
.TH "GDISK" "8" "1.0.4" "Roderick W. Smith" "GPT fdisk Manual"
.SH "NAME"
gdisk \- Interactive GUID partition table (GPT) manipulator
.SH "SYNOPSIS"
.BI "gdisk "
[ \-l ]
.I device

.SH "DESCRIPTION"
GPT fdisk (aka \fBgdisk\fR) is a text\-mode menu\-driven program for
creation and manipulation of partition tables. It will automatically
convert an old\-style Master Boot Record (MBR) partition table or BSD
disklabel stored without an MBR carrier partition to the newer Globally
Unique Identifier (GUID) Partition Table (GPT) format, or will load a GUID
partition table. When used with the \fI\-l\fR command\-line option, the
program displays the current partition table and then exits.

GPT fdisk operates mainly on the GPT headers and partition tables; however,
it can and will generate a fresh protective MBR, when required. (Any boot
loader code in the protective MBR will not be disturbed.) If you've created
an unusual protective MBR, such as a hybrid MBR created by
\fBgptsync\fR or \fBgdisk\fR's own hybrid MBR creation feature,
this should not be disturbed by most ordinary actions. Some advanced data
recovery options require you to understand the distinctions between the
main and backup data, as well as between the GPT headers and the partition
tables. For information on MBR vs. GPT, as well as GPT terminology and
structure, see the extended \fBgdisk\fR documentation at
\fIhttp://www.rodsbooks.com/gdisk/\fR or consult Wikipedia.

The \fBgdisk\fR program employs a user interface similar to that of Linux's
\fBfdisk\fR, but \fBgdisk\fR modifies GPT partitions. It also has the
capability of transforming MBR partitions or BSD disklabels into GPT
partitions. Like the original \fBfdisk\fR program, \fBgdisk\fR does not
modify disk structures until you explicitly write them to disk, so if you
make a mistake, you can exit from the program with the 'q' option to leave
your partitions unmodified.

Ordinarily, \fBgdisk\fR operates on disk device files, such as
\fI/dev/sda\fR or \fI/dev/hda\fR under Linux, \fI/dev/disk0\fR under
Mac OS X, or \fI/dev/ad0\fR or \fI/dev/da0\fR under FreeBSD. The program
can also operate on disk image files, which can be either copies of whole
disks (made with \fBdd\fR, for instance) or raw disk images used by
emulators such as QEMU or VMWare. Note that only \fIraw\fR disk images
are supported; \fBgdisk\fR cannot work on compressed or other advanced
disk image formats.

The MBR partitioning system uses a combination of cylinder/head/sector
(CHS) addressing and logical block addressing (LBA). The former is klunky
and limiting. GPT drops CHS addressing and uses 64\-bit LBA mode
exclusively. Thus, GPT data structures, and therefore
\fBgdisk\fR, do not need to deal with CHS geometries and all the problems
they create. Users of \fBfdisk\fR will note that \fBgdisk\fR
lacks the options and limitations associated with CHS geometries.

For best results, you should use an OS\-specific partition table
program whenever possible. For example, you should make Mac OS X
partitions with the Mac OS X Disk Utility program and Linux partitions
with the Linux \fBgdisk\fR or GNU Parted program.

Upon start, \fBgdisk\fR attempts to identify the partition type in use on
the disk. If it finds valid GPT data, \fBgdisk\fR will use it. If
\fBgdisk\fR finds a valid MBR or BSD disklabel but no GPT data, it will
attempt to convert the MBR or disklabel into GPT form. (BSD disklabels are
likely to have unusable first and/or final partitions because they overlap
with the GPT data structures, though.) GPT fdisk can identify, but not use
data in, Apple Partition Map (APM) disks, which are used on 680x0\- and
PowerPC\-based Macintoshes. Upon exiting with the 'w' option, \fBgdisk\fR
replaces the MBR or disklabel with a GPT. \fIThis action is potentially
dangerous!\fR Your system may become unbootable, and partition type codes
may become corrupted if the disk uses unrecognized type codes. Boot
problems are particularly likely if you're multi\-booting with any
GPT\-unaware OS. If you mistakenly launch \fBgdisk\fR on an MBR disk, you
can safely exit the program without making any changes by using the 'q'
option.

The MBR\-to\-GPT conversion will leave at least one gap in the partition
numbering if the original MBR used logical partitions. These gaps are
harmless, but you can eliminate them by using the 's' option, if you like.
(Doing this may require you to update your \fI/etc/fstab\fR file.)

When creating a fresh partition table, certain considerations may be in
order:

.TP 
.B *
For data (non\-boot) disks, and for boot disks used on BIOS\-based computers
with GRUB as the boot loader, partitions may be created in whatever order
and in whatever sizes are desired.

.TP 
.B *
Boot disks for EFI\-based systems require an \fIEFI System Partition\fR
(\fBgdisk\fR internal code 0xEF00) formatted as FAT\-32. I recommended
making this partition 550 MiB. (Smaller ESPs are common, but some EFIs have
flaky FAT drivers that necessitate a larger partition for reliable
operation.) Boot\-related files are stored here. (Note that GNU Parted
identifies such partitions as having the "boot flag" set.)

.TP 
.B *
Some boot loaders for BIOS\-based systems make use of a \fIBIOS Boot
Partition\fR (\fBgdisk\fR internal code 0xEF02), in which the secondary
boot loader is stored, possibly without the benefit of a filesystem. (GRUB2
may optionally use such a partition.) This partition can typically be quite
small (roughly 32 to 200 KiB, although 1 MiB is more common in practice),
but you should consult your boot loader documentation for details.

.TP 
.B *
If Windows is to boot from a GPT disk, a partition of type \fIMicrosoft
Reserved\fR (\fBgdisk\fR
internal code 0x0C01) is recommended. This partition should be about 128 MiB
in size. It ordinarily follows the EFI System Partition and immediately
precedes the Windows data partitions. (Note that old versions of GNU Parted
create all FAT partitions as this type, which actually makes the partition
unusable for normal file storage in both Windows and Mac OS X.)

.TP 
.B *
Some OSes' GPT utilities create some blank space (typically 128 MiB) after
each partition. The intent is to enable future disk utilities to use this
space. Such free space is not required of GPT disks, but creating it may
help in future disk maintenance. You can use GPT fdisk's relative partition
positioning option (specifying the starting sector as '+128M', for
instance) to simplify creating such gaps.

.SH "OPTIONS"
.TP 
.B \-l
List the partition table for the specified device and then exits.
.PP 

Most interactions with \fBgdisk\fR
occur with its interactive text\-mode menus. Three menus exist: the main
menu, the recovery & transformation menu, and the experts' menu. The main
menu provides the functions that are most likely to be useful for typical partitioning tasks, such as creating and deleting partitions, changing partition type codes, and so on. Specific functions are:

.TP 
.B b
Save partition data to a backup file. You can back up your current
in\-memory partition table to a disk file using this option. The resulting
file is a binary file consisting of the protective MBR, the main GPT
header, the backup GPT header, and one copy of the partition table, in that
order. Note that the backup is of the current in\-memory data structures, so
if you launch the program, make changes, and then use this option, the
backup will reflect your changes. Note also that the restore option is on
the recovery & transformation menu; the backup option is on the main menu
to encourage its use.


.TP 
.B c
Change the GPT name of a partition. This name is encoded as a UTF\-16
string, but proper entry and display of anything beyond basic ASCII values
requires suitable locale and font support. For the most part, Linux ignores
the partition name, but it may be important in some OSes. GPT fdisk sets a
default name based on the partition type code. Note that the GPT partition
name is different from the filesystem name, which is encoded in the
filesystem's data structures.

.TP 
.B d
Delete a partition. This action deletes the entry from the partition table
but does not disturb the data within the sectors originally allocated to
the partition on the disk. If a corresponding hybrid MBR partition exists,
\fBgdisk\fR deletes it, as well, and expands any adjacent 0xEE (EFI GPT)
MBR protective partition to fill the new free space.

.TP 
.B i
Show detailed partition information. The summary information produced by
the 'p' command necessarily omits many details, such as the partition's
unique GUID and the translation of \fBgdisk\fR's
internal partition type code to a plain type name. The 'i' option
displays this information for a single partition.

.TP 
.B l
Display a summary of partition types. GPT uses a GUID to identify partition
types for particular OSes and purposes. For ease of data entry, \fBgdisk\fR
compresses these into two\-byte (four\-digit hexadecimal) values that are
related to their equivalent MBR codes. Specifically, the MBR code is
multiplied by hexadecimal 0x0100. For instance, the code for Linux swap
space in MBR is 0x82, and it's 0x8200 in \fBgdisk\fR. A one\-to\-one
correspondence is impossible, though. Most notably, the codes for all
varieties of FAT and NTFS partition correspond to a single GPT code (entered
as 0x0700 in \fBgdisk\fR). Some OSes use a single MBR code but employ many
more codes in GPT. For these, \fBgdisk\fR adds code numbers sequentially,
such as 0xa500 for a FreeBSD disklabel, 0xa501 for FreeBSD boot, 0xa502 for
FreeBSD swap, and so on. Note that these two\-byte codes are unique to
\fBgdisk\fR. The type code list may optionally be filtered by a search
string; for instance, entering \fI\fBLinux\fR\fR shows only partition type
codes with descriptions that include the string \fILinux\fR. This search is
performed case\-sensitively.

.TP 
.B n
Create a new partition. This command is modeled after the equivalent
\fBfdisk\fR option, although some differences exist. You enter a partition
number, starting sector, and an ending sector. Both start and end sectors
can be specified in absolute terms as sector numbers or as positions
measured in kibibytes (K), mebibytes (M), gibibytes (G), tebibytes (T), or
pebibytes (P); for instance, \fI\fB40M\fR\fR specifies a position 40MiB
from the start of the disk. You can specify locations relative to the start
or end of the specified default range by preceding the number by a '+' or '\-'
symbol, as in \fI\fB+2G\fR\fR to specify a point 2GiB after the
default start sector, or \fI\fB\-200M\fR\fR to specify a point 200MiB
before the last available sector. Pressing the Enter key with no input
specifies the default value, which is the start of the largest available
block for the start sector and the end of the same block for the end
sector.

.TP 
.B o
Clear out all partition data. This includes GPT header data,
all partition definitions, and the protective MBR. The sector alignment
is reset to the default (1 MiB, or 2048 sectors on a disk with 512-byte
sectors).

.TP 
.B p
Display basic partition summary data. This includes partition
numbers, starting and ending sector numbers, partition sizes,
\fBgdisk\fR's partition types codes, and partition names. For
additional information, use the 'i' command.

.TP 
.B q
Quit from the program \fIwithout saving your changes\fR.
Use this option if you just wanted to view information or if you make a
mistake and want to back out of all your changes.

.TP 
.B r
Enter the recovery & transformation menu. This menu includes emergency
recovery options (to fix damaged GPT data structures) and options to
transform to or from other partitioning systems, including creating
hybrid MBRs.

.TP 
.B s
Sort partition entries. GPT partition numbers need not match the order of
partitions on the disk. If you want them to match, you can use this option.
Note that some partitioning utilities sort partitions whenever they make
changes. Such changes will be reflected in your device filenames, so you
may need to edit \fI/etc/fstab\fR if you use this option.

.TP 
.B t
Change a single partition's type code. You enter the type code using a
two\-byte hexadecimal number, as described earlier. You may also enter a
GUID directly, if you have one and \fBgdisk\fR doesn't know it.

.TP 
.B v
Verify disk. This option checks for a variety of problems, such as
incorrect CRCs and mismatched main and backup data. This option does not
automatically correct most problems, though; for that, you must use
options on the recovery & transformation menu. If no problems are found,
this command displays a summary of unallocated disk space.

.TP 
.B w
Write data. Use this command to save your changes.

.TP 
.B x
Enter the experts' menu. Using this option provides access to features you
can use to get into even more trouble than the main menu allows.
.PP 

.TP 
.B ?
Print the menu. Type this command (or any other unrecognized command) to
see a summary of available options.

.PP 
The second \fBgdisk\fR menu is the recovery & transformation menu, which
provides access to data recovery options and features related to the
transformation of partitions between partitioning schemes (converting
BSD disklabels into GPT partitions or creating hybrid MBRs, for instance).
A few options on this menu duplicate functionality on the main
menu, for the sake of convenience. The options on this menu are:

.TP 
.B b
Rebuild GPT header from backup. You can use the backup GPT header to
rebuild the main GPT header with this option. It's likely to be useful if
your main GPT header was damaged or destroyed (say, by sloppy use of
\fBdd\fR).

.TP 
.B c
Load backup partition table. Ordinarily, \fBgdisk\fR
uses only the main partition table (although the backup's integrity is
checked when you launch the program). If the main partition table has been
damaged, you can use this option to load the backup from disk and use it
instead. Note that this will almost certainly produce no or strange
partition entries if you've just converted an MBR disk to GPT format, since
there will be no backup partition table on disk.

.TP 
.B d
Use main GPT header and rebuild the backup. This option is likely to be
useful if the backup GPT header has been damaged or destroyed.

.TP 
.B e
Load main partition table. This option reloads the main partition table
from disk. It's only likely to be useful if you've tried to use the backup
partition table (via 'c') but it's in worse shape then the main partition
table.

.TP 
.B f
Load MBR and build fresh GPT from it. Use this option if your GPT is corrupt
or conflicts with the MBR and you want to use the MBR as the basis for a new
set of GPT partitions.

.TP 
.B g
Convert GPT into MBR and exit. This option converts as many partitions as possible
into MBR form, destroys the GPT data structures, saves the new MBR, and exits.
Use this option if you've tried GPT and find that MBR works better for you.
Note that this function generates up to four primary MBR partitions or three
primary partitions and as many logical partitions as can be generated. Each
logical partition requires at least one unallocated block immediately before
its first block. Therefore, it may be possible to convert a maximum of four
partitions on disks with tightly\-packed partitions; however, if free space was
inserted between partitions when they were created, and if the disk is under
2 TiB in size, it should be possible to convert all the partitions to MBR form.
See also the 'h' option.

.TP 
.B h
Create a hybrid MBR. This is an ugly workaround that enables GPT\-unaware
OSes, or those that can't boot from a GPT disk, to access up to three of
the partitions on the disk by creating MBR entries for them. Note that
these hybrid MBR entries can easily go out of sync with the GPT entries,
particularly when hybrid\-unaware GPT utilities are used to edit the disk.
Thus, you may need to re\-create the hybrid MBR if you use such tools. Unlike
the 'g' option, this option does not support converting any partitions into
MBR logical partitions.

.TP 
.B i
Show detailed partition information. This option is identical to the 'i'
option on the main menu.

.TP 
.B l
Load partition data from a backup file. This option is the reverse of the 'b'
option on the main menu. Note that restoring partition data from anything
but the original disk is not recommended.

.TP 
.B m
Return to the main menu. This option enables you to enter main\-menu commands.

.TP 
.B o
Print protective MBR data. You can see a summary of the protective MBR's
partitions with this option. This may enable you to spot glaring problems
or help identify the partitions in a hybrid MBR.

.TP 
.B p
Print the partition table. This option is identical to the 'p' option in
the main menu.

.TP 
.B q
Quit without saving changes. This option is identical to the 'q' option in
the main menu.

.TP 
.B t
Transform BSD partitions into GPT partitions. This option works on BSD
disklabels held within GPT (or converted MBR) partitions. Converted
partitions' type codes are likely to need manual adjustment. \fBgdisk\fR
will attempt to convert BSD disklabels stored on the main disk when
launched, but this conversion is likely to produce first and/or last
partitions that are unusable. The many BSD variants means that the
probability of \fBgdisk\fR being unable to convert a BSD disklabel is
high compared to the likelihood of problems with an MBR conversion.

.TP 
.B v
Verify disk. This option is identical to the 'v' option in the main menu.

.TP 
.B w
Write table to disk and exit. This option is identical to the 'w' option in
the main menu.

.TP 
.B x
Enter the experts' menu. This option is identical to the 'x' option in the
main menu.

.TP 
.B ?
Print the menu. This option (or any unrecognized entry) displays a summary
of the menu options.

.PP 
The third \fBgdisk\fR menu is the experts' menu. This menu provides advanced
options that aren't closely related to recovery or transformation between
partitioning systems. Its options are:

.TP 
.B a
Set attributes. GPT provides a 64\-bit attributes field that can be used to
set features for each partition. \fBgdisk\fR supports four attributes:
\fIsystem partition\fR, \fIread\-only\fR, \fIhidden\fR, and
\fIdo not automount\fR. You can set other attributes, but their numbers
aren't translated into anything useful. In practice, most OSes seem to
ignore these attributes.

.TP 
.B c
Change partition GUID. You can enter a custom unique GUID for a partition
using this option. (Note this refers to the GUID that uniquely identifies a
partition, not to its type code, which you can change with the 't' main\-menu
option.) Ordinarily, \fBgdisk\fR assigns this number randomly; however,
you might want to adjust the number manually if you've wound up with the
same GUID on two partitions because of buggy GUID assignments (hopefully
not in \fBgdisk\fR) or sheer incredible coincidence.

.TP 
.B d
Display the sector alignment value. See the
description of the 'l' option for more details.

.TP 
.B e
Move backup GPT data structures to the end of the disk. Use this command if
you've added disks to a RAID array, thus creating a virtual disk with space
that follows the backup GPT data structures. This command moves the backup
GPT data structures to the end of the disk, where they belong.

.TP
.B f
Randomize the disk's GUID and all partitions' unique GUIDs (but not their
partition type code GUIDs). This function may be used after cloning a disk
with another utility in order to render all GUIDs once again unique.

.TP 
.B g
Change disk GUID. Each disk has a unique GUID code, which \fBgdisk\fR
assigns randomly upon creation of the GPT data structures. You can generate
a fresh random GUID or enter one manually with this option.

.TP
.B h
Recompute CHS values in protective or hybrid MBR. This option can sometimes
help if a disk utility, OS, or BIOS doesn't like the CHS values used by the
partitions in the protective or hybrid MBR. In particular, the GPT
specification requires a CHS value of 0xFFFFFF for over-8GiB partitions,
but this value is technically illegal by the usual standards. Some BIOSes
hang if they encounter this value. This option will recompute a more normal
CHS value -- 0xFEFFFF for over-8GiB partitions, enabling these BIOSes to
boot.

.TP 
.B i
Show detailed partition information. This option is identical to the 'i'
option on the main menu.

.TP
.B j
Adjust the location of the main partition table. This value is normally 2,
but it may need to be increased in some cases, such as when a
system\-on\-chip (SoC) is hard\-coded to read boot code from sector 2. I
recommend against adjusting this value unless doing so is absolutely
necessary.

.TP 
.B l
Change the sector alignment value. Disks with more logical sectors per
physical sectors (such as modern Advanced Format drives), some RAID
configurations, and many SSD devices, can suffer performance problems if
partitions are not aligned properly for their internal data structures. On
new disks, GPT fdisk attempts to align partitions on 1 MiB boundaries
(2048\-sectors on disks with 512-byte sectors) by default, which optimizes
performance for all of these disk types. On pre\-partitioned disks, GPT
fdisk attempts to identify the alignment value used on that disk, but will
set 8-sector alignment on disks larger than 300 GB even if lesser alignment
values are detected. In either case, it can be changed by using this
option.

.TP 
.B m
Return to the main menu. This option enables you to enter main\-menu commands.

.TP 
.B n
Create a new protective MBR. Use this option if the current protective MBR
is damaged in a way that \fBgdisk\fR doesn't automatically detect and
correct, or if you want to convert a hybrid MBR into a "pure" GPT with a
conventional protective MBR.

.TP 
.B o
Print protective MBR data. You can see a summary of the protective MBR's
partitions with this option. This may enable you to spot glaring problems
or help identify the partitions in a hybrid MBR.

.TP 
.B p
Print the partition table. This option is identical to the 'p' option in
the main menu.

.TP 
.B q
Quit without saving changes. This option is identical to the 'q' option in
the main menu.

.TP 
.B r
Enter the recovery & transformations menu. This option is identical to
the 'r' option on the main menu.

.TP 
.B s
Resize partition table. The default partition table size is 128 entries.
Officially, sizes of less than 16KB (128 entries, given the normal entry
size) are unsupported by the GPT specification; however, in practice they
seem to work, and can sometimes be useful in converting MBR disks. Larger
sizes also work fine. OSes may impose their own limits on the number of
partitions, though.

.TP 
.B t
Swap two partitions' entries in the partition table. One partition may be
empty. For instance, if partitions 1\-4 are defined, transposing 1 and 5
results in a table with partitions numbered from 2\-5. Transposing
partitions in this way has no effect on their disk space allocation; it
only alters their order in the partition table.

.TP
.B u
Replicate the current device's partition table on another device. You will
be prompted to type the new device's filename. After the write operation
completes, you can continue editing the original device's partition table.
Note that the replicated partition table is an exact copy, including all
GUIDs; if the device should have its own unique GUIDs, you should use the
\fBf\fR option on the new disk.

.TP 
.B v
Verify disk. This option is identical to the 'v' option in the main menu.

.TP 
.B z
Zap (destroy) the GPT data structures and exit. Use this option if you want to
repartition a GPT disk using \fBfdisk\fR or some other GPT\-unaware program.
You'll be given the choice of preserving the existing MBR, in case it's a
hybrid MBR with salvageable partitions or if you've already created new MBR
partitions and want to erase the remnants of your GPT partitions. \fIIf you've
already created new MBR partitions, it's conceivable that this option will
damage the first and/or last MBR partitions!\fR Such an event is unlikely, but
could occur if your new MBR partitions overlap the old GPT data structures.

.TP 
.B ?
Print the menu. This option (or any unrecognized entry) displays a summary
of the menu options.

.PP 
In many cases, you can press the Enter key to select a default option when
entering data. When only one option is possible, \fBgdisk\fR
usually bypasses the prompt entirely.

.SH "BUGS"
Known bugs and limitations include:

.TP 
.B *
The program compiles correctly only on Linux, FreeBSD, Mac OS X, and Windows.
Linux versions for x86\-64 (64\-bit), x86 (32\-bit), and PowerPC (32\-bit) have been
tested, with the x86\-64 version having seen the most testing. Under FreeBSD,
32\-bit (x86) and 64\-bit (x86\-64) versions have been tested. Only 32\-bit
versions for Mac OS X and Windows have been tested by the author, although
I've heard of 64-bit versions being successfully compiled.

.TP 
.B *
The FreeBSD version of the program can't write changes to the partition
table to a disk when existing partitions on that disk are mounted. (The
same problem exists with many other FreeBSD utilities, such as
\fBgpt\fR, \fBfdisk\fR, and \fBdd\fR.) This limitation can be overcome
by typing \fBsysctl kern.geom.debugflags=16\fR at a shell prompt.

.TP 
.B *
The fields used to display the start and end sector numbers for partitions
in the 'p' command are 14 characters wide. This translates to a limitation
of about 45 PiB. On larger disks, the displayed columns will go out of
alignment.

.TP 
.B *
In the Windows version, only ASCII characters are supported in the
partition name field. If an existing partition uses non\-ASCII UTF\-16
characters, they're likely to be corrupted in the 'i' and 'p' menu options'
displays; however, they should be preserved when loading and saving
partitions. Binaries for Linux, FreeBSD, and OS X support full UTF-16
partition names.

.TP 
.B *
The program can load only up to 128 partitions (4 primary partitions and
124 logical partitions) when converting from MBR format. This limit can
be raised by changing the \fI#define MAX_MBR_PARTS\fR line in the
\fIbasicmbr.h\fR source code file and recompiling; however, such a change
will require using a larger\-than\-normal partition table. (The limit
of 128 partitions was chosen because that number equals the 128 partitions
supported by the most common partition table size.)

.TP 
.B *
Converting from MBR format sometimes fails because of insufficient space at
the start or (more commonly) the end of the disk. Resizing the partition
table (using the 's' option in the experts' menu) can sometimes overcome
this problem; however, in extreme cases it may be necessary to resize a
partition using GNU Parted or a similar tool prior to conversion with
\fBgdisk\fR.

.TP 
.B *
MBR conversions work only if the disk has correct LBA partition
descriptors. These descriptors should be present on any disk over 8 GiB in
size or on smaller disks partitioned with any but very ancient software.

.TP 
.B *
BSD disklabel support can create first and/or last partitions that overlap
with the GPT data structures. This can sometimes be compensated by
adjusting the partition table size, but in extreme cases the affected
partition(s) may need to be deleted.

.TP 
.B *
Because of the highly variable nature of BSD disklabel structures,
conversions from this form may be unreliable \-\- partitions may be dropped,
converted in a way that creates overlaps with other partitions, or
converted with incorrect start or end values. Use this feature with
caution!

.TP 
.B *
Booting after converting an MBR or BSD disklabel disk is likely to be
disrupted. Sometimes re\-installing a boot loader will fix the problem, but
other times you may need to switch boot loaders. Except on EFI\-based
platforms, Windows through at least Windows 7 doesn't support booting
from GPT disks. Creating a hybrid MBR (using the 'h' option on the recovery &
transformation menu) or abandoning GPT in favor of MBR may be your only
options in this case.

.PP 

.SH "AUTHORS"
Primary author: Roderick W. Smith (rodsmith@rodsbooks.com)

Contributors:

* Yves Blusseau (1otnwmz02@sneakemail.com)

* David Hubbard (david.c.hubbard@gmail.com)

* Justin Maggard (justin.maggard@netgear.com)

* Dwight Schauer (dschauer@gmail.com)

* Florian Zumbiehl (florz@florz.de)


.SH "SEE ALSO"
.BR cfdisk (8),
.BR cgdisk (8),
.BR fdisk (8),
.BR mkfs (8),
.BR parted (8),
.BR sfdisk (8),
.BR sgdisk (8),
.BR fixparts (8).

\fIhttp://en.wikipedia.org/wiki/GUID_Partition_Table\fR

\fIhttp://developer.apple.com/technotes/tn2006/tn2166.html\fR

\fIhttp://www.rodsbooks.com/gdisk/\fR

.SH "AVAILABILITY"
The \fBgdisk\fR command is part of the \fIGPT fdisk\fR package and is
available from Rod Smith.
