在 Windows 8 中启用对大容量磁盘和大容量扇区的支持
文件系统是操作系统提供的一项最基本的服务,在大家广泛使用的所有操作系统中,Windows 拥有最高级的文件系统之一。在 Windows 7 中,我们大幅提高了操作系统的可靠性、管理性能以及稳定性(例如,颠覆“碎片整理”的传统概念,彻底实现其自动化)。在 Windows 8 中,我们将继续展开这一工作,并将工作重心放在规模和容量方面。本篇博文的作者是存储与文件系统团队的项目经理 Bryan Matthew。
--Steven
我们的数字收藏集中的内容正在以一个令人恐怖的速度飞速增长,因为其中包含了大量高分辨率的数码照片、高清家庭电影和大型音乐收藏集。硬盘供应商则 通过交付超大容量硬盘驱动器的方式响应了这一挑战,据 IDC 一份最新的市场研究报告预测,到 2015 年,单个硬盘驱动器的最大容量将会提升至 8TB。
单个磁盘驱动器最大容量随时间推移的增长情况
(资料来源:IDC 研究第 228266 号,Worldwide Hard Disk Drive 2011–2015 Forecast:
Transformational Times,2011 年 5 月)
在本篇博文中,我将与各位探讨 Windows 8 将如何与行业合作伙伴的产品一道获得改进,从而让您更高效、更充分地使用这些超大容量的驱动器。
超大容量硬盘驱动器的挑战
在开始讨论之前,您需要了解一些背景知识,我们将单个磁盘驱动器大小大于 2.2TB 的磁盘驱动器定义为“超大容量”的磁盘驱动器。由于 Windows 的当前体系结构存在一些限制,导致在某些情况下,在处理这些驱动器时会有些困难。
尽管硬盘驱动器的供应商以一种创新方式推出了超大容量的驱动器,但是仍有两大关键挑战需要引起我们的重点关注:
- 确保整个可用容量是可寻址的,以便充分利用磁盘的容量
- 为硬盘驱动器的供应商提供支持,帮助其交付管理更为高效的物理磁盘:4K(大型)扇区大小
接下来,让我们更详细地讨论这两项挑战。
寻址所有可用容量
为充分理解寻址超大容量磁盘中所有可用容量的难度所在,我们必须深入研究以下问题:
- 寻址方式
- 磁盘分区方案
- PC 中的固件实现 – BIOS 还是 UEFI
寻址方式
起初,用户可使用 CHS(柱面-磁头-扇区)方法来寻址磁盘,利用该方法,您可通过指定某特定数据块所在的柱面、磁头和扇区来确定该特定数据块在磁盘中的位置。我记得在 2001 年(当时我还是名初中生!),我们见证了 160GB 磁盘的诞生,它突破了 CHS 寻址方式的极限(约为 137GB),因此系统需要加以重新设计以支持更大容量的磁盘。[编者按:我的第一个硬盘驱动器的容量为 5MB,个头有立式 PC 那么大。--Steven]
新的寻址方法称为“逻辑块寻址”(LBA),该方法并未使用离散几何结构来引用扇区,而是使用了一个“扇区编号”(逻辑块地址) 来引用磁盘上的某个特定数据块。我们对 Windows 进行了更新,以使用这一新机制来寻址硬盘驱动器中的可用容量。利用 LBA 方案,每个扇区都拥有一个预定义的大小(直到最近,每个扇区的大小一直为 512 字节),而且计算机将以单调递增的顺序对各扇区进行寻址,即从“扇区 0”开始,一直到“扇区 n”,其中:
n =(以字节为单位的总容量)/(以字节为单位的扇区大小)
磁盘分区方案
尽管 LBA 寻址方式在理论上可实现对无穷大容量的访问,但在实践中,“n”的最大值会受到相关“磁盘分区方案”的限制。
磁盘分区的概念可追溯到 20 世纪 80 年代,当时,系统实施者认识到需要将磁盘驱动器分成多个“分区”(即子部分),这些分区 可使用文件系统分别进行格式化,并随后用于存储数据。主启动记录分区表 (MBR) 方案正是在这一时期问世的,该方案可存储高达 32 位的信息量,这也限定了磁盘的最大容量。借助简单的数学知识,我们便可知道 32 位磁盘的最大可寻址字节数为 232(即 2.2TB)。当然,在 20 世纪 80 年代,由于当时用户的最大磁盘容量仅为 5MB,而且该磁盘的售价高达 1500 多美元,因此这看起来是一项完美且实用的限度!
早在 20 世纪 90 年代末,系统实施者已经认识到了突破 2.2TB 寻址限度的需求(基于其他方面的需求)。因此,多家公司联手开发了一种名为“GUID 分区表”(GPT) 的可扩展分区方案,并将其吸纳为“统一可扩展固件接口”(UEFI) 规范的一部分。GPT 允许的信息存储位数高达 64 位,从而在理论上实现了高达 9.4 泽字节的容量(1 ZB = 1,000,000,000,000,000,000,000 字节),这是单片 64 位磁盘的最高存储容量。
自 Windows Vista 64 位以来,Windows 便开始支持从 GPT 分区的硬盘驱动器启动的功能,并在该功能中囊括了一项关键要求,即系统固件必须为 UEFI。我们已经就 UEFI 展开过讨论,因此您一定知道它将作为一项新功能出现在 Windows 8 的 PC 中。而这也将为我们引出固件的主题。
PC 中的固件实现 – BIOS 或 UEFI
PC 供应商所提供的产品中包含负责基本硬件初始化(其他事项除外)的固件,完成基本硬件初始化后,才会将控制权转交给操作系统 (Windows)。古老的 BIOS(基本输入输出系统)固件实现早在 PC 问世时(即 1980 年前后)就已经出现。由于 PC 在过去数十年中已获大幅改进,因此我们开发出了 UEFI 规范来取代 BIOS,并于 20 世纪 90 年代末予以实施。我们从零开始设计了 UEFI,并通过使用 GUID 分区表或 GPT 来操作超大容量的驱动器,尽管某些 BIOS 实现试图通过使用面向大容量驱动器的工作方法(例如混合的 MBR-GPT 分区方案)来提高其关联度和实用性。这些机制非常脆弱,而且将对数据产生较大风险。因此,Windows 始终要求组合使用现代 UEFI 固件和 GPT 方案来启动磁盘。
从 Windows 8 开始,Windows 中的众多新功能都必须使用 UEFI。UEFI 固件 + GPT 分区 + LBA 这一组合,使 Windows 能够轻松地完美解决大容量存储问题。
我们的合作伙伴正努力交付使用了 UEFI 的基于 Windows 8 的系统,以帮助启用 Windows 8 中的这些创新功能和应用场景(例如,安全启动、加密驱动器和快速启动)。预计在 Windows 8 发布时,新系统将支持将 Windows 8 安装至 3TB 或更大容量的磁盘,并从该磁盘中启动。以下是预览画面:
采用 UEFI 系统从 3 TB SATA 驱动器启动的 Windows 8
4KB(大型)扇区大小
所有硬盘驱动器均包括某种形式的内置纠错信息和逻辑,这可让硬盘驱动器的供应商在从磁盘盘片中读取内容时,自动处理“信噪比”(SNR)。随着磁盘容量的增加,磁盘中数据位彼此间的距离将变得越来越近;而随着数据位的距离越来越近,在从磁盘中读取数据时,SNR 将有所下降。为了弥补 SNR 降低所造成的影响,磁盘中的各个扇区需要存储更多“纠错码”(ECC) 来补偿读取扇区时发生的错误。在现代磁盘中,当前的 ECC 存储方式不再能够有效地利用空间,也就是说,当前 512 字节的扇区中有许多空间已被用来存储 ECC 信息,而无法为您存储数据。这一点,与一些其他问题一道催生了扩大扇区大小的需求。
更大的扇区大小 –“高级格式”的介质
借助更大的扇区,用户可使用不同方案对 ECC 进行编码;从而提高纠错的效率,并从整体上节省空间。这一高效操作有助于在将来启用更大的容量。硬盘制造商同意使用称为“高级格式 (AF)”的 4KB 扇区大小,并于 2009 年年底推出了首款 AF 驱动器。从那时起,硬盘制造商迅速将其产品线转向 AF 介质,并预计将来所有存储设备都将使用这一格式。
读取-修改-写入
对于 AF 磁盘,介质中数据的物理布局将按照 4KB 大小的数据块进行安排。对介质进行更新只能在这一粒度上进行,因此,如需按更小的单元启用逻辑块寻址,磁盘需要执行一些特殊操作。采用物理扇区大小的单元 写入无需执行这一特殊操作,因此,您可将物理扇区大小视为该介质的原子单元。
如下图所示,4KB 的物理扇区可以按 512 字节的逻辑扇区进行逻辑寻址。为了写入单个逻辑扇区,磁盘并不能简单地将磁头移动至物理扇区的这一部分并开始写入,而是需要将整个 4KB 物理扇区读取到缓存中,并在缓存中修改 512 字节的逻辑扇区,然后再将整个 4KB 的物理扇区写回到介质(替换旧数据块)。这一过程称为“读取-修改-写入”。
具有此模拟层(用于支持未对齐写入)的磁盘称为“具有 512 字节模拟的 4K”(简称“512e”)磁盘。不具有此模拟层得磁盘称为“4K 原生”磁盘。
由于存在“读取-修改-写入”过程,产生大量未对齐写入的应用程序或工作负载的性能可能会受到一定影响。为支持此类介质,Windows 需要确保应用程序能够检索设备“物理”扇区的大小,而且应用程序(包括 Windows 的应用程序和第三方应用程序)需要确保它们能将 I/O 与报告的“物理”扇区大小进行对齐。
设计大容量的扇区磁盘
在了解了 Windows 早期版本所存在的问题之后,在 Windows 8 中,我们始终将 AF 磁盘作为新功能和技术设计的关键点;因此,Windows 8 也是首款可完美支持“两”类 AF 磁盘(“512e”和“4K 原生”)的操作系统。
为实现这一目标,我们确定了最易遭受上述潜在问题影响的功能和技术领域,并与开发这些功能的团队取得了联系,为他们提供指导,帮助他们为这些应用场景测试硬件。
我们已解决的问题包括:
- 引入了新 API 并增强了现有 API,从而让应用程序更好地查询磁盘物理扇区的大小
- 增强 NTFS 文件系统中的大容量扇区感知功能,其中包括执行扩展写入(写入至该文件的尾端)时确保将填充恰当的扇区
- 将大容量扇区感知功能纳入 Hyper-V 所使用的新 VHDx 文件格式中,从而全力支持两类 AF 磁盘
- 当从“4K 原生”磁盘启动时,确保 Windows 启动代码可正常工作
这仅是我们为确保 Windows 8 可通力支持两类 AF 磁盘所开展工作中的冰山一角。我们还与 Microsoft 内部以及整个行业内的其他产品团队展开了密切合作,以确保 AF 磁盘可高效、准确地运行。
总结
Windows 8 中的 NTFS 充分利用了我们行业合作伙伴所提供的功能,从而可为大容量磁盘提供高效支持。因此,您大可放心:Windows 8 和 NTFS 将从一开始便将很好地处理您大容量的存储需求!