首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

通过 GPT 和 Linux 充分利用大型驱动器(1)

通过 GPT 和 Linux 充分利用大型驱动器(1)

在开始寻找您的硬盘分区模式替代方法之前,最好回顾一下迫使这种变化出现的限制。理解这些限制(和克服这些限制的建议工具)将使您能够对应该以多快的速度从主引导记录 (MBR) 跳到 GUID Partition Table (GPT) 做出判断。如果新磁盘采购任务迫在眉睫并且您正在考虑采用 GPT,那么这一点尤为重要。即使在较小的磁盘上,GPT 也比 MBR 更有优势,但是您必须平衡这种优势与现实转换遇到的困难。
理解 MBR 的限制理解磁盘的计量磁盘大小历来以千字节 (KB)、兆字节、千兆字节 (GB) 和太字节 (TB) 为计量单位。不幸的是,这些单位的含义往往并不清楚。千、兆 和其他名称均取自国际系统 (SI) 单位,它们描述了公制所使用的单位。正因为如此,SI 单位使用十进制(基数为 10)乘数, 意味着以 1000 为基本单位, 指以 1,000,000 为基本单位,依此类推。然而,在计算机领域,二进制(基数为 2)单位往往更方便。因此,SI 前缀经常(但并不总是)被应用为与某些十进制单位接近的二进制单位, 表示 1,024, 表示 1,048,576,等等。
不幸的是,SI 单位在二进制计量中的这种不一致的应用,可能会导致混乱。传统硬盘制造商和某些磁盘实用工具历来以基于 10 的方式使用 SI 单位,而其他实用工具则使用基于 2 的单位。这种选择导致所报告的大小存在差异。在软盘的日子里,这种差异很小;但在今天,差异大幅增加。在 TB 级,差距大约有 10%。因此,在 2005 年,电气和电子工程师学会 (IEEE) 为二进制单位创建了一个新标准,其名称为 IEEE1541-2002(以下简称 IEEE1541)。这个新系统针对二进制单位采用新的名称和后缀缩写 kibibytes(KiB,210 字节)、mebibytes(MiB,220 字节)、gibibytes(GiB,230 字节)、tebibytes(TiB,240 字节),依此类推。
在本文中,IEEE1541 和 ​​SI 单位均有使用,这取决于哪种单位在上下文中最合适。由于大多数(但不是全部)数据结构限制最适合使用二进制进行描,因此使用 IEEE1541 单位,但是磁盘大小和某些数据结构限制更接近于十进制的限制,因此要使用 SI 单位。

MBR 分区系统是一个数据结构补丁的大杂烩,用于克服早期的限制。MBR 自身完全驻留在一个硬盘的第一个扇区(512 字节)上。MBR 的前 400 个字节专门用于存储代码:引导装载程序 (boot loader)。计算机引导时,基本输入/输出系统 (BIOS) 读取并执行这段代码。
在这个代码区域之后,MBR 将数据存储在大约 4 个分区上,这些分区称为主分区。每个分区采用两种方法进行描述:“柱面/磁头/扇区 (CHS)” 标记法和 “逻辑块寻址 (LBA)” 标记法。今天,CHS 标记法几乎成为了老古董,因为它是一个 24 位的数字。这意味着它只限于描述 8GB 大小的磁盘区域。假设一个扇区大小为 512 字节,32 位的 LBA 值支持 2TiB 大小。但是这个 2TiB 上限不太容易突破;因为在 MBR 中没有留下任何未分配的字段,可用于向 LBA 地址添加更多位。
                除了这个可见的 2TiB 问题之外,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 位,假设 512 字节扇区,这意味着 GPT 可以处理的磁盘大小最高达 512 x 264 字节(8 zebibytes,即 86 亿 TiB)。
  • GPT 数据结构在磁盘上存储两次:开始和结束各一次。在因事故或坏扇区导致损坏的情况下,这种重复提高了成功恢复的几率。
  • 循环冗余检验 (CRC) 值针对关键数据结构而计算,提高了数据崩溃的检测几率。
  • GPT 将所有分区存储在单个分区表中(带有备份),因此扩展分区或逻辑分区没有存在的必要。GPT 默认支持 128 个分区,当然您也可以更改分区表的大小,如果您的分区软件支持这种更改的话。
  • 虽然 MBR 提供 1 字节分区类型代码,但 GPT 使用一个 16 字节的全局唯一标识符 (GUID) 值来标识分区类型。这使分区类型更不容易冲突。
  • GPT 支持存储人类可读的分区名称。您可以使用这个字段来命名您的 Linux® /home、/usr、/var 和其他分区,以便它们在分区软件中更容易识别。
磁盘的第一个扇区专用于一个保护性 MBR,它是一个法定 MBR 数据结构,它定义一个单一分区类型 0xEE (EFI GPT)。在低于 2TiB 磁盘上,这个分区将扩展到整个磁盘;在更大的磁盘上,它的大小应为 2TiB。这个想法的目的是保护 GPT 磁盘免受不支持 GPT 的磁盘工具损坏。如果这类工具检查磁盘,它们将把磁盘视为没有空闲空间的 MBR 磁盘。(有的磁盘工具能够创建一个混合 MBR,除 EFI GPT 分区外,这个混合 MBR 将最多定义三个 MBR 分区。这个想法的目的是使一个不支持 GPT 的操作系统,比如,Windows® 的大多数预览版 Windows Vista®,与 GPT 分区在一个磁盘上共存。然而,这个配置显然是非标准的,杂乱的)。
由于 GPT 包含了一个保护性 MBR,一台基于 BIOS 的计算机可以使用存储在这个保护性 MBR 的代码区域的引导装载程序从一个 GPT 磁盘引导,但这个引导装载程序和操作系统必须都支持 GPT。(不过,一些有缺陷的 BIOS 无法从 GPT 磁盘引导。)EFI 包含自己的引导装载程序,因此您可以在一个基于 EFI 的系统上从一个 GPT 磁盘引导。
GPT 的主要问题是兼容性:低级别磁盘工具和操作系统必须全部支持 GPT。这种支持对 Linux 相当普遍,尽管您可能需要处理一些细节,并针对低级别磁盘维护更换您使用的部分工具。如果您要多重引导一台计算机,您必须检查所有操作系统的 GPT 支持。
如果您管理许多 Linux 系统,或者如果您打算在不久的将来添加一个超过 2TiB 的磁盘,您可能要考虑采用 GPT 进行一个安装测试。在完全必要时才进行安装测试可以使您事先对 GPT 的特性有关身体验,并了解一些支持 GPT 的 Linux 实用工具的奇怪行为。
利用 MBR 和 GPT 磁盘的组合来运行一个系统,这是有可能实现的。例如,您可以从 MBR 磁盘引导,但仍然使用 GPT 作为数据磁盘。这样的配置对基于 BIOS 的系统上的 Windows 是最有用的,因为 Windows 无法使用 BIOS 从 GPT 启动,但 Windows Vista 和更高版本的 Microsoft 操作系统可以使用 GPT 数据磁盘。
使用 GPT有三类主要的软件都需要 GPT 支持:内核、引导装载程序和低级别磁盘实用工具。如果您使用 GPT 是因为正在创建一个非常大的独立磁盘冗余阵列 (RAID),那么可能要检查文件系统是否支持超大磁盘。
注意:如果您正在从头开始安装 Linux 并想使用 GPT,您的安装程序必须在所有这三个类别的软件中都提供 GPT 支持。在 2012 年,所有 Linux 主要发行版均提供了该支持。
内核支持Linux 内核必须提供 GPT 支持,以便对磁盘分区上的数据提供访问。幸运的是,长久以来,Linux 一直包含这种支持。如果您要编译自己的内核,确保选中 Enable the Block Layer 配置区域的 Partition Types 区域中的 EFI GUID Partition Support 选项,如  所示。(该菜单项通常位于 File Systems 下,如果您想获得较旧版本的内核,请查看该位置。)
图 1. Linux 内核提供 GPT 支持,但在编译一个新的内核时必须启用 GPT 支持 如果您没有编译自己的内核,那么就要看您的发行版提供商是否启用了这个支持。幸运的是,大多数发行版提供商都启用了 GPT 支持。如果您不确定,您可以使用一个支持 GPT 的分区工具在一个测试硬盘上建立 GPT 分区。如果 Linux 能够识别这些分区,那么您的内核就是正确配置的。
返回列表