Fdisk

来自 Arch Linux 中文维基

util-linux fdisk 是基于命令行界面的分区表创建和编辑工具。一个硬盘需要分为一个或多个分区,这个信息在分区表里面记录。

本文介绍 fdisk(8)sfdisk(8) 工具的使用。

注意:util-linux的2.23版本起,fdisk已支持GPT[1]或者,也可以使用gptfdisk。详情见gdisk
提示:cfdisk(8) 工具提供了基本的功能和 curses 文本界面。

安装[编辑 | 编辑源代码]

要使用 fdisk 及相关工具,请使用 util-linux 软件包,这个软件包是 base 的依赖。

显示分区[编辑 | 编辑源代码]

要列出块设备上的分区表和分区,可以运行以下命令,假设设备的名称为 /dev/sda/dev/nvme0n1/dev/mmcblk0 等:

# fdisk -l /dev/sda
注意: 如果未指定设备,“fdisk”将列出 /proc/partitions中的所有分区.

备份和恢复分区[编辑 | 编辑源代码]

在对硬盘做出更改之前,您可能需要备份驱动器的分区表和分区方案。您还可以使用备份将同一分区布局复制到多个驱动器上。

对于GPT和MBR,您可以使用“sfdisk”将设备的分区布局保存到具有-d/--dump 选项的文件中. 对设备 /dev/sda运行以下命令:

# sfdisk -d /dev/sda > sda.dump

对于大小为1 GiB的单个ext4分区,该文件应如下所示:

sda.dump
label: gpt
label-id: AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE
device: /dev/sda
unit: sectors
first-lba: 34
last-lba: 1048576
sector-size: 512

/dev/sda1 : start=2048, size=1048576, type=0FC63DAF-8483-4772-8E79-3D69D8477DE4, uuid=BBF1CD36-9262-463E-A4FB-81E32C12BDE7

要稍后恢复此布局,可以运行:

# sfdisk /dev/sda < sda.dump

创建分区表和分区[编辑 | 编辑源代码]

磁盘 partitioning 的第一步是创建分区表. 然后, 根据所需的 partition scheme 创建实际分区.参见 partition table 一文来帮助你选择使用 MBR 或是 GPT.

在开始之前,您可能希望 backup 您当前的分区表和方案.

fdisk在 2048 个 512 字节扇区 (1 MiB) 块大小基础上自动进行分区对齐,这应该与所有使用 Advanced Format 的HDD和绝大多数 SSD 兼容。 这意味着默认设置会自动使用正确的对齐方式。

为了使用 fdisk, 带上你想要更改/编辑的 block device 的名字,运行程序。在本例中我们使用 /dev/sda:

# fdisk /dev/sda

这将启动“fdisk”程序,您可以在其中键入命令。

创建新的分区表[编辑 | 编辑源代码]

警告: 如果在存有数据的磁盘上创建新分区表,它将擦除磁盘上的所有数据。请务必确保这是你想要做的
提示:

要创建一个新的分区表并清除当前所有的分区信息,请在提示符下输入 g 以新建一个 GUID 分区表(GPT)或输入 o 新建一个 MBR 分区表。若已创建所需的分区表,请跳过此步骤。

创建分区[编辑 | 编辑源代码]

使用 n 命令创建分区。需要输入 MBR 分区类型、分区号、起始扇区和结束扇区。

分区大小和位置的选择请参考 Partitioning#Partition scheme

分区类型[编辑 | 编辑源代码]

使用 MBR 时,fdisk 会询问 MBR 分区的类型。输入 p 创建主分区,输入 e 创建扩展分区,最多可以创建四个主分区。

fdisk 默认不询问分区类型 ID,而是直接使用 'Linux filesystem',稍后可修改该 ID。

分区编号[编辑 | 编辑源代码]

分区编号是分区在磁盘中的编号,例如 磁盘 /dev/sda1 号分区为 /dev/sda1,对于 /dev/nvme0n1/dev/nvme0n1p1,而 /dev/mmcblk0 则是 /dev/mmcblk0p1。有关命名方案的详细信息请参阅设备分区名。分区的编号可能不与磁盘上的分区顺序一致,请参考分区排序

建议使用 fdisk 推荐的默认编号。

起始和结束扇区[编辑 | 编辑源代码]

起始扇区必须使用绝对扇区号。结束扇区可使用绝对扇区号或以这些单位指定:KMGTP

结束扇区的位置可以是:

  • 从磁盘起始位置开始的绝对位置。例如,40M 作为起始扇区,指定了距磁盘开头 40 MiB 的位置。
  • +size-size 后接大小的相对位置。例如,使用 +2G 以指定位于起始扇区之后 2 GiB 的位置,或使用 -200M 以指定位于最后一个可用扇区之前 200 MiB 的位置。

未输入扇区位置的指定值而直接按 Enter 键将使用默认值,对于起始扇区是最大可用块的开始位置,对于结束扇区则是最大可用块的结束位置。

注意:
  • 分区时,使用起始分区的默认值总是个不错的选择。此外,确保指定分区大小时使用 +size{M,G,T,P} ,不要使用小于 1 MiB 的大小。此类分区始终根据设备属性对齐。
  • EFI 系统分区 需要 EFI System 的分区类型。
  • 将 GRUB 安装到基于 BIOS 系统的 GPT 分区的设备上时,GRUB 需要一个 BIOS boot 类型的 BIOS 启动分区
提示:在使用 MBR 分区表的磁盘上,在磁盘末尾保留至少 33 个 512 字节扇区大小(16.5 KiB)的未分区空间以便在 MBR 与 GPT 分区表之间转换

重复此过程,直到获得所需的分区。

修改分区类型[编辑 | 编辑源代码]

每个分区都有类型,MBR 使用分区 ID 进行定义; GPT 使用分区类型 GUID 进行定义。

t 修改分区类型,默认是 Linux filesystem,正常情况下都无需修改。

提示:
  • L 可以显示 fdisk 的内部码表。
  • 由于 systemd-gpt-auto-generator 会自动挂载 GPT 分区,因此在使用 GPT 分区时,建议遵循 可侦测分区标准。例如,为根分区使用 Linux root (x86-64)、为交换分区(swap)使用 Linux swap、为 home 分区使用 Linux home,以此类推。

设置分区启动位[编辑 | 编辑源代码]

a 可以将一个 MBR 分区设置为可启动分区。

检查分区表更改[编辑 | 编辑源代码]

  • 使用 p 显示更改内容。
  • 使用 q 放弃更改。
  • 使用 w 将更改写入磁盘并退出程序。

移动分区[编辑 | 编辑源代码]

警告: 因为移动分区时需要重写全部的分区数据,所以要移动的分区必须先下线。移动分区的动作很慢且存在风险,强烈建议操作前进行备份。sfdisk(8) § OPTIONS 手册中有说明: "这个操作存在风险而且是非原子操作。"

要移动分区,先要准备足够的空余磁盘空间。如果需要,可以缩小分区及文件系统,请参考 Parted#Shrinking partitions。要移动分区:

# echo '+sectors,' | sfdisk --move-data device -N number

其中 sectors 是要偏移的扇区数,+ 表示增加, device 是分区所在设备,number 是分区编号。如果在磁盘的开始或中间增加了分区,想重新编号,可以参考 #分区排序fdisk 的 "额外功能" 模式。

提示和技巧[编辑 | 编辑源代码]

分区排序[编辑 | 编辑源代码]

这适用于在两个分区之间的空间中创建新分区或删除分区的情况。本例中使用了/dev/sda .

# sfdisk -r /dev/sda

在调整分区顺序后,如果没有使用 Persistent block device naming,需要调整 /etc/fstab/etc/crypttab 等使用分区编号的配置文件。

注意: 内核必须要读取新分区表,/dev/sda1需要是可访问状态,重启系统或让内核 重新读取分区表(执行partprobe /dev/sda)。

另见[编辑 | 编辑源代码]