GPT fdisk
GPT fdisk—由 gdisk、cgdisk、sgdisk 和 fixparts 程序组成—是由 Rod Smith 制作的一套文本模式分区工具。它们适用于全局唯一标识符 (GUID) 分区表 (GPT) 磁盘,而不是较旧的(曾经更常见的)主引导记录 (MBR) 分区表。
gdisk、cgdisk 和 sgdisk 都具有相同的功能,但提供不同的用户界面。gdisk 是文本模式交互式的,sgdisk 是命令行式的,而 cgdisk 具有基于 curses 的界面。本文涵盖了 gdisk(8) 和 sgdisk(8) 实用程序。
安装
列出分区
要列出 块设备 上的分区表和分区,您可以运行以下命令,其中 device 是类似 /dev/sda
、/dev/nvme0n1
、/dev/mmcblk0
等的名称。
# gdisk -l /dev/sda
或者,使用 sgdisk 执行相同的操作
# sgdisk -p /dev/sda
备份和恢复分区表
在对磁盘进行更改之前,您可能需要备份驱动器的分区表和分区方案。您也可以使用备份将相同的分区布局复制到多个驱动器。
使用 sgdisk,您可以创建二进制备份,其中包含保护性 MBR、主 GPT 头部、备份 GPT 头部以及分区表的一个副本。以下示例会将 /dev/sda
的分区表保存到文件 sgdisk-sda.bin
# sgdisk -b=sgdisk-sda.bin /dev/sda
稍后您可以通过运行以下命令恢复备份
# sgdisk -l=sgdisk-sda.bin /dev/sda
如果您想将当前设备的分区布局(在本例中为 /dev/sda
)克隆到另一个驱动器 (/dev/sdc
),请运行
# sgdisk -R=/dev/sdc /dev/sda
如果两个驱动器都将在同一台计算机中,您需要随机化磁盘和分区 GUID
# sgdisk -G /dev/sdc
创建分区表和分区
分区磁盘的第一步是创建分区表。之后,根据所需的分区方案创建实际的分区。
在开始之前,您可能希望备份您当前的分区表和方案。
以下说明如何使用 gdisk 执行分区表的创建和实际分区的创建。或者,您可以使用基于 curses 的版本 cgdisk;但是,以下说明不适用于它。有关其用法,请参阅 cgdisk(8)。
gdisk 在 2048 个 512 字节扇区(1 MiB)的块大小基础上自动执行分区对齐,这应与所有 高级格式 HDD 和绝大多数(如果不是全部)SSD 兼容。
要使用 gdisk,请使用您要更改/编辑的 块设备 的名称运行该程序。此示例使用 /dev/sda
# gdisk /dev/sda
创建新表
- 在分区之前,请检查您的 NVMe 驱动器和高级格式硬盘驱动器是否正在使用最佳逻辑扇区大小。
- 考虑在分区 SSD 之前执行 SSD 内存单元清除。
要创建新的 GUID 分区表 并清除所有当前分区数据,请在提示符下键入 o
。如果您需要的分区表已创建,请跳过此步骤。
创建分区
使用 n
命令创建新分区。您必须输入分区号、起始扇区、结束扇区和分区类型。
分区号
分区号是分配给分区的编号,例如,磁盘 /dev/sda
上编号为 1
的分区将是 /dev/sda1
,/dev/nvme0n1
上的 /dev/nvme0n1p1
和 /dev/mmcblk0
上的 /dev/mmcblk0p1
。有关命名方案的详细信息,请参阅 设备文件#分区。分区号可能并不总是与磁盘上分区的顺序匹配,在这种情况下,可以排序它们。
建议选择 gdisk 建议的默认编号。
起始和结束扇区
分区的起始和结束扇区可以以扇区号或以千字节 (K
)、兆字节 (M
)、吉字节 (G
)、太字节 (T
) 或拍字节 (P
) 为单位的位置指定;
位置可以在以下方面指定
- 从磁盘开始的绝对术语。例如,
40M
作为起始扇区指定从磁盘开始 40 MiB 的位置。 - 通过在大小前面加上
+size
或-size
的相对术语。例如,+2G
指定默认起始扇区后 2 GiB 的点,或-200M
指定最后一个可用扇区前 200 MiB 的点。
在没有输入的情况下按 Enter
键指定默认值,这是最大可用块的开始作为起始扇区,以及同一块的结尾作为结束扇区。
+size{M,G,T,P}
表示法的相对术语指定分区大小,并且不要使用小于 1 MiB 的大小。此类分区将始终根据设备属性对齐。+1M
作为分区的起始扇区),以防您需要创建 BIOS 启动分区。分区类型
通过输入 gdisk 的内部类型代码或手动指定 分区类型 GUID 来选择分区的类型。默认值 Linux filesystem
(GUID 0FC63DAF-8483-4772-8E79-3D69D8477DE4
,gdisk 的内部代码 8300
) 对于大多数用例来说应该足够了。
- 按
L
以显示 gdisk 的内部代码列表。 - 建议遵循 可发现分区规范,因为 systemd-gpt-auto-generator(8) 将自动挂载它们。如果您想禁用分区的自动挂载,请参阅 #阻止 GPT 分区自动挂载。
分区类型 | 挂载点 | gdisk 的 代码 |
分区类型 GUID |
---|---|---|---|
Linux 文件系统 | 任意 | 8300
|
0FC63DAF-8483-4772-8E79-3D69D8477DE4
|
EFI 系统分区 | 任意1 | ef00
|
C12A7328-F81F-11D2-BA4B-00A0C93EC93B
|
BIOS 启动分区 | 无 | ef02
|
21686148-6449-6E6F-744E-656564454649
|
XBOOTLDR 分区 | 任意 | ea00
|
BC13C2FF-59E6-4262-A352-B275FD6F7172
|
Linux x86-64 根目录 (/) | /
|
8304
|
4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709
|
Linux 交换分区 | [SWAP]
|
8200
|
0657FD6D-A4AB-43C4-84E5-0933C84B4F4F
|
Linux /home | /home
|
8302
|
933AC7E1-2EB4-4F13-B844-0E14E2AEF915
|
Linux /srv | /srv
|
8306
|
3B8F8425-20E0-4F3B-907F-1A25A76F98E8
|
Linux /var | /var 1 |
8310
|
4D21B016-B534-45C2-A9FB-5C16E091FD2D
|
Linux /var/tmp | /var/tmp 1 |
8311
|
7EC6F557-3BC5-4ACA-B293-16EF5DF639D1
|
Linux LVM | 任意 | 8e00
|
E6D6D379-F507-44C2-A23C-238F2A3DF928
|
Linux RAID | 任意 | fd00
|
A19D880F-05FC-4D3B-A006-743F0F84911E
|
Linux LUKS | 任意 | 8309
|
CA7D7CCB-63ED-4C53-861C-1742536059CC
|
Linux dm-crypt | 任意 | 8308
|
7FFEC5C9-2D00-49B7-8941-3EA10A5586B7
|
- systemd-gpt-auto-generator(8) 仅在满足特定条件时才会自动挂载分区。有关详细信息,请参阅 systemd#GPT 分区自动挂载。
重复此过程,直到您拥有所需的分区。
将更改写入磁盘
c
更改分区的名称 (PARTLABEL) 以方便区分。通过 w
命令将表写入磁盘并退出。
技巧和诀窍
在 MBR 和 GPT 之间转换
gdisk、sgdisk 和 cgdisk 能够将 MBR 和 BSD 磁盘标签 转换为 GPT 而不会丢失数据。转换后,所有 MBR 主分区和逻辑分区都将变为 GPT 分区,并为每个分区创建正确的分区类型 GUID 和唯一分区 GUID。
转换后,需要重新安装 引导加载程序,以将其配置为从 GPT 启动。
- GPT 在磁盘末尾存储辅助表。默认情况下,此数据结构占用 33 个 512 字节扇区 (16.5 KiB)。MBR 在其末尾没有类似的数据结构,这意味着 MBR 磁盘上的最后一个分区有时会扩展到磁盘的末尾,从而阻止完全转换。如果发生这种情况,您必须放弃转换并调整最终分区的大小。
- 已知在基于英特尔芯片组并在 RAID 模式下运行的笔记本电脑上,备份 GPT 存在损坏问题。解决方案是尽可能使用 AHCI 而不是 RAID。
要使用 sgdisk 将 MBR 分区表转换为 GPT,请使用 -g
/--mbrtogpt
选项
# sgdisk -g /dev/sda
要将 GPT 转换为 MBR,请使用 -m
/--gpttombr
选项。请注意,不可能从 GPT 转换为超过四个分区到 MBR。
# sgdisk -m /dev/sda
排序分区
这适用于在两个分区之间的空间中创建新分区或删除分区时。本示例中使用 /dev/sda
。
# sgdisk -s /dev/sda
排序分区后,如果您未使用 持久块设备命名,则可能需要调整 /etc/fstab
和/或 /etc/crypttab
配置文件。
/dev/sda1
)可用。重新启动系统或告知内核重新读取分区表。恢复 GPT 头部
如果主 GPT 头部或备份 GPT 头部损坏,您可以使用 gdisk 从另一个恢复一个。本示例中使用 /dev/sda
。
# gdisk /dev/sda
选择 r
以获取恢复和转换选项(仅限专家)。从那里选择
b
:使用备份 GPT 头部(重建主头部)d
:使用主 GPT 头部(重建备份头部)
完成后,通过 w
命令将表写入磁盘并退出。
扩展 GPT 磁盘
在扩大磁盘后(例如在硬件 RAID 或 虚拟机 磁盘中),新添加的可用空间不会立即可用,因为 GPT 将数据保存在磁盘末尾。您必须将备份 GPT 头部重新定位到磁盘的新末尾。
使用选项 -e
/--move-second-header
运行 sgdisk,例如
# sgdisk -e /dev/sda
之后打印分区表;现在总可用空间应该增加了。
阻止 GPT 分区自动挂载
systemd-gpt-auto-generator(8) 将自动挂载遵循可发现分区规范的分区。有时这可能不是期望的行为。
可以通过在分区上设置 分区属性 63
“do not automount”(不自动挂载)来禁用自动挂载。
启动 gdisk,例如
# gdisk /dev/sda
按 p
打印分区表,并记下您要禁用自动挂载的分区的分区号。
按 x
额外功能(仅限专家)。
按 a
设置属性。输入分区号并设置属性 63
。在 Set fields are:
下,现在应显示 63 (do not automount)
。按 Enter
结束属性更改。对所有要阻止自动挂载的分区重复此操作。
完成后,通过 w
命令将表写入磁盘并退出。
或者,使用 sgdisk,可以使用 -A
/--attributes=
选项设置属性;有关用法,请参阅 sgdisk(8)。例如,要在 /dev/sda2
上设置分区属性 63
“do not automount”(不自动挂载),请运行
# sgdisk -A 2:set:63 /dev/sda
gdisk EFI 应用程序
EFI 版本的 gdisk 没有软件包,但 Rod Smith 在 SourceForge 上提供了预构建的 gdisk-1.04 EFI 二进制文件。下载 gdisk-efi-*.zip
并解压该存档。要使用它,请将 gdisk_x64.efi
复制到 EFI 系统分区 并从您的 引导加载程序 或 UEFI Shell 启动它。
gdisk_x64.efi 允许您在操作系统启动之前编辑分区表。它的使用方式与 Linux 上的 gdisk 二进制文件相同。
有关更多信息,请参阅 README-efi.txt。
参见
- GPT fdisk 教程 - GPT fdisk 的官方网页,包含详细的演练。
- GPT fdisk 的 SourceForge 页面