GPT fdisk

出自 ArchWiki
(重定向自 Sgdisk

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 标头重新定位到磁盘的新末尾。

使用 sgdisk 和选项 -e/--move-second-header 运行,例如

# 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 应用程序

本文或章节已过时。

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

EFI 版本的 gdisk 没有软件包,但 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

参见