最多 65536 个柱面(编号 0-65535),16 个磁头(编号 0-15),每磁道 255 个扇区(编号 1-255),最大总容量为 267386880 个扇区(每个扇区 512 字节),即 136902082560 字节(137 GB)。 2001 年 9 月,首批大于此容量的硬盘(160 GB Maxtor Diamondmax)面世。
最多 1024 个柱面(编号 0-1023),256 个磁头(编号 0-255),每磁道 63 个扇区(编号 1-63),最大总容量为 8455716864 字节(8.5 GB)。 这在今天是一个严重的限制。 这意味着 DOS 无法使用当今的大容量硬盘。
如果 BIOS Int 13 调用和 IDE 硬盘 I/O 使用相同的 c、h、s 值,则两个限制会结合起来,最多可以使用 1024 个柱面、16 个磁头、每磁道 63 个扇区,最大总容量为 528482304 字节(528MB),即老式 BIOS 的 DOS 中臭名昭著的 504 MiB 限制。 这在 1993 年左右开始成为问题,人们开始采用各种技巧,包括硬件(LBA)、固件(BIOS 转换)和软件(磁盘管理器)。 “转换”的概念于 1994 年被发明:BIOS 在与硬盘通信时可以使用一种几何结构,而在与 DOS 通信时可以使用另一种伪造的几何结构,并在两者之间进行转换。
一些较旧的 BIOS 只为 CMOS RAM 中给出柱面数的字段分配 12 位。 因此,该数字最多为 4095,并且只能访问 4095*
16*
63*
512=2113413120 字节。 拥有更大硬盘的效果是在启动时挂起。 这使得几何结构为 4092/16/63 的硬盘非常流行。 即使在今天,许多大容量硬盘驱动器仍然配备跳线,使其显示为 4092/16/63。 另请参见 over2gb.htm。 其他 BIOS 不会挂起,但只会检测到小得多的硬盘,例如 429 MB 而不是 2.5 GB。
Phoenix 4.03 和 4.04 BIOS 固件中存在一个错误,该错误会导致容量超过 3277 MB 的驱动器在 CMOS 设置中锁定系统。 请参阅 over3gb.htm。
简单的 BIOS 转换(ECHS=扩展 CHS,有时称为“大容量硬盘支持”或简称为“Large”)的工作原理是重复将磁头数加倍,并将显示给 DOS 的柱面数减半,直到柱面数最多为 1024。 现在 DOS 和 Windows 95 无法处理 256 个磁头,在硬盘报告 16 个磁头的常见情况下,这意味着这种简单的机制仅适用于高达 8192*
16*
63*
512=4227858432 字节(具有 1024 个柱面、128 个磁头、每磁道 63 个扇区的伪造几何结构)。 请注意,ECHS 不会更改每磁道扇区数,因此如果不是 63,则限制会更低。 请参阅 over4gb.htm。
稍微智能的 BIOS 通过首先将磁头数调整为 15(“修订后的 ECHS”)来避免之前的问题,这样可以获得具有 240 个磁头的伪造几何结构,适用于 1024*
240*
63*
512=7927234560 字节。
最后,如果 BIOS 尽一切努力使此转换成功,并使用 255 个磁头和每磁道 63 个扇区(“辅助 LBA”或简称为“LBA”),则可以达到 1024*
255*
63*
512=8422686720 字节,略小于之前的 8.5 GB 限制,因为必须避免使用 256 个磁头的几何结构。 (此转换将使用序列 16、32、64、128、255 中的第一个值 H 作为磁头数,总硬盘容量适合 1024*
H*
63*
512,然后计算柱面数 C 为总容量除以 (H*
63*
512))。
下一个障碍出现在超过 33.8 GB 的容量时。 问题在于,使用默认的 16 个磁头和每磁道 63 个扇区,这对应于超过 65535 的柱面数,这不适合 short 类型。 许多 BIOS 无法处理此类硬盘。(例如,请参阅 华硕升级 以获取可用的新闪存映像。) 早于 2.2.14 / 2.3.21 的 Linux 内核需要补丁。 请参阅下面的 34+ GB 硬盘的 IDE 问题。
如上所述,旧的 ATA 协议使用 16+4+8 = 28 位来指定扇区号,因此无法寻址超过 2^28 个扇区。 ATA-6 描述了一种扩展,允许寻址 2^48 个扇区,是之前的百万倍。 最新内核中已提供支持。
使用 32 位扇区号,可以寻址 2 TiB。 一旦硬盘变得更大,许多软件将需要重写。
容量超过 8.4 GB 的硬盘驱动器应该将其几何结构报告为 16383/16/63。 这实际上意味着“几何结构”已过时,总硬盘大小不能再从几何结构计算出来,而是在 IDENTIFY 命令 返回的 LBA 容量字段中找到。 容量超过 137.4 GB 的硬盘驱动器应该报告 LBA 容量为 0xfffffff = 268435455 个扇区(137438952960 字节)。 现在,实际硬盘大小在新 48 位容量字段中找到。