# fdisk

## NAME



           fdisk - manipulate disk partition table
    


## SYNOPSIS



           **fdisk**[options] _device_
    
           **fdisk -l**[_device_...]
    


## DESCRIPTION



           **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
           _partitions_. This division is recorded in the _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. **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 **fdisk** '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.
    
           CHS (Cylinder-Head-Sector) addressing is deprecated and not used
           by default. Please, do not follow old articles and recommendations
           with **fdisk -S <n> -H <n> **advice for SSD or 4K-sector devices.
    
           Note that partx(8) provides a rich interface for scripts to print
           disk layouts, **fdisk** is mostly designed for humans. Backward
           compatibility in the output of **fdisk** is not guaranteed. The input
           (the commands) should always be backward compatible.
    


## OPTIONS



           **-b** , **--sector-size** _sectorsize_
               Specify the sector size of the disk. Valid values are 512,
               1024, 2048, and 4096. The kernel is aware of the sector size
               for regular block devices. Use this option only on very old
               kernels, when working with disk images, or to override the
               kernel’s default sector size. Since util-linux-2.17, **fdisk**
               distinguishes between logical and physical sector size. This
               option changes both sector sizes to the specified _sectorsize_.
    
           **-B** , **--protect-boot**
               Don’t erase the beginning of the first disk sector when
               creating a new disk label. This feature is supported for GPT
               and MBR.
    
           **-c** , **--compatibility**[**=**_mode_]
               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 _mode_ argument — then the default is
               used. Note that the optional _mode_ argument cannot be separated
               from the **-c** option by a space, the correct form is for example
               **-c** =_dos_.
    
           **-L** , **--color**[**=**_when_]
               Colorize the output. The optional argument _when_ can be **auto** ,
               **never** or **always**. If the _when_ argument is omitted, it defaults
               to **auto**. The colors can be disabled; for the current built-in
               default see the **--help** output. See also the **COLORS** section.
    
           **-l** , **--list**
               List the partition tables for the specified devices and then
               exit.
    
               If no devices are given, the devices mentioned in
               _/proc/partitions_ (if this file exists) are used. Devices are
               always listed in the order in which they are specified on the
               command-line, or by the kernel listed in _/proc/partitions_.
    
           **-x** , **--list-details**
               Like **--list** , but provides more details.
    
           **--lock**[**=**_mode_]
               Use an exclusive BSD lock for the device or file that is
               operated upon. The optional argument _mode_ can be **yes**(**1**), **no**
               (**0**), or **nonblock**. If the _mode_ argument is omitted, it defaults
               to **yes**. This option overrides the environment variable
               **$LOCK_BLOCK_DEVICE**. The default is to not use any lock at all,
               but using a lock is recommended to avoid collisions with
               systemd-udevd(8) or other tools.
    
           **-n** , **--noauto-pt**
               Don’t automatically create a default partition table on empty
               device. The partition table has to be explicitly created by
               user (by command like 'o', 'g', etc.).
    
           **-o** , **--output** _list_
               Specify which output columns to print. Use **--help** to get a
               list of all supported columns.
    
               The default list of columns may be extended if _list_ is
               specified in the format _+list_ (e.g., **-o +UUID**).
    
           **-s** , **--getsz**
               Print the size in 512-byte sectors of each given block device.
               This option is DEPRECATED in favour of blockdev(8).
    
           **-t** , **--type** _type_
               Enable support only for disklabels of the specified _type_ , and
               disable support for all other types.
    
           **-u** , **--units**[**=**_unit_]
               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 _unit_ argument — then the default is used. Note
               that the optional _unit_ argument cannot be separated from the
               **-u** option by a space, the correct form is for example
               '**-u=**_cylinders_ '.
    
           **-C** , **--cylinders** _number_
               Specify the _number_ of cylinders of the disk. I have no idea
               why anybody would want to do so.
    
           **-H** , **--heads** _number_
               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.
    
           **-S** , **--sectors** _number_
               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.
    
           **-w** , **--wipe** _when_
               Wipe filesystem, RAID and partition-table signatures from the
               device, in order to avoid possible collisions. The argument
               _when_ can be **auto** , **never** or **always**. When this option is not
               given, the default is **auto** , 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 wipefs(8) command.
    
           **-W** , **--wipe-partitions** _when_
               Wipe filesystem, RAID and partition-table signatures from a
               newly created partitions, in order to avoid possible
               collisions. The argument _when_ can be **auto** , **never** or **always**.
               When this option is not given, the default is **auto** , 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 wipefs(8) command.
    
           **-h** , **--help**
               Display help text and exit.
    
           **-V** , **--version**
               Display version and exit.
    


## DEVICES



           The _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 _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/admin-guide/devices.txt_ file).
    


## 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. If the size is prefixed by '-' then
           it is interpreted as relative to the high limit (last available
           sector for the partition).
    
           In the case the size is specified in bytes, then the number may be
           followed by the multiplicative suffixes KiB (1024 bytes), MiB
           (1024*1024 bytes), 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 if specified with multiplicative suffixes (e.g.
           +100MiB) are always aligned according to device I/O limits. The
           +/-<size>{K,B,M,G,...} notation is recommended.
    
           The last sector of the partition is strictly calculated as <start>
           + <size> (without -1) if the size is specified by the +<sectors>
           notation. In this case, the size is not aligned to the device I/O
           limits.
    
           For backward compatibility **fdisk** also accepts the suffixes KB
           (1000 bytes), MB (1000*1000 bytes), and so on for GB, TB, PB, EB,
           ZB and YB. These 10^N suffixes are deprecated.
    


## SCRIPT FILES



           **fdisk** allows reading (by 'I' command) sfdisk(8) 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.
    
           And vice-versa it is possible to write the current in-memory disk
           layout to the script file by command 'O'.
    
           The script files are compatible between cfdisk(8), sfdisk(8),
           **fdisk** and other libfdisk applications. For more details see
           sfdisk(8).
    


## DISK LABELS



           **GPT (GUID Partition Table)**
               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 **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.
    
           **DOS-type (MBR)**
               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
               **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 **C/H/S addressing is deprecated** and may be
               unsupported in some later **fdisk** version.
    
               **Please, read the DOS-mode section if you want DOS-compatible**
               **partitions. fdisk** does not care about cylinder boundaries by
               default.
    
           **BSD/Sun-type**
               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 **BSD label** is usually nested within a
               DOS partition.
    
           **IRIX/SGI-type**
               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.
    
               A sync(2) and an ioctl(BLKRRPART) (rereading the partition
               table from disk) are performed before exiting when the
               partition table has been updated.
    


## DOS MODE AND DOS 6.X WARNING



           **Note that all this is deprecated. You don’t have to care about**
           **things like geometry and cylinders on modern operating systems. If**
           **you really want DOS-compatible partitioning then you have to**
           **enable DOS mode and cylinder 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 **fdisk** or cfdisk(8) to change
           the size of a DOS partition table entry, then you must also use
           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
           **fdisk** to make a DOS partition table entry for _/dev/sda1_ , then
           (after exiting **fdisk** 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.
    
           **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(8) programs.
    


## COLORS



           The output colorization is implemented by terminal-colors.d(5)
           functionality. Implicit coloring can be disabled by an empty file
    
              _/etc/terminal-colors.d/fdisk.disable_
    
           for the **fdisk** command or for all tools by
    
              _/etc/terminal-colors.d/disable_
    
           Since version 2.41, the $NO_COLOR environment variable is also
           supported to disable output colorization unless explicitly enabled
           by a command-line option.
    
           The user-specific _$XDG_CONFIG_HOME/terminal-colors.d_ or
           _$HOME/.config/terminal-colors.d_ overrides the global setting.
    
           Note that the output colorization may be enabled by default, and
           in this case _terminal-colors.d_ directories do not have to exist
           yet.
    
           The logical color names supported by **fdisk** are:
    
           **header**
               The header of the output tables.
    
           **help-title**
               The help section titles.
    
           **warn**
               The warning messages.
    
           **welcome**
               The welcome message.
    


## ENVIRONMENT



           **FDISK_DEBUG** =all
               enables fdisk debug output.
    
           **LIBFDISK_DEBUG** =all
               enables libfdisk debug output.
    
           **LIBBLKID_DEBUG** =all
               enables libblkid debug output.
    
           **LIBSMARTCOLS_DEBUG** =all
               enables libsmartcols debug output.
    
           **LIBSMARTCOLS_DEBUG_PADDING** =on
               use visible padding characters.
    
           **LOCK_BLOCK_DEVICE** =<mode>
               use exclusive BSD lock. The mode is "1" or "0". See **--lock** for
               more details.
    


## AVAILABILITY



           The **fdisk** command is part of the util-linux package which can be
           downloaded from Linux Kernel Archive
           <https://www.kernel.org/pub/linux/utils/util-linux/>. This page is
           part of the _util-linux_ (a random collection of Linux utilities)
           project. Information about the project can be found at 
           ⟨https://www.kernel.org/pub/linux/utils/util-linux/⟩. If you have a
           bug report for this manual page, send it to
           util-linux@vger.kernel.org. This page was obtained from the
           project's upstream Git repository
           ⟨git://git.kernel.org/pub/scm/utils/util-linux/util-linux.git⟩ on
           2025-08-11. (At that time, the date of the most recent commit that
           was found in the repository was 2025-08-05.) If you discover any
           rendering problems in this HTML version of the page, or you
           believe there is a better or more up-to-date source for the page,
           or you have corrections or improvements to the information in this
           COLOPHON (which is _not_ part of the original manual page), send a
           mail to man-pages@man7.org
    
    util-linux 2.42-start-521-ec46  2025-08-09                       _FDISK_(8)
    


* * *