5.4.2 磁盘格式化

硬盘由一叠铝的、合金的或玻璃的盘片组成,直径为5.25英寸或3.5英寸(在笔记本电脑上甚至更小)。在每个盘片上沉积着薄薄的可磁化的金属氧化物。在制造出来之后,磁盘上不存在任何信息。

在磁盘能够使用之前,每个盘片必须经受由软件完成的低级格式化(low-level format)。该格式包含一系列同心的磁道,每个磁道包含若干数目的扇区,扇区间存在短的间隙。一个扇区的格式如图5-25所示。

阅读 ‧ 电子书库
图 5-25 一个磁盘扇区

前导码以一定的位模式开始,位模式使硬件得以识别扇区的开始。前导码还包含柱面与扇区号以及某些其他信息。数据部分的大小是由低级格式化程序决定的,大多数磁盘使用512字节的扇区。ECC域包含冗余信息,可以用来恢复读错误。该域的大小和内容随生产商的不同而不同,它取决于设计者为了更高的可靠性愿意放弃多少磁盘空间以及控制器能够处理的ECC编码有多复杂。16字节的ECC域并不是罕见的。此外,所有硬盘都分配有某些数目的备用扇区,用来取代具有制造瑕疵的扇区。

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

在设置低级格式时,每个磁道上第0扇区的位置与前一个磁道存在偏移。这一偏移称为柱面斜进(cylinder skew),这样做是为了改进性能,想法是让磁盘在一次连续的操作中读取多个磁道而不丢失数据。观察图5-19a就可以明白问题的本质。假设一个读请求需要最内侧磁道上从第0扇区开始的18个扇区,磁盘旋转一周可以读取前16个扇区,但是为了得到第17个扇区,则需要一次寻道操作以便磁头向外移动一个磁道。到磁头移动了一个磁道时,第0扇区已经转过了磁头,所以需要旋转一整周才能等到它再次经过磁头。通过图5-26所示的将扇区偏移即可消除这一问题。

阅读 ‧ 电子书库
图 5-26 柱面斜进示意图

柱面斜进量取决于驱动器的几何规格。例如,一个10 000rpm的驱动器每6ms旋转一周,如果一个磁道包含300个扇区,那么每20µs就有一个新扇区在磁头下通过。如果磁道到磁道的寻道时间是800µs,那么在寻道期间将有40个扇区通过,所以柱面斜进应该是40个扇区而不是图5-26中的三个扇区。值得一提的是,像柱面斜进一样也存在着磁头斜进(head skew),但是磁头斜进不是非常大。

低级格式化的结果是磁盘容量减少,减少的量取决于前导码、扇区间间隙和ECC的大小以及保留的备用扇区的数目。通常格式化的容量比未格式化的容量低20%。备用扇区不计入格式化的容量,所以一种给定类型的所有磁盘在出厂时具有完全相同的容量,与它们实际具有多少坏扇区无关(如果坏扇区的数目超出了备用扇区的数目,则该驱动器是不合格的,不会出厂)。

关于磁盘容量存在着相当大的混淆,这是因为某些制造商广告宣传的是未格式化的容量,从而使他们的驱动器看起来比实际的容量要大。例如,考虑一个未格式化容量为200×109 字节的驱动器,它或许是作为200GB的磁盘销售的。然而,格式化之后,也许只有170×109 字节可用于存放数据。使这一混淆进一步加剧的是操作系统可能将这一容量报告为158GB,而不是170GB,因为软件把lGB看作是230 (1 073 741 824)字节,而不是109 (1 000 000 000)字节。

在数据通信世界里,lGbps意味着1 000 000 000位/秒,因为前缀G(吉)确实表示109 (毕竟一千米是1000米,而不是1024米),所以使事情更加糟糕。只有在关于内存和磁盘的大小的情况下,kilo(千)、mega(兆)、giga(吉)和tera(太)才分别表示210 、220 、230 和240

格式化还对性能产生影响。如果一个10 000RPM的磁盘每个磁道有300个扇区,每个扇区512字节,那么用6ms可以读出一个磁道上的153 600字节,使数据率为25 600 000字节/秒或24.4 MB/s。不论引入什么种类的接口,都不可能比这个速度更快,即便是80 MB/s或160 MB/s的SCSI接口也不行。

实际上,以这一速率连续地读磁盘要求控制器中有一个大容量的缓冲区。例如,考虑一个控制器,它具有一个扇区的缓冲区,该控制器接到一条命令要读两个连续的扇区。当从磁盘上读出第一个扇区并做了ECC计算之后,数据必须传送到主存中。就在传送正在进行时,下一个扇区将从磁头下通过。当完成了向主存的复制时,控制器将不得不等待几乎一整周的旋转时间才能等到第二个扇区再次回来。

通过在格式化磁盘时以交错方式对扇区进行编号可以消除这一问题。在图5-27a中,我们看到的是通常的编号模式(此处忽略柱面斜进)。在图5-27b中,我们看到的是单交错(single interleaving),它可以在连续的扇区之间给控制器以喘息的空间以便将缓冲区复制到主存。

阅读 ‧ 电子书库
图 5-27 a)无交错;b)单交错;c)双交错

如果复制过程非常慢,可能需要如图5-27c中的双交错(double interleaving)。如果控制器拥有的缓冲区只有一个扇区,那么从缓冲区到主存的复制无论是由控制器完成还是由主CPU或着DMA芯片完成都无关紧要,都要花费某些时间。为了避免需要交错,控制器应该能够对整个磁道进行缓存,许多现代控制器都能够这样做。

在低级格式化完成之后,要对磁盘进行分区。在逻辑上,每个分区就像是一个独立的磁盘。分区对于多个操作系统共存是必需的。此外,在某些情况下,分区可以用来进行交换。在Pentium和大多数其他计算机上,0扇区包含主引导记录(master boot record),它包含某些引导代码和末尾的分区表。分区表给出了每个分区的起始扇区和大小。在Pentium上,分区表具有四个分区的空间。如果这四个分区都用于Windows,那么它们将被称为C:、D:、E:和F:,并且作为单独的驱动器对待。如果它们中有三个用于Windows一个用于UNIX,那么Windows会将它的分区称为C:、D:和E:,然后第一个CD-ROM是F:。为了能够从硬盘引导,在分区表中必须有一个分区被标记为活动的。

在准备一块磁盘以便于使用的最后一步是对每一个分区分别执行一次高级格式化(high-level format)。这一操作要设置一个引导块、空闲存储管理(空闲列表或位图)、根目录和一个空文件系统。这一操作还要将一个代码设置在分区表项中,以表明在分区中使用的是哪个文件系统,因为许多操作系统支持多个兼容的文件系统(由于历史原因)。这时,系统就可以引导了。