3 Linux管理员手册--存贮介质( 二 )


以上只是理解硬件所需的 。还有其他好多工作,比如马达旋转磁盘、移动磁头,但这都与理解硬盘工作原理无关 。
磁盘表面通常被分为同心圆环,叫磁道tracks,磁道又被分为扇区sectors 。用这样分来将磁盘定位,用于为文件定位磁盘空间 。要在硬盘上找到给定的位置,可能?quot;3面5道7扇区" 。通常所有磁道有相同的扇区数,但也有硬盘在外圈磁道放较多的扇区(所有扇区用同样大小的物理空间,这样在较长的外圈磁道可以容纳更多的数据) 。一般一个扇区容纳512字节数据 。磁盘不能处理比一个扇区更小的数据量 。
每个面以相同的方式分为磁道和扇区 。这意味着当一个磁头在某个磁道时,其他磁头也在相应的位置,所有相同位置的磁道组成柱面cylinder 。磁头从一个磁道(柱面)移动到另一个需要花时间,所以将经常要在一起存取的数据(如一个文件)放在一个柱面里 。这改善了性能 。当然不可能完全作到,文件被放在几个相分离的位置叫碎片fragmented 。
磁盘的面(或头,实际是一样的)、柱面、扇区数各不相同,硬盘这些数目叫硬盘参数geometry 。硬盘参数通常存在一个特定的、由电池供电的存储区中,叫CMOS RAM,操作系统在引导启动或驱动器初始化时可以从那里得到硬盘参数 。
不幸的是,BIOS 有一个设计限制,就是不能在CMOS RAM中定义大于1024的磁道数,这对大硬盘来说就太小了 。为了克服这个问题,硬盘控制器在磁盘参数上做了一个欺骗,用地址转换translates the addresses使计算机接受 。例如,一个硬盘可能有8个磁头,2048个磁道,每磁道35个扇区 。其控制器可以对计算机谎称它有16个磁头,1024个磁道,每磁道35个扇区,这样就没有超过磁道数的限制,地址转换将磁头数减半,磁道数加倍后传给硬盘 。实际的算法可能更复杂,因为数量可能不象我们在这里假设的这么好(但这不影响我们理解原理) 。这个转换在操作系统来看产生了错觉,并可能影响操作系统对把所有数据存在相同柱面的企图受到影响 。
转换只是IDE硬盘的问题 。SCSI硬盘使用连续的扇区号(即控制器将连续的扇区好转换成磁头、柱面、扇区的三参数组),对CPU与控制器的通信使用完全不同的方法,因此不会有这个问题 。注意,计算机可能根本不知道一个SCSI硬盘的实际参数 。
由于Linux经常不知道一个硬盘的真正参数,其文件系统也不试图将文件存在一个柱面里 。而是争取给一个文件分配连续编号的山区,这样能得到类似的性能 。对于控制器上有cashe或控制器能自动预取的硬盘,情况将更复杂 。
每个硬盘表现为一个单独的设备文件 。通常只能有2-4个IDE硬盘 。这就是 /dev/hda , /dev/hdb , /dev/hdc , 和 /dev/hdd。SCSI是 /dev/sda , /dev/sdb , 等等 。其他硬盘类型有类似的命名约定,更多的信息见[Anv] 。注意硬盘的设备文件给出整个硬盘的存取,而不是分区(下面讨论的),因此如果不小心可能搞乱分区或数据 。硬盘的设备文件只在存取主引导扇(也将在下面讨论)时使用 。
软盘
软盘的一面或两面涂有和硬盘类似的磁性介质 。软盘自己没有读写头,读写头在驱动器上 。软盘相当于硬盘的一张盘片,但可移动,一个驱动器可以存取不同的软盘,而硬盘则是一个独立的单元 。
如同硬盘,一张软盘也分为磁道和扇区(软盘2面上的相同的磁道组成柱面),但数量要比硬盘少得多 。
软驱通常可以使用几中不同的盘片,例如,一个3.5"软驱可以使用720KB和1.44MB的软盘 。因为软驱操作有些不同,而操作系统必须知道软盘的容量,所以软驱有许多设备文件,每个都与软驱和软盘种类有关 。因此,/dev/fd0H1440 是第一个软驱(fd0),必须是3.5"软驱,使用3.5"高密度软盘(H),容量是1440KB(1440),即普通的3.5"HD软盘 。软盘设备的命名约定见[Anv] 。

推荐阅读