有关硬盘的信息:
$ sudo fdisk -l
Disk /dev/sda: 250.1 GB, 250058268160 bytes
255 heads, 63 sectors/track, 30401 cylinders, total 488395055 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
...
所以写着有255个头。
来源:http://www.tldp.org/LDP/sag/html/hard-disk.html
从上图可以看出,磁盘有 255(磁头数量)/2(每个盘片两个磁头)=127 个盘片,这个数字似乎非常惊人。如何解释物理上的磁头含义?
答案1
正如评论中指出的那样,目前,所报告的物理驱动器几何形状的柱面/磁头/扇区数目已没有现实依据。 您可以放心地忽略这些数字。
为了了解发生了什么,我们必须回顾 1981 年最初的 IBM 5150 型 PC。
5150 的原生配置是磁带和软盘存储的某种组合。它最初甚至不支持硬盘(可以进行改装,但这需要单独的控制卡以及比工厂自带的更强大的电源;另外,它们是一个惊人的昂贵的奢侈)。对于软盘,用磁头、磁柱和扇区来表示介质是有意义的;这些数量可以很方便地转换为物理介质上的给定位置,并且在软件以及控制器固件和驱动器硬件中都相对容易使用。当您几乎按字节支付任何类型的存储费用时,这种简单性确实是一件好事。
由于 5150 的内存非常有限,RAM 和存储空间(基本型号有 16 KiB RAM;本回答正文硬盘的内存占用量约为一半,更不用说处理文本的软件了,因此尽可能少地浪费内存是很重要的。因此,参与的工程师提出了一组当时可能看起来很大的限制:磁柱使用 10 位编码,磁头使用 8 位编码,扇区号使用 6 位编码,所有这些都可以通过一些位移魔法,整齐地打包成三个字节。这允许寻址 256 个磁头、每个磁头 1024 个柱面和每个柱面 64 个扇区。(实际上,不使用每个数字 0。)使用 512 字节扇区,这允许寻址总计 8 GiB,巨大的1981 年的数据量。即使是更实用的十磁头驱动器也只能提供 320 MiB 的上限,而当时 5150 推出时的“高端”存储介质是160千字节软盘(每条磁道使用 8 个扇区,每条磁道或磁柱使用 40 个磁道或磁柱)。如果我们基于用单层 DVD(存储量略大于 4 GiB)而不是 8 GiB 驱动器替换软盘来推断,我们将看到单个驱动器能够存储大约 100 TB 的数据。近期市场上会出现这样的产品吗?我没想到。
一个复杂的因素是原始 IDE 标准使用了不同的 CHS 编码。它使用 28 位 CHS,将柱面编码为 16 位,磁头编码为 4 位,扇区编码为 8 位。由于每个人都喜欢兼容性,因此通过取两者中的最大者,我们得到 10 个柱面位、4 个磁头位和 6 个扇区位。由于未使用扇区 0,因此可以寻址 1,032,192 个扇区,每个扇区 512 字节,相当于 504 MiB。这是硬盘遇到的第一个限制:500 MB 障碍。通过使用具有 512 字节扇区的完整 IDE CHS 方案,并且不关心 IBM CHS 兼容性,您可以寻址 127.5 GiB。
此外,256 磁头驱动器从未真正在市场上流行起来。(即使在今天,大多数硬盘驱动器也使用不到六个盘片,每个盘片每侧各一个。)因此,有人想到了借用未使用的位并重新利用它们的技巧。因此,驱动器可以显示其实际拥有的磁头数量为实际数量的四倍,但实际上使用这两个额外的位来寻址磁柱。固件可以很容易地进行转换,因为它不需要像原始 5150 CHS 寻址格式那样受到限制,更不用说 IDE/ATA 和 IBM CHS 寻址的最低公分母了。但是,为了保持兼容性,驱动器仍必须呈现 CHS 几何。所以LBA辅助翻译几何诞生了。 这样就可以使用 CHS 方案的全部理论 8 GiB 寻址范围,但却给我们带来了像驱动器这样的怪物,报告说它们有数百个头,这样一些通过 CHS 几何来寻址所有驱动器扇区的方法。
CHS 一直以某种方式存活到 20 世纪 90 年代末,当时普通硬盘驱动器的大小开始接近其理论极限。那时,显然需要一些完全不同的东西。驱动器也变得越来越先进,大约在那个时候,驱动器开始能够透明地重新映射坏扇区(这以前是操作系统文件系统代码的责任,这就是为什么例如 MS-DOS 6.x“ScanDisk”能够对整个驱动器进行物理读/写扫描的原因)。特别是当您进入透明扇区重新映射领域时,整个 CHS 寻址概念变得毫无意义,因为没有任何内容表明您请求的 CHS 地址与最终使用的地址有任何关系。
这个想法的诞生只是为了解决将驱动器视为一捆扇区。 SCSI 已经存在这个问题一段时间了,最初使用 21 位 LBA,后来转向 32 位 LBA,但 PC 已经完全停留在 CHS 阵营,尽管即使在最初的 IDE 标准中,22 位 LBA 也是一种选择可以追溯到20 世纪 80 年代中期。这就是 LBA,即逻辑块寻址。与我们的目的相关的初始标准化 LBA 模式是 LBA-28,它允许寻址 128 GiB 的 512 字节扇区;ATA-6 已被 LBA-48 取代. 所有现代(1996 年以后) 驱动器是 LBA,并且操作系统知道驱动器可以有 512 字节或 4096 字节扇区。当操作系统的磁盘驱动程序需要一定量的数据时,它会发出读取请求扇区号 N,或者区间扇区号 M 到 N。 然后,物理驱动器可以自由地将其转换为它使用的任何内部几何形状,无论它选择使用什么方式。这包括映射到物理盘片或芯片,以及其中的位置,以及透明扇区重新映射。操作系统永远不需要知道或关心这些细节。这就是为什么您只需插入 SSD 就可以正常工作,尽管整个柱面、磁头和扇区的概念对于固态存储来说完全没有意义。我们目前使用 48 位 LBA 寻址,允许寻址 2^48(约 3*10^14)个扇区。使用 512 字节扇区,可以寻址 128 PiB;移至 4,096 字节扇区理论上可将其进一步提升至 1 EiB,尽管这可能需要更改设备通信协议。即便如此,128 PiB 也远远超出了当前技术的实际可行性,因此至少在不久的将来不太可能成为问题。(您需要将大约 20,000 个新式 6 TB 驱动器全部条带化为单个阵列才能接近。)
现代硬盘还会公开 SMART 自我监控数据,这样,如果操作系统或应用程序做它可以找出一些关于扇区重新映射等情况的信息。但是没有需要让操作系统查看该信息,因为(无论如何,理论上)它都是由驱动器内部处理的。