linux gdisk命令

警告: 分区操作可能导致数据丢失!操作前请务必备份重要数据,并确认操作对象正确。

一、Gdisk 简介

gdisk(GPT fdisk)是专门用于管理 GPT(GUID Partition Table)分区表的命令行工具。它是传统 fdisk 工具的 GPT 版本。

GPT 与 MBR 对比
特性 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 额外功能(专家模式)
? 打印菜单(帮助)

五、常用操作实例

1. 查看分区表信息

# 查看磁盘分区信息(不进入交互模式)
sudo gdisk -l /dev/sda

# 进入交互模式查看
sudo gdisk /dev/sda
Command (? for help): p

2. 创建新的GPT分区表

sudo gdisk /dev/sdb
# 输入以下交互命令:
Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y

3. 创建新分区

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'

4. 删除分区

sudo gdisk /dev/sda
Command (? for help): d
Partition number (1-3): 3

5. 更改分区类型

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'

6. 备份和恢复GPT分区表

# 备份分区表
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

7. 转换MBR为GPT

# 使用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)

sgdisk 是 gdisk 的非交互式版本,适合在脚本中使用:

1. 查看分区信息

# 打印分区表
sudo sgdisk -p /dev/sda

# 详细输出
sudo sgdisk --print /dev/sda

2. 创建分区

# 创建新分区
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

3. 删除分区

# 删除特定分区
sudo sgdisk -d 3 /dev/sda

# 删除所有分区
sudo sgdisk -o /dev/sda

4. 更改分区属性

# 更改分区类型
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

5. 备份和恢复

# 备份分区表
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

八、实际应用场景

1. 自动分区脚本

#!/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"

2. 双系统安装分区

#!/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"

3. 服务器磁盘初始化

#!/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的界面 新手友好,简单分区

十二、最佳实践

GPT分区最佳实践
  • 为新磁盘(尤其是2TB以上)使用GPT分区表
  • 始终创建EFI系统分区(ESP)用于UEFI启动
  • 为Linux系统保留BIOS启动分区(如果需要)
  • 使用4K扇区对齐优化SSD性能
  • 定期备份GPT分区表(sgdisk --backup
  • 在脚本中使用sgdisk而非交互式gdisk
  • 操作前务必确认设备名称正确
  • 重要数据分区前进行完整备份

十三、gdisk家族工具

gdisk

主程序,交互式GPT分区工具

sudo gdisk /dev/sda
sgdisk

脚本版本,非交互式

sudo sgdisk -p /dev/sda
cgdisk

curses界面版本

sudo cgdisk /dev/sda
注意: gdisk是Linux系统管理的重要工具,特别是在UEFI系统和现代大容量存储设备中。掌握gdisk对于系统管理员和高级用户至关重要。