Fdisk
util-linux fdisk 是基于命令行界面的分区表创建和编辑工具。一个硬盘需要分为一个或多个分区,这个信息在分区表里面记录。
本文介绍 fdisk(8) 和 sfdisk(8) 工具的使用。
安装[编辑 | 编辑源代码]
要使用 fdisk 及相关工具,请使用 util-linux包 软件包,这个软件包是 base包 的依赖。
显示分区[编辑 | 编辑源代码]
要列出块设备上的分区表和分区,可以运行以下命令,假设设备的名称为 /dev/sda
、/dev/nvme0n1
、/dev/mmcblk0
等:
# fdisk -l /dev/sda
/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”程序,您可以在其中键入命令。
创建新的分区表[编辑 | 编辑源代码]
- 分区前,请检查 NVMe 驱动器和高级格式硬盘驱动器是否使用最佳逻辑扇区大小。
- 在固态硬盘(SSD)上分区前应考虑执行 SSD 内存单元清理。
要创建一个新的分区表并清除当前所有的分区信息,请在提示符下输入 g
以新建一个 GUID 分区表(GPT)或输入 o
新建一个 MBR 分区表。若已创建所需的分区表,请跳过此步骤。
创建分区[编辑 | 编辑源代码]
使用 n
命令创建分区。需要输入 MBR 分区类型、分区号、起始扇区和结束扇区。
分区大小和位置的选择请参考 Partitioning#Partition scheme。
分区类型[编辑 | 编辑源代码]
使用 MBR 时,fdisk 会询问 MBR 分区的类型。输入 p
创建主分区,输入 e
创建扩展分区,最多可以创建四个主分区。
fdisk 默认不询问分区类型 ID,而是直接使用 'Linux filesystem',稍后可修改该 ID。
分区编号[编辑 | 编辑源代码]
分区编号是分区在磁盘中的编号,例如 磁盘 /dev/sda
的 1
号分区为 /dev/sda1
,对于 /dev/nvme0n1
是 /dev/nvme0n1p1
,而 /dev/mmcblk0
则是 /dev/mmcblk0p1
。有关命名方案的详细信息请参阅设备分区名。分区的编号可能不与磁盘上的分区顺序一致,请参考分区排序。
建议使用 fdisk 推荐的默认编号。
起始和结束扇区[编辑 | 编辑源代码]
起始扇区必须使用绝对扇区号。结束扇区可使用绝对扇区号或以这些单位指定:K
、M
、G
、T
或 P
。
结束扇区的位置可以是:
- 从磁盘起始位置开始的绝对位置。例如,
40M
作为起始扇区,指定了距磁盘开头 40 MiB 的位置。 - 在
+size
或-size
后接大小的相对位置。例如,使用+2G
以指定位于起始扇区之后 2 GiB 的位置,或使用-200M
以指定位于最后一个可用扇区之前 200 MiB 的位置。
未输入扇区位置的指定值而直接按 Enter
键将使用默认值,对于起始扇区是最大可用块的开始位置,对于结束扇区则是最大可用块的结束位置。
重复此过程,直到获得所需的分区。
修改分区类型[编辑 | 编辑源代码]
每个分区都有类型,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
将更改写入磁盘并退出程序。
移动分区[编辑 | 编辑源代码]
要移动分区,先要准备足够的空余磁盘空间。如果需要,可以缩小分区及文件系统,请参考 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
等使用分区编号的配置文件。