硬盘寻址的变换–硬盘大小在突破中前进

因为硬件、软件设计上的缺陷,大容量硬盘曾在历史上多次造成麻烦,最近一次硬盘容量问题出现在2.2TB身上,因此在开发Windows 8的时候,微软就充分考虑了大容量硬盘的完整支持问题,以及新的4KB扇区格式。

1, 8G限制-硬盘寻址的限制 硬盘最初使用的寻址方法是柱面/磁头/扇区CHS(Cylinder/Head/Sector),也称为3D模式,是硬盘最早采用的寻址模式。通过分别指定柱面、磁头、扇区来确定某个数据块的确切位置,它是在硬盘容量较小的前提下产生的。硬盘的C/H/S 3D参数既可以计算出硬盘的容量,也可以确定数据所在的具体位置。这是因为扇区的三维物理地址与硬盘上的物理扇区一一对应,即三维物理地址可完全确定硬盘上的物理扇区。三维物理地址通常以C/H/S的次序来书写,如C/H/S为0/1/1,则第一个数字0指0柱面,第二个数字1指1磁头(盘面),第三个数字1指1扇区,表示该数据位于硬盘1盘面上的0磁道1扇区。现在定位已完成,硬盘内部的参数和主板BIOS之间进行协议,正确发出寻址信号,从而正确定位数据位置。 早期硬盘一个磁道上分 63个扇区,物理磁头最多 16个( 8个盘片,盘片多了硬盘那就真要加厚了)。采用 8位寻址方式, 8位二进制位的最大值是 256( 0-255),可以表示磁头数,而扇区只有 63个( 1-63),只需要其中 6个二进制位即可表示,剩下 2位拿去表示柱面,柱面数用 10(8+2)位来表达,达到 1024个柱面( 0-1023),因此总扇区数( 1024×16×63)。前面说一个扇区大小为 512byte,这也就是说,如果以 C/H/S寻址模式寻址,则 IDE硬盘的最大容量只能为 1024×16×63×512B= 500MB左右。 可以思考下,在8位寻址模式下,其实可以寻址的硬盘最大容量为1024×256×63×512B =8G,那为啥CHS模式硬盘只支持到500MB呢因很简单,我们的硬盘盘片不可能让128片盘片重叠起来吧,那会是多厚
2,  137G限制-主板的限制
   经常去买硬盘的人都知道,目前硬盘经常都说单碟、双碟,其实意思就是说硬盘盘片只有 1个或者 2个,而且都只是用一面,单碟一个磁头而已,但是硬盘容量确是几百 G,而且硬盘柱面往往都大于 1024个柱面, CHS是无法寻址利用完这些硬盘容量的。   另外由于老硬盘的扇区划分方式对硬盘利用率不高,因此出现了现在的等密度盘,外圈的扇区数要比内圈多,原来的 3D寻址方式也就不能适应这种方式,因此也就出现了新的寻址方式 LBA,这是以扇区为单位进行的线性寻址方式,即从最外圈柱面 0开始,依次将扇区号编为 0、 1….等等,举个例子,假设硬盘有 1024个柱面,由于是等密度硬盘,柱面 0(最外圈 )假设有 128个扇区,依次编号为 0-127,柱面 1有 120个扇区,则依次编号为 127-246, …..依次最内圈柱面 127只有扇区 64个,则编号到最后。因此要定位到硬盘某个位置,只需要给出 LBA数即可,这个就是逻辑数。   在 LBA   模式下,为了保留原来 CHS 时的概念,也可以设置柱面、磁头、扇区等参数,但是他们并不是实际硬盘的物理参数,只是为了计算方便而出的一个概念, 1023 之前的柱面号都一一物理对应,而 1023 以后的所有柱面号都记录成 1023 磁头最大数可以设置为 255 ,而扇区数一般是每磁道 63 个, 硬盘 控制器会把由柱面、磁头、扇区等参数确定的地址转换为 LBA 数。      LBA寻址方式的出现解决了CHS寻址对硬盘大小的限制。利用 LBA 方案,每个扇区都拥有一个预定义的大小(直到最近,每个扇区的大小一直为 512 字节),而且计算机将以单调递增的顺序对各扇区进行寻址,即从“扇区 0”开始,一直到“扇区 n”,其中:

n =(以字节为单位的总容量)/(以字节为单位的扇区大小)

尽管 LBA 寻址方式在理论上可实现对无穷大容量的访问,但在实践中,“n”的最大值会受到相关“磁盘分区方案”的限制。

但是新的问题又出现了,早些时候出产的主板大多使用28bit LBA硬盘寻址方式,而LBA方式是指以逻辑块方式使用硬盘的,其中每个逻辑块的大小是512字节。于是在28位LBA硬盘寻址方式下,逻辑块数目的理论 极限是2的28次方即268435456块,每块乘以512字节,则硬盘的理论容量极限就是:268435456(块)*512(字 节)=137,438,953,472字节=137GB。当然,这也是由于以前人们使用的硬盘的大小通常都较小,主板的发展脚步要落后于硬盘的发展,后来 到了硬盘已经超过137GB大小的时候,主板生产规则还停留在采用28bit LBA硬盘寻址的时代,于是137GB容量限制的就来了!但这种方法在137GB以上容量硬盘面前就失效了。
3, 2.2T的限制-磁盘分区机制
超过了137GB的容量以后,需要48位寻址的支持来突破137GB的容量。 2001 年底,按照Big Drives规范(世界T13组织的48 bit寻址解决方案),主板芯片组南桥必须支持137G以上的硬盘容量,很多芯片组厂商都推出了符合Big Drives规范的南桥芯片。48位寻址模式可以寻址的扇区数为2的48次方即281,474,976,710,655,这样可支持的硬盘容量就达到了 281,474,976,710,655×512=144,115,188,075,855,872字节,大致相当于 144PB(1PB=1000,000,000,000,000字节),对普通用户接近于无穷大,在一定时间内应该是足够使用了        LBA寻址方法理论上支持超大硬盘容量,但实际上扇区的数量还受制于磁盘分区机制。

磁盘分区的概念可以追溯到二十世纪八十年代初,是系统管理员们为了方便使用不同文件系统存储数据而发明的。主引导记录(MBR)分区表支持最多32-bit信息,换算成字节数就是2的32次方,也就是大约2.2TB。

你也许会蔑视他们的“短视”,但在三十年前的人们看来,2.2TB几乎就是个遥不可及的天文数字,要知道当时最大的民用硬盘也不过5MB,而价格超过1500美元。

其实刚刚进入九十年代的时候,人们就已经意识到了2.2TB容量限制问题,为此多家公司联合制定了一种弹性的分区机制,这就是GUID分区表,简称 GPT,并将其做为UEFI(统一可扩展固件界面)规范的一部分。GPT支持最多64-bit信息,理论最大容量为9.4ZB,相当于 9400000000TB。又是一个“天文数字”,不过说不定哪天就会成为第二个“2.2TB”。

4, 4K大小的扇区

  UEFI从设计之初就考虑了对GUID分区表合超大容量硬盘的支持,所有硬盘都内建了某种形式的错误纠正信息和逻辑,以便在读取磁盘碟片的时候自动处理信噪比(SNR)。随着硬盘容量的增大,数据存储位越靠越 近,SNR随之降低,硬盘的每个扇区就都不得不存储更多的ECC(错误校验码),以弥补读取错误,512字节的狭窄扇区空间慢慢就不够用了。

于是,硬盘厂商将扇区容量扩大到了4KB,称之为“高级格式”(AF),并使用了新的ECC编码机制,可以更高效地纠正错误,所占存储空间也更少,等同于扩大了可用容量。目前,西数、希捷等硬盘厂商都逐渐普及了4KB扇区格式。

扇区容量增大到4KB,数据的更新也必须按照这个尺寸来,所以为了实现更小数据块的逻辑寻址,硬盘必须做一些额外的工作。 

微软畅谈Windows 8支持大容量硬盘、4KB扇区

如上图,一个4KB物理扇区仍然可以划分成512字节逻辑扇区进行逻辑寻址。为了写入单独一个512字节的逻辑扇区,硬盘不能简单地把磁头挪到 4KB物理扇区上就写入,而是需要先把整个物理扇区中的数据读取到缓存中,在那里修改相应的512字节逻辑扇区,然后再整体写回去,覆盖旧扇区。这叫做 “读取-修改-写入”(Read-Modify-Write)。 

有这种中间转换层的硬盘叫做“4K with 512-byte emulation”,缩写为512e,而没有的叫做“4K Native”,即一个是模拟的,一个是原生的。

读取-修改-写入可能会在面临大容量非一致性数据的时候影响实际性能,因为Windows必须确保应用程序能够提取整个4KB物理扇区,应用程序则需要确保I/O的一致性以报告物理扇区尺寸。
 附录:MBR介绍

来源:卫见见

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2012年2月17日
下一篇 2012年2月18日

相关推荐