在Linux上如何使用GDISK和SGDisk操作GPT分区表

GPT是GUID分区表的首字母缩写表:它是存储设备的新标准:它是UEFI固件规范和MBR的继承者的一部分,其中它克服了几个限制。
例如,MBR允许最多4个主要分区(GPT支持最多128个),并且仅使用高达2TB的驱动器。
在Linux上有几个工具,我们可以使用它来创建和操作GPT分区表。

在本教程中,我们将学习:

  • 如何使用gdisk列出设备的分区表
  • 如何创建GPT分区表
  • 如何创建新分区
  • 如何删除分区
  • 如何调整分区大小
  • 如何使用sgdisk非交互操作
  • 如何使用gdisk和sgdisk操纵gpt分区表

创建新的GPT分区表

创建新的GPT分区表,无需提供任何选项:

$sudo gdisk /dev/sdc

将输出提示符。输入问号,可以查看帮助:

Command (? for help):

要创建一个新的GPT分区表,我们必须使用“o命令”
将提升:此选项删除所有分区并创建新的保护MBR。
是否继续?

Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): Y

之前我们说过,在使用GDisk时,我们对磁盘所做的更改不会立即写入。

要使更改生效,我们使用w命令将更改后的分区表写入磁盘:

Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdc.
The operation has completed successfully.

删除分区

要使用gdisk删除现有分区,使用d命令:

Command (? for help): d
Partition number (1-2): 2

创建新分区

要创建新分区,我们必须使用n命令。

Command (? for help): n
Partition number (1-128, default 1):
First sector (34-15122398, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-15122398, default = 15122398) or {+-}size{KMGTP}:+500M
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

我们将要回答一系列问题,问题后面是默认值。要使用默认值,直接按回车键。

问题1: 分区的数字,从1到128之间。
问题2: 分区开始的扇区。在绝大多数情况下,使用默认值
问题3: 分区的结束扇区。 我们可以直接提供分区大小,这样就不需要计算扇区数。大小单位可以使用kmgtp指定。
例如+500M表示将创建500兆大小的分区。
问题4: 分区的十六进制代码。 这里默认值为“8300(Linux文件系统)”。 要获取所有可用代码的列表,使用l命令

0700 Microsoft basic data                0701 Microsoft Storage Replica
0702 ArcaOS Type 1                       0c01 Microsoft reserved
2700 Windows RE                          3000 ONIE boot
3001 ONIE config                         3900 Plan 9
4100 PowerPC PReP boot                   4200 Windows LDM data
4201 Windows LDM metadata                4202 Windows Storage Spaces
7501 IBM GPFS                            7f00 ChromeOS kernel
7f01 ChromeOS root                       7f02 ChromeOS reserved
8200 Linux swap                          8300 Linux filesystem
8301 Linux reserved                      8302 Linux /home
8303 Linux x86 root (/)                  8304 Linux x86-64 root (/)
8305 Linux ARM64 root (/)                8306 Linux /srv
8307 Linux ARM32 root (/)                8308 Linux dm-crypt
8309 Linux LUKS                          830a Linux IA-64 root (/)
830b Linux x86 root verity               830c Linux x86-64 root verity
830d Linux ARM32 root verity             830e Linux ARM64 root verity
830f Linux IA-64 root verity             8310 Linux /var
8311 Linux /var/tmp                      8312 Linux user's home
8313 Linux x86 /usr                      8314 Linux x86-64 /usr
8315 Linux ARM32 /usr                    8316 Linux ARM64 /usr
8317 Linux IA-64 /usr                    8318 Linux x86 /usr verity
Press the <Enter> key to see more codes, q to quit:

这时的修改只保存在内存中; 需要执行W才将它们写入磁盘。

gdisk 和 sgdisk 的区别

在本教程中,我们将使用两种不同的工具:gdisk和sgdisk。

前者交互方式,提供确认提示和基于问题的界面。
只有在使用专用命令时,我们在磁盘上执行的更改才会写入磁盘,以便最大限度地减少错误。

相反,后者以非交互式方式工作:它意味着在shell脚本内或者更直接地从命令行使用。
SGDisk命令立即生效,因此应该非常仔细地使用。

列出设备的分区表

列出设备的分区表,使用-l选项

$sudo gdisk -l /dev/sdc

输出示例:

GPT fdisk (gdisk) version 1.0.8
Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present
Creating new GPT entries in memory.
Disk /dev/sdc: 15122432 sectors, 7.2 GiB
Model: SD/MMC/MS PRO
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 32A31D98-1500-4FE5-836A-69F289D048A7
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 15122398
Partitions will be aligned on 2048-sector boundaries
Total free space is 15122365 sectors (7.2 GiB)

用sgdisk非交互式执行操作

sgdisk是一个命令行实用程序,它可以用于非交互式执行操作。

使用sgdisk创建GPT分区表

使用“sgdisk”创建GPT分区表:

$sudo sgdisk -o /dev/sdc

当使用“-o选项(或者--clear)时,sgdisk会清除给定设备上所有的现有分区表,并创建一个新的GPT分区表。

使用sgdisk创建分区

要创建新分区,使用 -n--new)选项,并提供分区编号,分区开始位置和分区结束位置:

partition_number:partition_start:partition_end

例如,创建新分区,编号为2,开始位置默认, 大小为1GB:

2::+1G

如果想使用所有剩余空间创建分区,那么结束位置设置为0:

2::0

设置十六进制代码,使用-t--typecode的简写)选项,并指定下面参数:

partition_number:hexcode

因此,完整的命令如下所示:

$sudo sgdisk --new 2::+1G --typecode 2:8300 /dev/sdc

使用sgdisk删除分区

要从磁盘中删除分区,使用-d选项 ( --delete的简写 ):

$sudo sgdisk --delete 2 /dev/sdc

使用sgdisk调整分区的大小

示例:

$sudo sgdisk \
  -d 2 \
  -n 2:0:0 \
  -u 2:D6FF2779-6F14-4E3E-876C-83E38F3A3FD7 \
  /dev/sdc

“-d”选项用于删除分区,
“-n”用于创建一个具有相同数量的新字符和启动和结束扇区的默认值(0,表示“使用默认值“)。
“-u”选项是--partition-guid的简写:我们使用它为新分区分配与已删除分区相同的GUID。

要获取有关特定分区的信息,我们可以使用“-i”选项并提供分区编号。例如:

$sudo sgdisk -i 2 /dev/sdc
日期:2020-07-07 20:56:26 来源:oir作者:oir