GPT fdisk

来自 ArchWiki
(重定向自 Gdisk

GPT fdisk—由 gdiskcgdisksgdiskfixparts 程序组成—是由 Rod Smith 制作的一套文本模式分区工具。它们适用于全局唯一标识符 (GUID) 分区表 (GPT) 磁盘,而不是较旧的(且曾经更常见的)主引导记录 (MBR) 分区表。

gdiskcgdisksgdisk 都具有相同的功能,但提供不同的用户界面。 gdisk 是文本模式交互式的,sgdisk 是命令行式的,而 cgdisk 具有基于 curses 的界面。本文介绍了 gdisk(8)sgdisk(8) 实用程序。

提示
  • 对于具有文本用户界面的基本分区功能,可以使用 cgdisk(8)
  • GPT fdisk 网站提供了 gdiskcgdisksgdiskFixParts 的详细演练。

安装

安装 gptfdisk 软件包。

列出分区

要列出 块设备上的分区表和分区,您可以运行以下命令,其中 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

创建新表

警告: 如果您在包含数据的磁盘上创建新的分区表,它将擦除磁盘上的所有数据。请确保这是您想要执行的操作。
提示

要创建新的 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 的大小。此类分区将始终根据设备属性对齐。
提示: 在磁盘的前 2 TiB 的某个位置留出 1 MiB 的可用空间(例如,通过使用 +1M 作为分区的起始扇区),以防您将来需要创建 BIOS 启动分区

分区类型

通过输入 gdisk 的内部类型代码或手动指定 分区类型 GUID 来选择分区类型。默认值 Linux filesystem(GUID 0FC63DAF-8483-4772-8E79-3D69D8477DE4,gdisk 的内部代码 8300)对于大多数用例来说应该足够好。

提示
常用分区类型
分区类型 挂载点 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 /var1 8310 4D21B016-B534-45C2-A9FB-5C16E091FD2D
Linux /var/tmp /var/tmp1 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
  1. systemd-gpt-auto-generator(8) 仅在满足特定条件时才会自动挂载分区。有关详细信息,请参见systemd#GPT 分区自动挂载

重复此过程,直到您拥有所需的分区。

将更改写入磁盘

提示: 使用命令 c 更改分区的名称 (PARTLABEL) 以便于区分。

通过 w 命令将表写入磁盘并退出。

技巧和诀窍

在 MBR 和 GPT 之间转换

提示: 阅读 Rod Smith 的 转换为 GPT 或从 GPT 转换 以获取更详细的信息和演练。

gdisksgdiskcgdisk 能够将 MBR 和 BSD 磁盘标签 转换为 GPT,而不会丢失数据。转换后,所有 MBR 主分区和逻辑分区都将成为 GPT 分区,并为每个分区创建正确的分区类型 GUID 和唯一分区 GUID。

转换后,将需要重新安装 引导加载程序 以将其配置为从 GPT 启动。

警告
  • GPT 在磁盘末尾存储辅助表。默认情况下,此数据结构消耗 33 个 512 字节扇区(16.5 KiB)。MBR 在其末尾没有类似的数据结构,这意味着 MBR 磁盘上的最后一个分区有时会扩展到磁盘的末尾,并阻止完全转换。如果这种情况发生在您身上,您必须放弃转换并调整最后一个分区的大小。

此条目或章节需要扩充。

原因: 提供问题参考。(在 Talk:GPT fdisk 中讨论)
  • 已知在基于 Intel 芯片组且在 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 “不自动挂载”来禁用自动挂载。

启动 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 “不自动挂载”,请运行

# sgdisk -A 2:set:63 /dev/sda

gdisk EFI 应用程序

此条目或章节已过时。

原因: gdisk_x64.efi 似乎不再工作,并且显然未维护。(在 Talk:GPT fdisk 中讨论)

没有适用于 gdisk 的 EFI 版本的软件包,但 Rod Smith 在 SourceForge 上提供了预构建的 gdisk-1.04 EFI 二进制文件。下载 gdisk-efi-*.zip 并解压缩存档。要使用它,请将 gdisk_x64.efi 复制到 EFI 系统分区,并从您的 引导加载程序UEFI Shell 启动它。

gdisk_x64.efi 允许您在操作系统启动之前编辑分区表。它的使用方式与 Linux 上的 gdisk 二进制文件相同。

注意: gdisk_x64.efi 无法访问文件系统,因此它无法将分区表备份到文件或从备份文件恢复。

有关更多信息,请参见 README-efi.txt

参见