在开始寻找您的硬盘分区模式的替代方法之前,最好回顾一下迫使这种变化出现的限制。理解这些限制 — 和克服这些限制的建议工具 — 将使您对应该以多快的速度从 MBR 跳到 GPT 做出判断。如果新磁盘采购任务迫在眉睫并且您正在考虑采用 GPT,那么这一点尤为重要。即使在较小的磁盘上,GPT 也比 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 定义是 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 的最大好处当然是它消除了 2TB 这个障碍。但是,即使您不必处理 2TB 的磁盘,您也可能会考虑采用 GPT。CRC 和备份数据结构是在低于 2TB 的磁盘上转换到 GPT 的最重要的好处,尽管这一点存在争议。主分区和逻辑分区的区别丧失也可能对一些用户很重要。遗憾的是,许多需要主分区的操作系统都不能从 GPT 磁盘引导。
如果您管理许多 Linux 系统,或者如果您打算在不久的将来添加一个超过 2TB 的磁盘,您可能想要使用 GPT 进行一个安装测试。在完全必要是才进行安装测试可以使您事先对 GPT 的特性有亲身体验,并了解一些支持 GPT 的 Linux 工具的一些特性。
如果想要(或需要)投身 GPT,您必须做好准备。有三类主要的软件需要 GPT 支持:内核、引导装载程序和低级别磁盘工具。如果您使用 GPT 是因为正在创建一个非常大的 RAID 磁盘组,那么可能要检查文件系统是否支持超大磁盘。
注意:如果您正在从头开始安装 Linux 并想使用 GPT,您的安装程序必须在所有这三个类别的软件中都提供 GPT 支持。否则,您需要至少对系统引导盘使用 MBR 或者在安装到 MBR 之后转换到 GPT(这是一种有潜在风险或单调乏味的建议)。
Linux 必须能够解析 GPT 数据结构,以便对磁盘包含的分区提供访问。幸运的是,长久以来,Linux 一直包含这种支持。如果您要编译自己的内核,确保选中 File Systems 配置区域的 Partition Types 区域中的 EFI GUID Partition Support 选项(如图 1 所示)。
如果您没有编译自己的内核,那么就要看您的发行版提供商是否启用了这个支持。幸运的是,大多数发行版提供商都启用了 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 命令:
# 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 磁盘一样创建新的分区。
如果您有一个 MBR 磁盘,GNU Parted 和 GParted 的 GPT 创建工具本质上是破坏性的:使用这些工具将这个 MBR 磁盘转换为一个 GPT 磁盘的唯一方法是销毁现有的 MBR 分区。如果您想转换一个适当的 MBR 磁盘,可以检查 GPT fdisk,这是一个 fdisk 风格的 GPT 分区操作工具。但是,GPT fdisk 非常新并且不成熟,您必须谨慎。
GNU Parted、GParted 和其他使用 libparted 的工具的几个特点值得一提。最重要的是,当这些工具操作 GPT 数据结构时,它们通常会创建一些全新的保护性 MBR,这意味着它们将损坏引导装载程序。因此,在进行分区更改之后,可能需要重新安装 GRUB。分区类型的处理方式有一些奇怪:一些分区类型称为 flags。最明显的是,如果您想在一个 LVM 或 RAID 配置中建立一个可以使用的分区,则需要使用标记操作工具来完成分区创建操作。这些标记中的一个是 Microsoft Reserved(msftres),它在所有 FAT 分区上的设置都不正确,使得从 Windows 或 Mac OS X 无法访问该分区。(GPT fdisk 允许您改正这个问题)。
您可能已经注意到,Linux 采用了少量 MBR 分区类型代码(比如 0x82 和 0x83)来识别它的 MBR 分区。类似的 GUID 代码用于识别 Linux GPT 分区。一个重要的说明是,Linux 和 Windows 对它们的数据分区使用相同的 GUID。这样,仅从它们的分区表 GUID 区分 Linux 文件系统和 NTFS 或 FAT 是不可能的。GNU Parted 和 GParted 检查文件系统本身来识别文件系统,但并不是所有工具都这样做(比如 GPT fdisk)。您应该注意这点,或许您可以使用 GPT 分区名称字段来帮助区分分区。
如果您使用 GPT 是因为正在创建一个非常大的 RAID 磁盘组,那么可能要检查文件系统是否支持超大磁盘。表 1 总结了这些限制。(注意,分区选项不同,有些值也会不同)。这些值中的一部分相当大,可能使用不熟悉的后缀。1 terabyte 是 1024GB,1 petabyte (PB) 是 1024 TB,1 exabyte (EB) 是 1024 PB,1 zettabyte (ZB) 是 1024 PB。
文件系统 | 最大卷大小 | 最大文件大小 |
---|---|---|
第二扩展文件系统(ext2)和第三扩展文件系统(ext3) | 16TB | 2TB |
第四扩展文件系统(ext4) | 1EB | 16TB |
ReiserFS | 16TB | 8TB |
日志文件系统(JFS) | 32PB | 4PB |
XFS | 16EB | 8EB |
Btrfs(尚在开发) | 16EB | 16EB |
除了文件大小和卷大小限制外,还有文件系统性能差异。这个主题非常复杂,因此,您可能需要咨询某些专家,他们运行的安装程序应与您正在计划的安装程序类似。
GPT 分区可能会产生一些特殊问题,特别是您的计算机使用 EFI 或在一个多重引导环境中运行时:
- EFI 需要一个称为 EFI System Partition (ESP) 的分区。 GNU Parted 认为 ESP 拥有引导标记集。ESP 通常 200MB 左右,并针对 FAT-32 格式化。它包含引导过程中 EFI 可以使用的驱动程序。如果您的计算机使用 BIOS 引导,则不需要这个分区。
- 许多 GPT 分区工具在每个分区之后创建 128MB 左右的空间(ESP 不适用这个规则)。这个规则是为了使磁盘工具可以使用这个空间来帮助完成它们的任务。
- 在 Mac OS X 系统上,创建的分区的大小是 4KB 的倍数(通常是 8 个扇区)。这个特性与 HFS Plus 文件系统有关,大多数现代 Macs 都使用该文件系统。
您可以遵循这些规则,也可以对它们置之不理,这完全取决于您自己的判断。Linux 很灵活,即使您不理睬这些规则,它也不会出现问题,除非您的计算机需要一个 ESP 来引导。
您也可以运行一个带有混合 MBR-GPT 配置的系统 — 您可以对一个磁盘使用 MBR 分区,而对另一个磁盘使用 GPT 分区。这样,如果您将一个超过 2TB 的新磁盘添加到您的系统,您不必修改低于 2TB 的原始磁盘的分区。实际上,这样可能是最安全的。
由于 MBR 的大小限制,GPT 将成为硬盘分区的标准。幸运的是,Linux 对这种转变做好了充分准备。尽管 Linux 用户可能不得不放弃某些工具(例如 LILO 和 fdisk),但其他可用工具(GRUB 和 GNU Parted 的补丁版)可以取代它们。理解这些要求将帮助您轻松地实现转变。您需要设置内核配置、引导装载配置,以及用于创建和管理分区的工具。
学习
- 提供关于 GPT 的布局和特性的详细信息。
- Apple 的 Technical Note TN2166 提供关于 Apple 的推荐分区规则的信息。
- 参阅来自 Intel 的 。
- “Linux 引导过程内幕”(developerWorks,2006 年 5 月)介绍 BIOS、引导装载程序和 Linux 内核如何相互协作,共同启动您的计算机。
- 在 developerWorks Linux 专区 寻找为 Linux 开发人员(包括 Linux 新手入门)准备的更多参考资料,查阅我们 最受欢迎的文章和教程。
- 在 developerWorks 上查阅所有 Linux 技巧 和 Linux 教程。
- 随时关注 developerWorks 技术活动和网络广播。
获得产品和技术
- 是一个成熟的文本模式 MBR 和 GPT 分区工具。
- 是一个基于 libparted 的 GUI MBR 和 GPT 分区工具。
- 程序是一个模拟 Linux fdisk 并且只支持 GPT 的分区程序。
- 提供关于 GRUB 0.97(旧 GRUB)和 GRUB2 的信息和资源。
- Linux SystemRescueCd 是一个有用的紧急维护工具,它包含一个支持 GPT 的 GRUB 版本,您可以从 CD 启动安装该 GRUB。
- 使用可以直接从 developerWorks 下载的 IBM 产品评估试用版软件,在 Linux 上构建您的下一个项目。
讨论
- 加入 My developerWorks 社区;您可以通过个人信息和定 制主页获得符合自己的兴趣的 developerWorks 文章,并 与其他 developerWorks 用户进行交流。
Roderick W. Smith 是一位顾问兼作家,他撰写了十多本关于 UNIX 和 Linux 的书,包括 The Definitive Guide to Samba 3、Linux in a Windows World 和 Linux Professional Institute Certification Study Guide。他目前定居罗得岛州的 Woonsocket 市。