GPT 分区(GUID Partition Table,全局唯一标识分区表)是一种用于对计算机存储设备(如硬盘驱动器或固态驱动器)进行分区表布局的标准,它取代了传统的 MBR(Master Boot Record,主引导记录)分区方案。
GPT 分区的主要特点
| 特点 |
GPT (GUID Partition Table) |
MBR (Master Boot Record) |
| 最大磁盘容量 |
理论上支持的容量非常大(目前在 18 EiB 级别) |
仅支持最大 2 TiB (2048 GiB) 的磁盘容量 |
| 支持分区数量 |
理论上无限制,Windows 默认支持 128 个 分区 |
限制为 4 个主分区,或 3 个主分区 + 1 个扩展分区(扩展分区内可包含多个逻辑分区) |
| 分区类型 |
没有 主分区、扩展分区和逻辑分区之分,所有分区都是主分区 |
有主分区、扩展分区和逻辑分区之分 |
| 引导方式 |
通常与 UEFI(统一可扩展固件接口)引导模式配合使用 |
通常与 Legacy BIOS(传统 BIOS)引导模式配合使用 |
| 数据安全性 |
在磁盘末尾存储 分区表的备份,并包含 CRC32 校验和,数据恢复能力更强 |
分区信息只存储在一个位置,容易因损坏而丢失 |
GPT 分区的结构
GPT 磁盘的结构通常包括以下几个关键部分:
-
保护 MBR (Protective MBR):
- 位于磁盘的第一个扇区(LBA 0)。
- 它的作用是防止那些不识别 GPT 分区的旧版磁盘工具误操作或覆盖 GPT 磁盘。
- 它包含一个特殊的 MBR 分区项(类型为
0xEE),表示整个磁盘被一个未知的 GPT 分区占用。
-
主 GPT 头部 (Primary GPT Header):
- 位于第二个扇区(LBA 1)。
- 它定义了分区表的位置和大小。
- 它包含头部和分区表的 CRC32 校验和,用于检测错误。
-
主分区表项 (Primary Partition Entry Array):
- 紧跟在 GPT 头部之后(通常是 LBA 2 到 LBA 33 扇区)。
- 这里存储着每个分区的详细信息。
- 每个分区项都包含 分区类型 GUID、唯一的 GUID、起始/结束地址、属性标志和人类可读的名称。
-
实际分区数据 (GPT Partitions):
- 这是磁盘上分配给各个分区的最大区域,存储实际数据。
-
备份区域 (Backup Area):
- 位于磁盘的尾部。
- 包含 备份的 GPT 头部 和 备份的分区表。这是 GPT 增强数据安全性和恢复能力的关键。
关键概念:GUID
GPT 使用 GUID(全局唯一标识符)来标识:
- 分区类型:例如,EFI 系统分区 (ESP) 有一个特定的 GUID。
- 每个单独的分区:磁盘上的每个分区都有一个独一无二的 GUID。
gdisk 操作命令
在 Linux 环境中,推荐使用 gdisk (GPT fdisk) 工具来操作 GPT 分区表,它专为 GPT 设计,比传统的 fdisk (仅支持 MBR) 更强大和安全。
安装:
apt install gdisk
假设您的新磁盘设备名为 /dev/sdb。
场景一:初始化一个全新 GPT 磁盘
当您插入一块新硬盘,需要将其转换为 GPT 分区格式时。
| 步骤 |
说明 |
命令 |
1. 启动 gdisk |
针对新磁盘设备 /dev/sdb 启动 gdisk。 |
sudo gdisk /dev/sdb |
| 2. 创建新分区表 |
在 gdisk 提示符下输入 o (创建新的空 GPT 分区表)。 |
Command (? for help): o |
| 3. 确认 |
确认操作,这将清除磁盘上所有数据! |
Proceed with non-empty GUID partition table? (y/n): y |
| 4. 保存并退出 |
输入 w (写入分区表到磁盘并退出)。 |
Command (? for help): w |
场景二:创建两个分区(boot 和根分区)
这是一个常见的服务器或桌面系统安装布局,用于支持 UEFI 启动。
| 步骤 |
说明 |
命令 |
1. 启动 gdisk |
(如上) |
sudo gdisk /dev/sdb |
| 2. 创建第一个分区 |
输入 n,分区号默认 1,起始扇区默认,大小输入 +512M (作为 EFI/boot 分区)。 |
Command (? for help): n → Partition number (1-128, default 1): [Enter] → First sector: [Enter] → Last sector or size: +512M |
| 3. 设置分区类型 |
将类型代码设置为 EF00 (EFI System Partition)。 |
Hex code or GUID (L to show codes): EF00 |
| 4. 创建第二个分区 |
输入 n,分区号默认 2,起始扇区默认,大小输入 +50G (作为根分区)。 |
Command (? for help): n → Partition number (2-128, default 2): [Enter] → First sector: [Enter] → Last sector or size: +50G |
| 5. 设置分区类型 |
将类型代码设置为 8300 (Linux 文件系统)。 |
Hex code or GUID (L to show codes): 8300 |
| 6. 写入并退出 |
(如上) |
Command (? for help): w → Final check: yes |
场景三:格式化并挂载新分区
假设您已经完成了上述分区操作,现在需要格式化并使用它们。
| 步骤 |
说明 |
命令 |
| 1. 格式化 EFI 分区 |
EFI 分区必须是 FAT32 格式。 |
sudo mkfs.fat -F 32 /dev/sdb1 |
| 2. 格式化根分区 |
根分区通常使用 ext4 格式。 |
sudo mkfs.ext4 /dev/sdb2 |
| 3. 创建挂载点 |
创建用于临时挂载的目录。 |
sudo mkdir -p /mnt/new_root /mnt/new_efi |
| 4. 挂载分区 |
将分区挂载到相应的目录。 |
sudo mount /dev/sdb2 /mnt/new_root |
| 5. 挂载 EFI 分区 |
将 EFI 分区挂载到根分区下的 /boot/efi (或者直接挂载到 /mnt/new_efi)。 |
sudo mount /dev/sdb1 /mnt/new_efi |
注意: 在实际安装操作系统时,您通常会在安装程序中完成这些步骤。这些命令主要用于手动配置或数据盘操作。
总结与应用
目前,GPT 分区配合 UEFI 引导 已经成为主流的系统引导和磁盘分区方案,尤其是在安装 Windows 10/11 或现代 Linux/macOS 系统时。如果您使用容量大于 2TB 的硬盘,或者需要创建超过 4 个主分区,GPT 是唯一的选择。