GUID Partition Table (简体中文)
全局唯一标识分区表(GUID Partition Table,缩写:GPT)是一个实体硬盘的分区表的结构布局的标准。它是统一可扩展固件接口标准的一部分,它使用全局唯一标识来标识设备。它是新一代分区表格式,用以解决 MBR 分区表的缺点,同时带来了一些优点。
Contents
关于 GUID 分区表
全局唯一标识分区表 (GPT) 使用 GUID (或在 Linux 世界里称为 UUID) 来定义分区,它的类型和它的名称。GPT 组成如下:
HDD 上的位置 | 用意 |
---|---|
硬盘的第一个逻辑扇区或者第一个512B | 保护分区 (Protective MBR) - 与一般 MBR 相同但是这个64B区域仅包含了一个类型为 0xEE 的主分区条目,它定义在整个硬盘上,或者大小为2TB的区域(如果硬盘超过2TB)。 |
硬盘的第二个逻辑扇区或者第二个512B | 主 GPT 头 - 包含唯一硬盘 GUID, 主分区表的位置,分区表的可能条目数,它本身和主分区表的 CRC32 校验值,第二(或备份) GPT 头的位置 |
硬盘的第二个逻辑扇区之后的16 KB (默认) | 主 GPT 表 - 128个分区条目(默认,可以更高),每个包含大小为128B的条目(因此128个分区共占16KB)。扇区数存储为64位的 LBA 值,每个分区有一个分区类型 GUID 和一个唯一分区 GUID. |
硬盘最后一个扇区前的16 KB (默认) | 第二 GPT 表 - 与主表完全相同,主要用于主表损坏时的修复。 |
硬盘最后一个逻辑扇区或者最后一个512B | 第二 GPT 头 - 包含唯一硬盘 GUID, 第二分区表的位置,分区表的可能条目数,它本身和第二分区表的 CRC32 校验值,主 GPT 头的位置。这个头用于当主头损坏时恢复 GPT 信息。 |
GPT 的优点
- 使用 GUID (UUID) 来表明分区类型 - 无冲突。
- 为每个分区提供了一个唯一硬盘 GUID 和一个唯一分区 GUID - 一个好的不依赖文件系统的引用分区和硬盘的方式。
- 任意分区数 - 取决于给分区表分配的空间 - 不需要扩展和逻辑分区。GPT ,默认包含了定义128个分区的空间。当用户想要更多分区时,他可以给分区表分配更多空间 (目前只有 gdisk 支持这一特性)。
- 使用64位 LBA 存储扇区数 - 最大硬盘可寻址大小为 2 ZB. MBR 仅能支持最大 2 TiB 的磁盘。
- 存储了备份头和分区表可于主要部分损坏时进行急救。
- CRC32 校验值用于检测头和分区表的错误与损坏。
内核支持
内核配置选项 CONFIG_EFI_PARTITION
启用了内核级 GPT 支持 (忽略它的名称 EFI PARTITION). 这个选项必须是内建在内核中并且不能编译为可加载模块。就算 GPT 硬盘仅用来存储数据而不是启动盘,也要打开这个选项。在 Arch [core] 源中的 linux 和 linux-lts的默认打开了这个选项。自定义内核可通过 CONFIG_EFI_PARTITION=y
开启这个选项。
引导器支持
UEFI 系统
因为 GPT 是 UEFI 标准的一部分,因此所有 UEFI 引导器都支持 GPT 硬盘,并是从 UEFI 启动的强制要求。更多信息见 Boot loaders.
BIOS 系统
尽管理论上 GPT 支持 BIOS 系统,但有时会无效甚至完全不兼容。技术上 BIOS 假设为只执行 MBR 上的代码,因此,保住了不同的分区方案的可能性。然而 BIOS 可能会执行其他的检查比如: 检查 MBR 完整性,甚至可能是对整个 MBR 分区表(尽管通常只是第一个分区)。如果在这种情况下,下面列出了一些该问题的解决方案。
支持 GPT/BIOS 分区方案的引导器:
- GRUB
- Syslinux
- 不支持: GRUB Legacy and LILO
解决方案
有一些从 BIOS/GPT 分区方案启动的解决办法,然而尝试这些之前尝试以引导器标准程序从 BIOS/GPT 启动。如果无效,这些可能帮到你。(完整版阅读 这个):
- 在保护分区上设置 boot 参数 (类型为 0xEE). 可由
parted /dev/sdX
和disk_toggle pmbr_boot
或sgdisk /dev/sdX --attributes=1:set:2
完成。 - 确认没有 EFI 系统分区。
- 创建混合 MBR. 这个是寻求可用 MBR 分区的 BIOS 所需要的 (见下面的例子)。
- 重新计算保护分区中的 CHS (Cylinder/Head/Sector) 值。GPT 不需要这些值但是保护分区可能需要它们来校准以为测试它们的 BIOS 工作。
- 有可用 MBR 表的第二块硬盘意味着有可执行保护分区上代码的 BIOS.
- 自2011年以来,许多计算机如果 BIOS 选项支持的话可以从 EFI 启动。
分区工具
fdisk 和 gdisk
参考 fdisk。
GNU Parted
GNU Parted 是创建和处理分区表的工具,可以使用交互模式或者作为 GParted 图形程序的后端. 同时支持 GPT 和 MBR.
It supports GPT as well as MBR.
分区成例
gdisk basic
# gdisk /dev/sdX o # create new empty GUID partition table n # partition 1 [enter], from beginning [enter], to 100GiB [+100GiB], linux fs type [enter] n # partition 2 [enter], from beginning [enter], to 108GiB [+8GiB], linux swap [8200] w # write table to disk and exit
gdisk basic (以及混合 MBR)
# gdisk /dev/sdX o # create new empty GUID partition table n # partition 1 [enter], from beginning [enter], to 100GiB [+100GiB], linux fs type [enter] n # partition 2 [enter], from beginning [enter], to 108GiB [+8GiB], linux swap [8200] n # partition 3 [enter], from beginning [enter], [+1MiB], linux fs type [enter] r # recovery/transformation menu h # make hybrid mbr 3 # add partition 3 to hybrid mbr Place EFI GPT (0xEE) partition first in MBR (good for GRUB)? (Y/N): N Enter an MBR hex code (default 83): [enter] Set the bootable flag? (Y/N): Y Unused partition space(s) found. Use one to protect more partitions? (Y/N): N w # write table to disk and exit
parted basic (通过命令行选项)
parted --script /dev/sda mklabel gpt parted --script --align optimal /dev/sda mkpart primary ext4 0% -8GiB mkpart primary linux-swap -8GiB 100%
sgdisk basic (自动搜寻)
得到硬盘空间 (disk space) 和交换空间 (swap space) 的值,然后设置根分区 (root partition) 空间。
- 硬盘空间'下舍入'到最近的MB数值,头 GPT 元数据被扣除 (1 MB).
- 交换空间'上舍入'到基于内存大小的MB数值。
diskspace=$(( $(grep sda$ /proc/partitions | awk '{print $3}') * 2 / 2048 - 1 )) swapspace=$(( $(head -n1 /proc/meminfo | awk '{print $2}') / 1024 + 1 )) rootspace=$(( $diskspace - $swapspace ))
运行这个 (这只是测试用模拟运行,删掉 --pretend 来写入分区表):
sgdisk --clear --new 1:0:+${rootspace}MiB --new 2:0:+${swapspace}MiB --typecode 2:8200 --pretend --print /dev/sda
另见
- Wikipedia's Page on GPT and MBR
- Homepage of Rod Smith's GPT fdisk tool and its Sourceforge.net Project page - gptfdisk
- Rod Smith's page on What's a GPT? Converting MBR to GPT and Booting OSes from GPT
- Rod Smith's page on the New Partition Type GUID for Linux data partitions
- System Rescue CD's page on GPT
- Wikipedia page on BIOS Boot Partition
- Make the most of large drives with GPT and Linux - IBM Developer Works
- Microsoft's Windows and GPT FAQ
- Fedora developer discussion on BIOS/GPT configuration