「fdisk」-

操作硬盘分区表

命令语法格式

fdisk [options] device

fdisk -l [device…]

命令描述

命令fdisk是一个由对话框驱动的程序,用于创建和操作分区表。它可以理解GPT、MBR、Sun、SGI、BSD分区表。

块设备可以分为一个或多个称为分区的逻辑磁盘。此划分记录在“分区表”中,通常位于磁盘的“扇区零”中。 (在BSD世界中,人们谈论的是“磁盘片”(disk slice)和“磁盘标签”(disklabel))

默认情况下,所有分区都由设备I/O限制(拓扑)驱动。命令fdisk能够针对4K扇区大小优化磁盘布局,并在现代设备上使用MBR和GPT的对齐偏移。将fdisk的默认值作为默认值始终是一个好主意(例如,第一个和最后一个分区扇区),并且“+<size>{M,G,…}表示法”指定的分区大小始终是根据设备属性进行对齐 。

请注意,partx(8)为脚本提供了丰富的界面来打印磁盘布局,而fdisk主要是为人类设计的。不保证fdisk输出的向后兼容性。输入(命令)应始终向后兼容。

命令行选项

-b, –sector-size sectorsize
指定磁盘的扇区大小。有效值为512,1024,2048,4096.(最近的内核版本知道扇区大小。仅在旧内核上使用此选项,或者覆盖内核的想法。)自util-linux-2.17起,fdisk区分逻辑扇区和物理扇区大小。 此选项将扇区大小更改为sectorsize。

-B, –protect-boot
创建新磁盘标签时,请勿擦除第一个磁盘扇区的开头。为GPT和MBR支持此功能。

-c, –compatibility[=mode]
指定兼容模式,’dos’或’nondos’。默认为非DOS模式。 为了向后兼容,可以使用不带mode参数的选项,此时使用默认值。 请注意,可选mode参数不能通过空格与-c选项分隔,正确的形式例如是“-c=dos”。

-L, –color[=when]
着色输出。 可选参数何时可以是auto,never,always。 如果省略when参数,则默认为auto。 颜色可以禁用;对于当前内置的默认值,请参阅–help输出。 另请参阅「颜色」部分。

-l, –list
列出指定设备device的分区表,然后退出。 如果没有给出设备,则使用/proc/partitions中提到的那些设备(如果该文件存在)。

-o, –output list
指定要打印的输出列。 使用–help获取所有支持列的列表。

如果以格式+list(例如-o +UUID)指定列表,则可以扩展默认列的列表。

-s, –getsz
在每个给定块设备的512字节扇区中打印大小。不赞成此选项,支持blockdev(1)命令。

-t, –type type
仅支持指定类型的磁盘标签,并禁用对所有其他类型的支持。

-u, –units[=unit]
列出分区表时,在“sectors”或“cylinders”中显示大小。 默认设置是显示扇区中的大小。 为了向后兼容,可以使用不带unit参数的选项,此时使用默认值。 请注意,可选的unit参数不能通过空格与-u选项分隔,正确的形式例如是’-u=cylinders’。

-C, –cylinders number
指定磁盘的柱面数。 我不知道为什么有人会这样做。

-H, –heads number
指定磁盘的磁头数。 (当然,不是物理编号,而是用于分区表的编号。)合理的值为255和16。

-S, –sectors number
指定磁盘每个磁道的扇区数。 (当然不是物理编号,而是用于分区表的编号。)合理的值是63。

-w, –wipe when
从设备擦除文件系统、RAID、分区表签名,以避免可能的冲突。参数when可以是auto, never, always。 如果未指定此选项,则默认为auto,在这种情况下,仅在交互模式下才会擦除签名。在所有情况下,在创建新分区表之前,警告消息会报告检测到的签名。 另请参见wipefs(8)命令。

-W, –wipe-partition when
从新创建的分区擦除文件系统、RAID、分区表签名,以避免可能的冲突。参数when可以是auto, never, always。如果未指定此选项,则默认为auto,在这种情况下,仅在交互模式下和用户确认后才会擦除签名。 在所有情况下,在创建新分区之前,警告消息会报告检测到的签名。 另请参见wipefs(8)命令。

-V, –version
显示版本信息并退出。

-h, –help
显示帮助信息并退出。

命令行参数

DEVICES
该设备通常是/dev/sda,/dev/sdb之类。设备名称是指整个磁盘。没有libata库的旧系统(在Linux内核中用于支持ATA主机控制器和设备的库)在IDE和SCSI磁盘之间产生差异。 在这种情况下,设备名称将是//dev/hd* (IDE)或/dev/sd* (SCSI)。

分区是设备名称,后跟分区号。 例如,/dev/sda1是系统中第一个硬盘上的第一个分区。 另请参阅Linux内核文档(Documentation/devices.txt文件)。

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.

SCRIPT FILES

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.

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, sfdisk, fdisk and another 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() 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 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 programs.

彩色化输出

可以通过空的/etc/terminal-colors.d/fdisk.disable来禁用隐式着色。

由fdisk支持的逻辑颜色名称为:

header

The header of the output tables.

help-title

The help section titles.

warn

The warning messages.

welcome

The welcome message.

有关着色配置的更多详细信息,请参阅terminal-colors.d(5)手册。

相关环境变量

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. Requires enabled LIBSMARTCOLS_DEBUG.

相关手册

cfdisk(8), mkfs(8), partx(8), sfdisk(8)

参考文献

  • man 8 fdisk, Version 2.32-0.1

更新日志

  • 08/14/2018 创建文章