脆弱的主引导记录(MBR)分区模式不能完全处理超过 2TB 的磁盘 —— 这个曾经遥远的磁盘存储瓶颈问题正在快速成为现实。1TB 磁盘现在已经很常见,2TB 磁盘正在开始出现,着眼于未来的人士正在考虑 MBR 分区模式的替代方法。很明显,MBR 的继任者是 GUID Partition Table (GPT)。本文介绍如何确保您的 Linux® 系统为未来的磁盘存储做好准备。
在开始寻找您的硬盘分区模式的替代方法之前,最好回顾一下迫使这种变化出现的限制。理解这些限制 — 和克服这些限制的建议工具 — 将使您对应该以多快的速度从 MBR 跳到 GPT 做出判断。如果新磁盘采购任务迫在眉睫并且您正在考虑采用 GPT,那么这一点尤为重要。即使在较小的磁盘上,GPT 也比 MBR 更有优势,但是您必须平衡这种优势和实现改变将遇到的困难。
理解 MBR 的限制
MBR 分区系统是一个数据结构补丁的大杂烩,用于克服早期的限制。MBR 自身完全驻留在一个硬盘的第一个扇区(512 字节)上。MBR 的前 400 个字节专门用于存储代码:boot loader(引导装载程序)。计算机引导时,BIOS 读取并执行这段代码。
在这个代码区域之后,MBR 存储数据在 4 个分区上,这些分区称为主分区。每个分区采用两种方法描述:“柱面/磁头/扇区(CHS)” 标记法和 “逻辑块(LBA)” 标记法。今天,CHS 标记法几乎成为了老古董,因为它是一个 24 位的数字。这意味着它只限于描述 8GB 磁盘区域。32 位的 LBA 值支持 2TB 大小。但是这个 2TB 上限不太容易突破,因为在 MBR 中没有留下任何未分配的字段,可以用于向 LBA 地址添加更多位。
除了这个 2TB 问题之外,MBR 还有其他困难。主要困难是 4 个主分区的限制。要克服这个限制,可能的方法是将一个主分区放到一边,作为一个占位符(称为扩展分区),用于容纳任意数量的附加分区(称为逻辑分区)。然而,这是一种笨拙的权宜之计,会导致一些问题。比如,安装多个操作系统时,如果过多的操作系统要求自身拥有过多的主分区,就会出现困难。
MBR 还有数据完整性问题。它是一个单一数据结构,容易受到误操作和磁盘故障的损坏。另外,由于逻辑分区以一种链接表结构定义,如果一个逻辑分区损坏,就会阻止对剩余的逻辑分区的访问。这些数据结构都没有任何形式的错误探测功能,因此,损坏很难定位。
![]() ![]() |
GPT 的解决模式
GPT 定义是 Intel® 为一个 BIOS 替换创建的 Extensible Firmware Interface (EFI) 规范的一部分(参见 参考资料 获取到更多信息的链接)。尽管 GPT 是旨在替代今天的大多数计算机上的旧 BIOS 的标准的一部分,将 GPT 用于基于 BIOS 的系统上还是可能的。但是,如果您的计算机已经使用 EFI,这一事实则是采用 GPT 的另一个理由。无论您的计算机使用旧 BIOS 还是 EFI,GPT 都将修复 MBR 的许多限制:
- GPT 只使用 LBA,因此,CHS 问题就不复存在了。
- 磁盘指针的大小为 64 位,意味着它可以处理的磁盘大小最高达 9.4 x 10^21 字节(94 亿 TB)。
- 关键的 GPT 数据结构在磁盘上存储两次:开始和结束时各一次。这种行为提高了恢复一个事故或一个坏扇区导致的损坏的成功几率。
- 循环冗余检验(CRC)值针对关键数据结构计算,提高了数据崩溃的探测几率。
- GPT 将所有分区存储在单个分区表中(带有备份),因此扩展分区或逻辑分区没有存在的必要。GPT 默认支持 128 个分区,当然您也可以更改分区表的大小,如果您的分区软件支持这种更改的话。
- 虽然 MBR 提供 1 字节分区类型代码,但 GPT 使用一个 16 字节的 GUID(Globally unique identifier,全局唯一标识符)值来标识分区类型。在理论上,这使分区类型更不容易冲突,但在实践中,这种方法也出现了一些问题。本文将在稍后介绍这个问题。
- GPT 添加了一个字段,用于存储人类可读的分区名称。您可以使用这个字段来命名您的 Linux /home、/usr、/var 和其他分区,以便它们在分区软件中更容易识别。
磁盘的第一个扇区专用于一个保护性 MBR,它是一个法定 MBR 数据结构,它定义一个单一分区类型 0xEE (EFI GPT)。在低于 2TB 的磁盘上,这个分区将扩展到整个磁盘;在更大的磁盘上,它的大小为 2TB。这个想法的目的是保护 GPT 磁盘免受不支持 GPT 的磁盘工具损坏。如果这类工具检查磁盘,它们将把磁盘视为没有空闲空间的 MBR 磁盘。(有的磁盘工具能够创建一个混合 MBR,除 EFI GPT 分区外,这个混合 MBR 将最多定义三个 MBR 分区。这个想法的目的是使一个不支持 GPT 的操作系统,比如 Windows® 的大多数版本,与 GPT 分区在一个磁盘上共存。然而,这个配置显然是非标准的,杂乱的)。
由于 GPT 包含了一个保护性 MBR,一台基于 BIOS 的计算机可以使用存储在这个保护性 MBR 的代码区域的引导装载程序从一个 GPT 磁盘引导,但这个引导装载程序和操作系统必须都是支持 GPT 的。EFI 包含自己的引导装载程序,因此您可以在一个基于 EFI 的系统上从一个 GPT 磁盘引导。
GPT 的主要问题是兼容性:低级别磁盘工具和操作系统必须全部支持 GPT。这种支持对 Linux 相当普遍,尽管您可能需要处理一些细节,并针对低级别磁盘维护更换您使用的部分工具。如果您要多重引导一台计算机,您必须检查所有操作系统的 GPT 支持。
采用 GPT 的额外好处
GPT 的最大好处当然是它消除了 2TB 这个障碍。但是,即使您不必处理 2TB 的磁盘,您也可能会考虑采用 GPT。CRC 和备份数据结构是在低于 2TB 的磁盘上转换到 GPT 的最重要的好处,尽管这一点存在争议。主分区和逻辑分区的区别丧失也可能对一些用户很重要。遗憾的是,许多需要主分区的操作系统都不能从 GPT 磁盘引导。
如果您管理许多 Linux 系统,或者如果您打算在不久的将来添加一个超过 2TB 的磁盘,您可能想要使用 GPT 进行一个安装测试。在完全必要是才进行安装测试可以使您事先对 GPT 的特性有亲身体验,并了解一些支持 GPT 的 Linux 工具的一些特性。
![]() ![]() |
使用 GPT
如果想要(或需要)投身 GPT,您必须做好准备。有三类主要的软件需要 GPT 支持:内核、引导装载程序和低级别磁盘工具。如果您使用 GPT 是因为正在创建一个非常大的 RAID 磁盘组,那么可能要检查文件系统是否支持超大磁盘。
注意:如果您正在从头开始安装 Linux 并想使用 GPT,您的安装程序必须在所有这三个类别的软件中都提供 GPT 支持。否则,您需要至少对系统引导盘使用 MBR 或者在安装到 MBR 之后转换到 GPT(这是一种有潜在风险或单调乏味的建议)。
内核支持
Linux 必须能够解析 GPT 数据结构,以便对磁盘包含的分区提供访问。幸运的是,长久以来,Linux 一直包含这种支持。如果您要编译自己的内核,确保选中 File Systems 配置区域的 Partition Types 区域中的 EFI GUID Partition Support 选项(如图 1 所示)。
图 1. Linux 内核提供 GPT 支持,但是编译一个新的内核时必须启用 GPT 支持

如果您没有编译自己的内核,那么就要看您的发行版提供商是否启用了这个支持。幸运的是,大多数发行版提供商都启用了 GPT 支持,但是您应该验证这个细节。如果您不确定,您可以使用一个支持 GPT 的分区工具在一个闲置硬盘或者一个小型可移动硬盘(比如 USB 闪存驱动器)上建立 GPT 分区。如果 Linux 能够识别这些分区,那么您的内核就是正确配置的。
引导装载程序支持
引导装载程序也许是 Linux GPT 链中最薄弱的一环。Linux 系统通常使用 Linux Loader (LILO) 或者 Grand Unified Bootloader (GRUB) 来引导内核。LILO 不支持 GPT,因此,如果您的系统使用 LILO,您必须切换到 GRUB — 但并非所有 GRUB 版本都支持 GPT。
传统 GRUB 的最新正式版是 0.97。这个版本的 GRUB 不支持 GPT,但是,针对这个版本的 GPT 支持补丁很普遍。因此,如果您安装的是 GRUB 0.97 版,您也许能够或不能够从 GPT 磁盘引导。现在有一个全新的 GRUB 架构(称为 GRUB2),但它还处于试验阶段。GRUB2 包含 GPT 支持。
总的说来,如果您想使用 GPT,最好的途径是安装发行版 GRUB 0.97 并包含 GPT 补丁。如果它不包含,也不是没有别的办法。您可以启动 Linux SystemRescueCd 并重新安装 GRUB。这将引导您的系统,并假定其他所有项目都是正确配置的。
工具支持
GPT 支持的第三个领域是系统工具。Linux 提供多种 MBR 磁盘分区工具,包括 fdisk、cfdisk、sfdisk、GNU Parted 和 GNOME Partition Editor (GParted) 等。这些工具中的大部分都不支持 GPT,因此,如果您想使用 GPT,必须使用那些能够处理这个任务的工具。
在常用工具中,只有基于 libparted 的工具 — 比如文本模式的 GNU Parted 或 GUI GParted — 可以处理 GPT。fdisk 程序和它的变体将向您显示 MBR 数据,可能还有一个警告,告知您检测到 GPT 数据。如果您想要使用 GNU Parted 在一个磁盘上创建新的 GPT 分区,就必须启动该程序,然后使用它的 mklabel 命令:
清单 1. 使用 Parted 创建 GPT 磁盘分区
# parted /dev/sdc GNU Parted 1.7.1 Using /dev/sdc Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) mklabel New disk label type? gpt (parted) |
此时,您可以使用 GNU Parted 的 mkpart 或 mkpartfs 命令开始创建分区,或者以别的方式操作分区和文件系统。创建分区后,您可以使用普通的 Linux 文件系统工具(比如 mkfs)在磁盘上创建文件系统。您也可以按照在 MBR 磁盘上的相似方式创建逻辑卷管理(LVM)和 RAID 配置。
如果您喜欢 GUI 工具,可以使用 GParted。单击 Device > Set Disklabel 创建一个新的 GPT 数据结构。单击 Advanced,然后从 Select new labeltype 列表选择 gpt(如图 2 所示)。单击 Create 创建新的 GPT 数据结构。然后可以像操作一个 MBR 磁盘一样创建新的分区。
图 2. 在 GNOME Partition Editor 中创建 GPT 分区时必须明确设置 GPT 标签类型

如果您有一个 MBR 磁盘,GNU Parted 和 GParted 的 GPT 创建工具本质上是破坏性的:使用这些工具将这个 MBR 磁盘转换为一个 GPT 磁盘的唯一方法是销毁现有的 MBR 分区。如果您想转换一个适当的 MBR 磁盘,可以检查 GPT fdisk,这是一个 fdisk 风格的 GPT 分区操作工具。但是,GPT fdisk 非常新并且不成熟,您必须谨慎。