本小节介绍与硬盘相关的术语。如果您已经了解这些术语和概念,可以跳过本小节。
有关硬盘重要部件的示意图,请参见图 5-1。硬盘由一个或多个圆形铝制 盘片\ 组成,这些盘片的单面或双面都涂有用于记录数据的磁性物质。对于每个盘面,都有一个读写头来检查或更改记录的数据。盘片在公共轴上旋转;典型的旋转速度为每分钟 5400 或 7200 转,尽管高性能硬盘具有更高的速度,而较旧的硬盘可能具有较低的速度。磁头沿盘片的半径移动;这种移动与盘片的旋转相结合,使磁头可以访问盘面的所有部分。
处理器 (CPU) 和实际磁盘通过磁盘控制器进行通信。这使计算机的其他部分无需了解如何使用驱动器,因为可以使不同类型磁盘的控制器对计算机的其他部分使用相同的接口。因此,计算机只需说“嘿,磁盘,给我我想要的”,而不是发送一长串复杂的电信号来将磁头移动到正确的位置,等待正确的位置到达磁头下方,并执行所有其他必要的不愉快操作。(实际上,控制器的接口仍然很复杂,但比原本的情况要简单得多。)控制器还可以执行其他操作,例如缓存或自动坏扇区替换。
以上通常是了解硬件所需的全部内容。还有其他一些东西,例如旋转盘片和移动磁头的电机,以及控制机械部件操作的电子设备,但它们与理解硬盘的工作原理大多无关。
盘面通常分为同心环,称为磁道,而磁道又分为扇区。这种划分用于指定硬盘上的位置以及为文件分配磁盘空间。要查找硬盘上的给定位置,可以说“盘面 3,磁道 5,扇区 7”。通常,所有磁道的扇区数都相同,但是某些硬盘在外磁道上放置更多扇区(所有扇区都具有相同的物理尺寸,因此更多的扇区可以容纳在更长的外磁道中)。通常,一个扇区将容纳 512 字节的数据。磁盘本身无法处理小于一个扇区的数据量。
每个盘面都以相同的方式划分为磁道(和扇区)。这意味着当一个盘面的磁头位于某个磁道上时,其他盘面的磁头也位于相应的磁道上。所有相应的磁道合在一起称为柱面。将磁头从一个磁道(柱面)移动到另一个磁道需要时间,因此,通过将经常一起访问的数据(例如,文件)放置在一个柱面内,就不必移动磁头来读取所有数据。这提高了性能。并非总是可以将文件这样放置;存储在磁盘上多个位置的文件称为碎片化的。
盘面(或磁头,它们是同一事物)、柱面和扇区的数量变化很大;每个数量的规范称为硬盘的几何结构。几何结构通常存储在特殊的、电池供电的存储位置中,称为 CMOS RAM,操作系统可以在启动或驱动程序初始化期间从中获取它。
不幸的是,BIOS 有一个设计限制,这使得无法在 CMOS RAM 中指定大于 1024 的磁道号,这对于大型硬盘来说太小了。为了克服这个问题,硬盘控制器会谎报几何结构,并将计算机给出的地址转换为符合实际情况的内容。例如,硬盘可能具有 8 个磁头、2048 个磁道和每磁道 35 个扇区。其控制器可能会向计算机谎称它具有 16 个磁头、1024 个磁道和每磁道 35 个扇区,从而不超过磁道限制,并通过将磁头数减半和将磁道数加倍来转换计算机给出的地址。实际上,数学运算可能更复杂,因为数字不像这里那样漂亮(但同样,细节与理解原理无关)。这种转换扭曲了操作系统对磁盘组织方式的看法,因此使得使用全数据单柱面技巧来提高性能变得不切实际。
转换只是 IDE 磁盘的问题。SCSI 磁盘使用顺序扇区号(即,控制器将顺序扇区号转换为磁头、柱面和扇区三元组),以及 CPU 与控制器通信的完全不同的方法,因此它们不受此问题的影响。但是请注意,计算机也可能不知道 SCSI 磁盘的真实几何结构。
由于 Linux 通常不知道磁盘的真实几何结构,因此其文件系统甚至不尝试将文件保留在单个柱面内。相反,它尝试为文件分配顺序编号的扇区,这几乎总是能提供相似的性能。控制器上的缓存和控制器执行的自动预取进一步使问题复杂化。
每个硬盘都由一个单独的设备文件表示。通常只能有两个或四个 IDE 硬盘。这些硬盘被称为/dev/hda, /dev/hdb, /dev/hdc,以及/dev/hddSCSI 硬盘被称为/dev/sda, /dev/sdb等等。其他硬盘类型也存在类似的命名约定;有关更多信息,请参见第 4 章。请注意,硬盘的设备文件允许访问整个磁盘,而无需考虑分区(将在下面讨论),如果不小心,很容易弄乱分区或其中的数据。磁盘的设备文件通常仅用于访问主引导记录(也将在下面讨论)。