.\" Copyright 1992, 1993 Rickard E. Faith (faith@cs.unc.edu)
.\" Copyright 1998 Andries E. Brouwer (aeb@cwi.nl)
.\" Copyright 2012 Davidlohr Bueso <dave@gnu.org>
.\" Copyright (C) 2013 Karel Zak <kzak@redhat.com>
.\" May be distributed under the GNU General Public License
.TH FDISK 8 "February 2016" "util-linux" "System Administration"

.SH NAME
fdisk \- manipulate disk partition table

.SH SYNOPSIS
.B fdisk
[options]
.I device
.sp
.B fdisk \-l
.RI [ device ...]

.SH DESCRIPTION
.B fdisk
is a dialog-driven program for creation and manipulation of partition tables.
It understands GPT, MBR, Sun, SGI and BSD partition tables.

Block devices can be divided into one or more logical disks called
.IR partitions .
This division is recorded in the
.IR "partition table" ,
usually found in sector 0 of the disk.
(In the BSD world one talks about `disk slices' and a `disklabel'.)

All partitioning is driven by device I/O limits (the topology) by default.
.B fdisk
is able to optimize the disk layout for a 4K-sector size and use an alignment offset on
modern devices for MBR and GPT.  It is always a good idea to follow \fBfdisk\fR's defaults
as the default values (e.g. first and last partition sectors) and partition
sizes specified by the +<size>{M,G,...} notation are always aligned according
to the device properties.

Note that
.BR partx (8)
provides a rich interface for scripts to print disk layouts,
.B fdisk
is mostly designed for humans.  Backward compatibility in the output of
.B fdisk
is not guaranteed.  The input (the commands) should always be backward compatible.

.SH OPTIONS
.TP
\fB\-b\fR, \fB\-\-sector\-size\fR \fIsectorsize\fP
Specify the sector size of the disk.  Valid values are 512, 1024, 2048, and 4096.
(Recent kernels know the sector size.  Use this option only on old kernels or
to override the kernel's ideas.)  Since util-linux-2.17, \fBfdisk\fR differentiates
between logical and physical sector size.  This option changes both sector sizes to
.IB sectorsize .
.TP
\fB\-B\fR, \fB\-\-protect\-boot\fP
Don't erase the begin of the first disk sector when create a new disk label.  This
feature is supported for GPT and MBR.
.TP
\fB\-c\fR, \fB\-\-compatibility\fR[=\fImode\fR]
Specify the compatibility mode, 'dos' or 'nondos'.  The default is non-DOS
mode.  For backward compatibility, it is possible to use the option without
the \fImode\fR argument -- then the default is used.  Note that the optional
\fImode\fR argument cannot be separated from the \fB-c\fR option by a space,
the correct form is for example '-c=dos'.
.TP
\fB\-h\fR, \fB\-\-help\fR
Display a help text and exit.
.TP
\fB\-L\fR, \fB\-\-color\fR[=\fIwhen\fR]
Colorize the output.  The optional argument \fIwhen\fP
can be \fBauto\fR, \fBnever\fR or \fBalways\fR.  If the \fIwhen\fR argument is omitted,
it defaults to \fBauto\fR.  The colors can be disabled; for the current built-in default
see the \fB\-\-help\fR output.  See also the \fBCOLORS\fR section.
.TP
\fB\-l\fR, \fB\-\-list\fR
List the partition tables for the specified devices and then exit.
If no devices are given, those mentioned in
.I /proc/partitions
(if that file exists) are used.
.TP
.BR \-o , " \-\-output " \fIlist\fP
Specify which output columns to print.  Use
.B \-\-help
to get a list of all supported columns.

The default list of columns may be extended if \fIlist\fP is
specified in the format \fI+list\fP (e.g. \fB-o +UUID\fP).
.TP
\fB\-s\fR, \fB\-\-getsz\fR
Print the size in 512-byte sectors of each given block device.  This option is DEPRECATED
in favour of
.BR blockdev (1).
.TP
\fB\-t\fR, \fB\-\-type\fR \fItype\fR
Enable support only for disklabels of the specified \fItype\fP, and disable
support for all other types.
.TP
\fB\-u\fR, \fB\-\-units\fR[=\fIunit\fR]
When listing partition tables, show sizes in 'sectors' or in 'cylinders'.  The
default is to show sizes in sectors.  For backward compatibility, it is possible
to use the option without the \fIunit\fR argument -- then the default is used.
Note that the optional \fIunit\fR argument cannot be separated from the \fB-u\fR
option by a space, the correct form is for example '-u=cylinders'.

.TP
\fB\-C\fR, \fB\-\-cylinders\fR \fInumber\fR
Specify the number of cylinders of the disk.
I have no idea why anybody would want to do so.
.TP
\fB\-H\fR, \fB\-\-heads\fR \fInumber\fR
Specify the number of heads of the disk.  (Not the physical number,
of course, but the number used for partition tables.)
Reasonable values are 255 and 16.
.TP
\fB\-S\fR, \fB\-\-sectors\fR \fInumber\fR
Specify the number of sectors per track of the disk.
(Not the physical number, of course, but the number used for
partition tables.) A reasonable value is 63.

.TP
\fB\-w\fR, \fB\-\-wipe\fR \fIwhen\fR
Wipe filesystem, RAID and partition-table signatures from the device, in order
to avoid possible collisions.  The argument \fIwhen\fR can be \fBauto\fR,
\fBnever\fR or \fBalways\fR.  When this option is not given, the default is
\fBauto\fR, in which case signatures are wiped only when in interactive mode.
In all cases detected signatures are reported by warning messages
before a new partition table is created.  See also
.BR wipefs (8)
command.

.TP
\fB\-W\fR, \fB\-\-wipe-partition\fR \fIwhen\fR
Wipe filesystem, RAID and partition-table signatures from a newly created
partitions, in order to avoid possible collisions.  The argument \fIwhen\fR can
be \fBauto\fR, \fBnever\fR or \fBalways\fR.  When this option is not given, the
default is \fBauto\fR, in which case signatures are wiped only when in
interactive mode and after confirmation by user.  In all cases detected
signatures are reported by warning messages before a new partition is
created.  See also
.BR wipefs (8)
command.

.TP
\fB\-V\fR, \fB\-\-version\fR
Display version information and exit.

.SH DEVICES
The
.I device
is usually /dev/sda, /dev/sdb or so.  A device name refers to the entire disk.
Old systems without libata (a library used inside the Linux kernel to support
ATA host controllers and devices) make a difference between IDE and SCSI disks.
In such cases the device name will be /dev/hd* (IDE) or /dev/sd* (SCSI).

The
.I partition
is a device name followed by a partition number.  For example, /dev/sda1 is the
first partition on the first hard disk in the system.  See also Linux kernel
documentation (the Documentation/devices.txt file).

.SH SIZES
The "last sector" dialog accepts partition size specified by number of sectors
or by +<size>{K,B,M,G,...} notation. 

If the size is prefixed by  '+' then it is interpreted as relative to the
partition first sector. In this case the size is expected in bytes and the
number may be followed by the multiplicative suffixes KiB=1024, MiB=1024*1024,
and so on for GiB, TiB, PiB, EiB, ZiB and YiB. The "iB" is optional, e.g. "K"
has the same meaning as "KiB". 

The relative sizes are always aligned according to device I/O limits.  The
+<size>{K,B,M,G,...} notation is recommended.

For backward compatibility fdisk also accepts the suffixes KB=1000,
MB=1000*1000, and so on for GB, TB, PB, EB, ZB and YB. These 10^N suffixes
are deprecated.

.SH SCRIPT FILES
.B fdisk
allows to read (by 'I' command) sfdisk compatible script files. The script is
applied to in-memory partition table, and then it is possible to modify the
partition table before you write it to the device.
.PP
And vice-versa it is possible to write the current in-memory disk layout
to the script file by command 'O'.
.PP
The script files are compatible between cfdisk, sfdisk, fdisk and another
libfdisk applications. For more details see
.BR sfdisk (8).

.SH DISK LABELS
.B GPT (GUID Partition Table)
.RS
GPT is modern standard for the layout of the partition table.  GPT uses 64-bit
logical block addresses, checksums, UUIDs and names for partitions and an
unlimited number of partitions (although the number of partitions is
usually restricted to 128 in many partitioning tools).

Note that the first sector is still reserved for a
.B protective MBR
in the GPT specification.  It prevents MBR-only partitioning tools
from mis-recognizing and overwriting GPT disks.

GPT is always a better choice than MBR, especially on modern hardware with a UEFI
boot loader.
.RE

.B DOS-type (MBR)
.RS
A DOS-type partition table can describe an unlimited number of partitions.  In sector 0
there is room for the description of 4 partitions (called `primary').  One of
these may be an extended partition; this is a box holding logical partitions,
with descriptors found in a linked list of sectors, each preceding the
corresponding logical partitions.  The four primary partitions, present or not,
get numbers 1-4.  Logical partitions are numbered starting from 5.

In a DOS-type partition table the starting offset and the size of each
partition is stored in two ways: as an absolute number of sectors (given in 32
bits), and as a
.B Cylinders/Heads/Sectors
triple (given in 10+8+6 bits).  The former is OK -- with 512-byte sectors this
will work up to 2 TB.  The latter has two problems.  First, these C/H/S fields
can be filled only when the number of heads and the number of sectors per track
are known.  And second, even if we know what these numbers should be, the 24
bits that are available do not suffice.  DOS uses C/H/S only, Windows uses
both, Linux never uses C/H/S.  The
.B C/H/S addressing is deprecated
and may be unsupported in some later fdisk version.

.B Please, read the DOS-mode section if you want DOS-compatible partitions.
.B fdisk
does not care about cylinder boundaries by default.
.RE

.B BSD/Sun-type
.RS
A BSD/Sun disklabel can describe 8 partitions, the third of which should be a `whole
disk' partition.  Do not start a partition that actually uses its first sector
(like a swap partition) at cylinder 0, since that will destroy the disklabel.
Note that a
.B BSD label
is usually nested within a DOS partition.
.RE

.B IRIX/SGI-type
.RS
An IRIX/SGI disklabel can describe 16 partitions, the eleventh of which should be an entire
`volume' partition, while the ninth should be labeled `volume header'.  The
volume header will also cover the partition table, i.e., it starts at block
zero and extends by default over five cylinders.  The remaining space in the
volume header may be used by header directory entries.  No partitions may
overlap with the volume header.  Also do not change its type or make some
filesystem on it, since you will lose the partition table.  Use this type of
label only when working with Linux on IRIX/SGI machines or IRIX/SGI disks under
Linux.
.RE

A sync() and an ioctl(BLKRRPART) (rereading the partition table from disk)
are performed before exiting when the partition table has been updated.

.SH "DOS mode and DOS 6.x WARNING"
.B Note that all this is deprecated.  You don't have to care about things like
.B geometry and cylinders on modern operating systems.  If you really want
.B DOS-compatible partitioning then you have to enable DOS mode and cylinder
.B units by using the '-c=dos -u=cylinders' fdisk command-line options.

The DOS 6.x FORMAT command looks for some information in the first sector of
the data area of the partition, and treats this information as more reliable
than the information in the partition table.  DOS FORMAT expects DOS FDISK to
clear the first 512 bytes of the data area of a partition whenever a size
change occurs.  DOS FORMAT will look at this extra information even if the /U
flag is given -- we consider this a bug in DOS FORMAT and DOS FDISK.

The bottom line is that if you use \fBfdisk\fR or \fBcfdisk\fR to change the
size of a DOS partition table entry, then you must also use
.BR dd "(1) to " "zero the first 512 bytes"
of that partition before using DOS FORMAT to format the partition.  For
example, if you were using \fBfdisk\fR to make a DOS partition table entry for
/dev/sda1, then (after exiting \fBfdisk\fR and rebooting Linux so that the
partition table information is valid) you would use the command "dd
if=/dev/zero of=/dev/sda1 bs=512 count=1" to zero the first 512 bytes of the
partition.

.B fdisk
usually obtains the disk geometry automatically.  This is not necessarily the
physical disk geometry (indeed, modern disks do not really have anything like a
physical geometry, certainly not something that can be described in the simplistic
Cylinders/Heads/Sectors form), but it is the disk geometry that MS-DOS uses for
the partition table.

Usually all goes well by default, and there are no problems if Linux is the
only system on the disk.  However, if the disk has to be shared with other
operating systems, it is often a good idea to let an fdisk from another
operating system make at least one partition.  When Linux boots it looks at the
partition table, and tries to deduce what (fake) geometry is required for good
cooperation with other systems.

Whenever a partition table is printed out in DOS mode, a consistency check is
performed on the partition table entries.  This check verifies that the
physical and logical start and end points are identical, and that each
partition starts and ends on a cylinder boundary (except for the first
partition).

Some versions of MS-DOS create a first partition which does not begin
on a cylinder boundary, but on sector 2 of the first cylinder.
Partitions beginning in cylinder 1 cannot begin on a cylinder boundary, but
this is unlikely to cause difficulty unless you have OS/2 on your machine.

For best results, you should always use an OS-specific partition table
program.  For example, you should make DOS partitions with the DOS FDISK
program and Linux partitions with the Linux fdisk or Linux cfdisk programs.
.SH COLORS
Implicit coloring can be disabled by an empty file \fI/etc/terminal-colors.d/fdisk.disable\fR.

See
.BR terminal-colors.d (5)
for more details about colorization configuration. The logical color names
supported by
.B fdisk
are:
.TP
.B header
The header of the output tables.
.TP
.B help-title
The help section titles.
.TP
.B warn
The warning messages.
.TP
.B welcome
The welcome message.

.SH AUTHORS
.MT kzak@redhat.com
Karel Zak
.ME
.br
.MT dave@gnu.org
Davidlohr Bueso
.ME
.br
.PP
The original version was written by
Andries E. Brouwer, A. V. Le Blanc and others.

.SH ENVIRONMENT
.IP FDISK_DEBUG=all
enables fdisk debug output.
.IP LIBFDISK_DEBUG=all
enables libfdisk debug output.
.IP LIBBLKID_DEBUG=all
enables libblkid debug output.
.IP LIBSMARTCOLS_DEBUG=all
enables libsmartcols debug output.
.IP LIBSMARTCOLS_DEBUG_PADDING=on
use visible padding characters. Requires enabled LIBSMARTCOLS_DEBUG.

.SH "SEE ALSO"
.BR cfdisk (8),
.BR mkfs (8),
.BR partx (8),
.BR sfdisk (8)

.SH AVAILABILITY
The fdisk command is part of the util-linux package and is available from
https://www.kernel.org/pub/linux/utils/util-linux/.
