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: 分区的结束扇区。 我们可以直接提供分区大小,这样就不需要计算扇区数。大小单位可以使用k
,m
,g
,t
,p
指定。
例如+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