gdisk(GPT fdisk)是专门用于管理 GPT(GUID Partition Table)分区表的命令行工具。它是传统 fdisk 工具的 GPT 版本。
| 特性 | GPT(GUID Partition Table) | MBR(Master Boot Record) |
|---|---|---|
| 最大磁盘容量 | 9.4 ZB(zebibytes) | 2.2 TB(terabytes) |
| 分区数量 | 理论无限(通常128个) | 最多4个主分区 |
| 分区大小限制 | 64位LBA,无限制 | 32位LBA,最大2TB |
| 备份分区表 | 有(磁盘末尾) | 无 |
| CRC校验 | 支持 | 不支持 |
| UEFI支持 | 原生支持 | 需要CSM(兼容模式) |
gdisk [选项] 设备名
设备名通常是:
/dev/sda - 第一块SATA硬盘/dev/sdb - 第二块SATA硬盘/dev/nvme0n1 - NVMe固态硬盘/dev/vda - 虚拟硬盘| 选项 | 说明 |
|---|---|
-l |
列出分区表信息(不进入交互模式) |
-v |
显示版本信息 |
-c 大小 |
设置柱面大小(已弃用) |
-h 大小 |
设置磁头大小(已弃用) |
-s 大小 |
设置扇区大小(已弃用) |
-b 文件 |
保存备份到文件 |
-c |
彩色显示(如果支持) |
-u |
使用Sector而不是Cylinder显示 |
-p |
以MBR格式显示分区表 |
进入 gdisk 交互模式后,可以使用以下命令:
| 命令 | 说明 |
|---|---|
b |
将GPT数据备份到文件 |
c |
更改分区名称 |
d |
删除分区 |
i |
显示分区详细信息 |
l |
列出已知的分区类型 |
n |
创建新分区 |
o |
创建新的空GPT分区表(会删除所有数据!) |
p |
打印(显示)分区表 |
q |
退出而不保存更改 |
r |
恢复和转换选项(专家菜单) |
s |
排序分区 |
t |
更改分区类型代码 |
v |
验证磁盘 |
w |
写入表到磁盘并退出 |
x |
额外功能(专家模式) |
? |
打印菜单(帮助) |
# 查看磁盘分区信息(不进入交互模式)
sudo gdisk -l /dev/sda
# 进入交互模式查看
sudo gdisk /dev/sda
Command (? for help): p
sudo gdisk /dev/sdb
# 输入以下交互命令:
Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y
sudo gdisk /dev/sda
Command (? for help): n
Partition number (1-128, default 1): 1
First sector (34-209715166, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-209715166, default = 209715166) or {+-}size{KMGTP}: +20G
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'
sudo gdisk /dev/sda
Command (? for help): d
Partition number (1-3): 3
sudo gdisk /dev/sda
Command (? for help): t
Partition number (1-3): 1
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): 8200
Changed type of partition to 'Linux swap'
# 备份分区表
sudo gdisk /dev/sda
Command (? for help): b
Enter backup filename to save: /root/sda_gpt_backup.bin
# 恢复分区表
sudo gdisk /dev/sda
Command (? for help): r
Recovery/transformation command (? for help): l
Enter backup filename to load: /root/sda_gpt_backup.bin
# 使用gdisk转换MBR到GPT
sudo gdisk /dev/sda
Command (? for help): r
Recovery/transformation command (? for help): g
Recovery/transformation command (? for help): w
# 或使用sgdisk一键转换
sudo sgdisk -g /dev/sda
| 代码 | GUID | 分区类型 | 说明 |
|---|---|---|---|
8300 |
0FC63DAF-8483-4772-8E79-3D69D8477DE4 | Linux 文件系统 | ext4, xfs, btrfs等 |
8200 |
0657FD6D-A4AB-43C4-84E5-0933C84B4F4F | Linux 交换分区 | swap分区 |
EF00 |
C12A7328-F81F-11D2-BA4B-00A0C93EC93B | EFI 系统分区 | UEFI启动分区 |
8301 |
44479540-F297-41B2-9AF7-D131D5F0458A | Linux 保留 | /home分区等 |
0700 |
EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 | Microsoft 基本数据 | Windows NTFS |
2700 |
DE94BBA4-06D1-4D40-A16A-BFD50179D6AC | Windows 恢复环境 | Windows RE |
BF00 |
48465300-0000-11AA-AA11-00306543ECAC | Solaris 引导 | Solaris系统 |
AF00 |
48465300-0000-11AA-AA11-00306543ECAC | Apple HFS/HFS+ | macOS文件系统 |
sgdisk 是 gdisk 的非交互式版本,适合在脚本中使用:
# 打印分区表
sudo sgdisk -p /dev/sda
# 详细输出
sudo sgdisk --print /dev/sda
# 创建新分区
sudo sgdisk -n 1:0:+20G -t 1:8300 -c 1:"rootfs" /dev/sda
# 创建EFI系统分区
sudo sgdisk -n 2:0:+512M -t 2:ef00 -c 2:"EFI System" /dev/sda
# 创建交换分区
sudo sgdisk -n 3:0:+8G -t 3:8200 -c 3:"swap" /dev/sda
# 删除特定分区
sudo sgdisk -d 3 /dev/sda
# 删除所有分区
sudo sgdisk -o /dev/sda
# 更改分区类型
sudo sgdisk -t 1:8200 /dev/sda
# 更改分区名称
sudo sgdisk -c 1:"data_partition" /dev/sda
# 更改分区GUID
sudo sgdisk -u 1:C12A7328-F81F-11D2-BA4B-00A0C93EC93B /dev/sda
# 备份分区表
sudo sgdisk --backup=/backup/sda_gpt.bin /dev/sda
# 恢复分区表
sudo sgdisk --load-backup=/backup/sda_gpt.bin /dev/sda
# 备份并转换为文本
sudo sgdisk --backup=/backup/sda_gpt.bin /dev/sda
sudo sgdisk --backup=/backup/sda_gpt.txt /dev/sda --verbose
#!/bin/bash
# 自动化GPT分区脚本
DISK="/dev/sdb"
# 清除现有分区表
sgdisk -Z "$DISK"
# 创建GPT分区表
sgdisk -o "$DISK"
# 创建EFI分区(512M)
sgdisk -n 1:0:+512M -t 1:EF00 -c 1:"EFI System" "$DISK"
# 创建根分区(20G)
sgdisk -n 2:0:+20G -t 2:8300 -c 2:"Linux root" "$DISK"
# 创建家目录分区(剩余空间)
sgdisk -n 3:0:0 -t 3:8300 -c 3:"Linux home" "$DISK"
# 查看结果
sgdisk -p "$DISK"
# 通知内核重新读取分区表
partprobe "$DISK"
#!/bin/bash
# Windows + Linux 双系统GPT分区
DISK="/dev/sda"
# 创建GPT分区表
sgdisk -o "$DISK"
# Windows分区
sgdisk -n 1:0:+100M -t 1:0700 -c 1:"Windows Recovery" "$DISK"
sgdisk -n 2:0:+128M -t 2:EF00 -c 2:"EFI System" "$DISK"
sgdisk -n 3:0:+100G -t 3:0700 -c 3:"Windows C" "$DISK"
# Linux分区
sgdisk -n 4:0:+50G -t 4:8300 -c 4:"Linux root" "$DISK"
sgdisk -n 5:0:+8G -t 5:8200 -c 5:"Linux swap" "$DISK"
sgdisk -n 6:0:0 -t 6:8300 -c 6:"Linux home" "$DISK"
# 验证分区表
sgdisk -v "$DISK"
#!/bin/bash
# 服务器RAID磁盘GPT分区
for DISK in /dev/sda /dev/sdb /dev/sdc /dev/sdd; do
echo "Partitioning $DISK"
sgdisk -Z "$DISK"
sgdisk -o "$DISK"
sgdisk -n 1:0:+2M -t 1:EF02 -c 1:"GRUB BIOS Boot" "$DISK"
sgdisk -n 2:0:+500M -t 2:EF00 -c 2:"EFI System" "$DISK"
sgdisk -n 3:0:0 -t 3:FD00 -c 3:"Linux RAID" "$DISK"
sgdisk -p "$DISK"
done
按 x 进入专家模式:
| 专家命令 | 说明 |
|---|---|
a |
设置属性位 |
b |
从二进制文件恢复GPT头 |
c |
更改分区GUID |
d |
显示主/备份GPT头 |
e |
将主GPT头移动到磁盘末尾 |
f |
随机化磁盘和分区GUID |
g |
将GPT转换为MBR并退出 |
h |
重建MBR |
i |
显示详细信息 |
j |
从磁盘末尾移动备份GPT头 |
l |
设置对齐值 |
m |
返回主菜单 |
n |
创建新的保护性MBR |
o |
打印保护性MBR |
p |
打印主GPT头 |
q |
退出专家菜单 |
r |
恢复和转换选项 |
s |
调整GPT大小 |
t |
交换主/备份GPT头 |
u |
复制分区表 |
v |
磁盘验证 |
w |
写GPT结构到磁盘 |
z |
清空(清零)GPT数据 |
# 使用备份GPT头恢复
sudo gdisk /dev/sda
Command (? for help): x
Expert command (? for help): e
Expert command (? for help): w
# 使用gdisk修复
sudo gdisk /dev/sda
Command (? for help): r
Recovery/transformation command (? for help): p
Recovery/transformation command (? for help): w
# 使用sgdisk修复
sudo sgdisk -v /dev/sda # 验证问题
sudo sgdisk -e /dev/sda # 移动备份到末尾
# 检查分区对齐
sudo sgdisk -v /dev/sda
# 使用4K对齐(现代硬盘)
sudo sgdisk -a 4096 /dev/sda
# 在交互模式中设置对齐
sudo gdisk /dev/sda
Command (? for help): x
Expert command (? for help): l
Enter the sector alignment value (1-65536, default = 2048): 4096
Expert command (? for help): m
# 强制内核重新读取分区表
sudo partprobe /dev/sda
# 或者使用blockdev
sudo blockdev --rereadpt /dev/sda
# 如果以上无效,重启系统
sudo reboot
# 检查分区是否存在
lsblk /dev/sda
cat /proc/partitions | grep sda
| 工具 | 特点 | 最佳用途 |
|---|---|---|
| gdisk | 交互式GPT分区工具 | 手动分区,学习使用 |
| sgdisk | 非交互式GPT分区工具 | 脚本自动化,批量操作 |
| fdisk | 传统MBR分区工具 | MBR磁盘,兼容旧系统 |
| parted | 同时支持MBR和GPT | 跨平台脚本,复杂操作 |
| cfdisk | 基于curses的界面 | 新手友好,简单分区 |
sgdisk --backup)主程序,交互式GPT分区工具
sudo gdisk /dev/sda
脚本版本,非交互式
sudo sgdisk -p /dev/sda
curses界面版本
sudo cgdisk /dev/sda