.\" Copyright 2011-2022 Roderick W. Smith (rodsmith@rodsbooks.com)
.\" May be distributed under the GNU General Public License
.TH "CGDISK" "8" "1.0.9" "Roderick W. Smith" "GPT fdisk Manual"
.SH "NAME"
cgdisk \- Curses-based GUID partition table (GPT) manipulator
.SH "SYNOPSIS"
.BI "cgdisk "
[ \-a ]
.I device

.SH "DESCRIPTION"

GPT fdisk is a text\-mode family of programs for creation and manipulation
of partition tables. The \fBcgdisk\fR member of this family employs a
curses-based user interface for interaction using a text\-mode menuing
system. 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. Other members of this
program family are \fBgdisk\fR (the most feature-rich program of the group,
with a non-curses-based interactive user interface) and \fBsgdisk\fR (which
is driven via command-line options for use by experts or in scripts).
FixParts is a related program for fixing a limited set of problems with MBR
disks.

For information on MBR vs. GPT, as well as GPT terminology and structure,
see the extended GPT fdisk documentation at
\fIhttps://www.rodsbooks.com/gdisk/\fR or consult Wikipedia.

The \fBcgdisk\fR program employs a user interface similar to that of Linux's
\fBcfdisk\fR, but \fBcgdisk\fR modifies GPT partitions. It also has the
capability of transforming MBR partitions or BSD disklabels into GPT
partitions. Like the original \fBcfdisk\fR program, \fBcgdisk\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 Quit option to leave
your partitions unmodified.

Ordinarily, \fBcgdisk\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; \fBcgdisk\fR cannot work on compressed or other advanced
disk image formats.

Upon start, \fBcgdisk\fR attempts to identify the partition type in use on
the disk. If it finds valid GPT data, \fBcgdisk\fR will use it. If
\fBcgdisk\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.) Upon exiting with the 'w' option,
\fBcgdisk\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 \fBcgdisk\fR on an MBR disk, you
can safely exit the program without making any changes by using the Quit
option.

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 (GPT fdisk internal code 0xEF00) formatted as FAT\-32.
The recommended size of this partition is between 100 and 300 MiB.
Boot\-related files are stored here. (Note that GNU Parted identifies
such partitions as having the "boot flag" set.)

.TP 
.B *
The GRUB 2 boot loader for BIOS\-based systems makes use of a \fIBIOS Boot
Partition\fR (GPT fdisk internal code 0xEF02), in which the secondary
boot loader is stored, without the benefit of a filesystem. This partition
can typically be quite small (roughly 32 KiB to 1 MiB), 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 (GPT fdisk
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"

.PP 

Only one command-line option is accepted, aside from the device filename:
\fI\-a\fR. This option alters the highlighting of partitions and blocks of
free space: Instead of using ncurses, when \fI\-a\fR is used \fBcgdisk\fR
uses a ">" symbol to the left of the selected partition or free space.
This option is intended for use on limited display devices such as
teletypes and screen readers.

Interactions with \fBcgdisk\fR occur with its interactive text\-mode menus.
The display is broken into two interactive parts:

.TP
.B *
The partition display area, in which partitions and gaps between them
(marked as "free space") are summarized.

.TP
.B *
The option selection area, in which buttons for the main options appear.

.PP

In addition, the top of the display shows the program's name and version
number, the device filename associated with the disk, and the disk's size
in both sectors and IEEE-1541 units (GiB, TiB, and so on).

You can use the following keys to move among the various options and to
select among them:

.TP
.B up arrow
This key moves the partition selection up by one partition.

.TP
.B down arrow
This key moves the partition selection down by one partition.

.TP
.B Page Up
This key moves the partition selection up by one screen.

.TP
.B Page Down
This key moves the partition selection down by one screen.

.TP
.B right arrow
This key moves the option selection to the right by one item.

.TP
.B left arrow
This key moves the option selection to the left by one item.

.TP
.B Enter
This key activates the currently selected option. You can also activate an
option by typing the capitalized letter in the option's name on the
keyboard, such as \fBa\fR to activate the Align option.

.PP

If more partitions exist than can be displayed in one screen, you can
scroll between screens using the partition selection keys, much as in a
text editor.

Available options are as described below. (Note that \fBcgdisk\fR provides
a much more limited set of options than its sibling \fBgdisk\fR. If you
need to perform partition table recovery, hybrid MBR modification, or other
advanced operations, you should consult the \fBgdisk\fR documentation.)

.TP 
.B Align
Change the sector alignment value. Disks with more logical sectors than
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.
The alignment value also affects the default end sector value when creating
a new partition; it will be aligned to one less than a multiple of the
alignment value, when possible. This should keep partitions a multiple of
the alignment value in size. Some disk encryption tools require partitions
to be sized to some value, typically 4096 bytes, so the default alignment of
1 MiB works well for them.

.TP 
.B Backup
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.

.TP 
.B Delete
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 Help
Print brief descriptions of all the options.

.TP 
.B Info
Show detailed partition information. The summary information shown in the
partition display area necessarily omits many details, such as the
partitions' unique GUIDs and the partitions' sector-exact start and end
points. The Info option displays this information for a single partition.

.TP 
.B Load
Load partition data from a backup file. This option is the reverse of the
Backup option. Note that restoring partition data from anything but the
original disk is not recommended.

.TP 
.B naMe
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. Note also that to activate this item by
typing its alphabetic equivalent, you must use \fBM\fR, not the more
obvious \fBN\fR, because the latter is used by the next option....

.TP 
.B New
Create a new partition. You enter a starting sector, a size, a type code,
and a name. The start sector can be specified in absolute terms as a sector
number or as a position 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 '+' symbol, as in \fI\fB+2G\fR\fR to specify a
point 2GiB after the default start sector. The size value can use the K, M,
G, T, and P suffixes, too. 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 full available size for the size.

.TP 
.B Quit
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 Type
Change a single partition's type code. You enter the type code using a
two\-byte hexadecimal number. You may also enter a GUID directly, if you
have one and \fBcgdisk\fR doesn't know it. If you don't know the type code
for your partition, you can type \fBL\fR to see a list of known type codes.
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\-insensitively.

.TP 
.B Verify
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
\fBgdisk\fR. If no problems are found, this command displays a summary of
unallocated disk space.

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

.SH "BUGS"

Known bugs and limitations include:

.TP 
.B *
The program compiles correctly only on Linux, FreeBSD, and Mac OS X. In
theory, it should compile under Windows if the Ncurses library for Windows
is installed, but I have not tested this capability. 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 has been tested by the author.

.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 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 in \fBgdisk\fR) 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 GPT fdisk.

.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 in \fBgdisk\fR) or abandoning GPT in favor of MBR may
be your only options in this case.

.TP
.B *
The \fBcgdisk\fR Verify function and the partition type listing obtainable
by typing \fIL\fR in the Type function (or when specifying a partition type
while creating a new partition) both currently exit ncurses mode. This
limitation is a minor cosmetic blemish that does not affect functionality.

.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 (das@teegra.net)

* Florian Zumbiehl (florz@florz.de)


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

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

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

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

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