详细介绍硬盘的磁道扇区
(上篇)
磁道是磁盘一个面上的单个数据存储环。如果将磁道作为一个存储单元,从数据管理交率看实在是太大了。许多盘片一个磁道能存储100000字节甚至更多,用于小文件存储进的效率就太低了。因此,磁道被分成若干编号的分区,称为扇区。这些扇区代表了磁道的分段。
不同类型的磁盘驱动器依据磁道密度,将磁道划分成不同数据量的氓区。例如,软盘格式化使用每磁道8~36扇区,而硬盘通常以更高的密度存储数据,每磁道可以有900个或更多的扇区。PC系统中,通过标准格式化程序产生的扇区容量为512字节,这个数字在整个PC历史中一直没有变化过。在PC标准中一个很有意思的现象是,为了兼容大多数老的BIOS和驱动器,驱动器通常执行一个内部转译,转译为逻辑上每磁道63个扇区。
磁道上的扇区编号从1开始,不像磁头或柱面编号从0开始。例如,1.44MB软盘含以0~79编号的80个柱面和以0~1编号的2个磁头,而每个柱面上的每个磁道有18个扇区,编号从1~18
当磁盘被格式化后,格式化程序在每个扇区的数据前后各创建一个标识(ID)区域,磁盘控制器用它来为扇区编号并识别每个扇区的开始和结束。这些区域标识每个扇区的数据区域前趋和后继,
占用了磁盘总存储容量的一部分。这就是磁盘的未格式化容量和格式化容量不同的原因。注意,市面上大多数现代硬盘驱动器已经预先格式化了,制造商给出的标称值也是格式化后的容量。现在已太提及未格式化容量。另一个有意义的发展是IBM和其他公司制作无ID记录驱动器,意思是不再在每个扇区的前后加上ID标记。这将使更多的磁盘空间用于实际的数据存储。
磁盘上的每个扇区有一个前缀部分,或叫扇区头,用以标志扇区的开始,含扇区编号,还有一个后缀部分,或叫扇区尾,其中包括一个校验和(用于确保数据内容的完整性)。一些新的驱动器去掉了扇区头,这被称做无ID记录,可以存放更多的数据。
每个扇区包含512字节的数据。低级格式化过程通常对数据字节填充一些特定的值,例如F6h(十六进制),或者一些驱动器制造商使用的其他测试样式。某些样式对驱动器来说编/解码更困难一些,所以制造商一些驱动器制造商使用的其他测试样式。特殊的测试样式可能会在表面产生错误,而正常的数据样式则不会。通过这个办法制造商在测试期间能更精确地训别边缘区。
注意:这里讨论的磁盘格式化类型是物理的或低级的格式化,不是高级格式化,当使用盘中Windows 9x/Me/2000 ExplorerDOS FORMAT程序时,执行的是高级格式化。
扇区头和尾独立于操作系统、文件系统和存储在驱动器上的文件。除了扇区头尾外,在扇区内部、同一磁道的扇区之间以及不同的磁道之间都还有间隙存在,但这些间隙没有可用的数据空间。间隙是低级格式化过程中记录被瞬间关断时产生的。这就类似于录间盒上歌曲之间的无声音间隙。前缀、后缀 和间隙计入磁盘未格式化和格式化的容量损失中。例如,一个4MB(未格式化)软盘(3.5英寸),格式化后的容量
2.88MB,一个2MB(未格式化)软盘格式化后的容量是1.44MB一个老式38MB未格式化容量(比如,Seagate ST-4038)。硬盘的格式化容量仅剩下32MB。因为现在购买的ATA/IDESCSI硬盘在工厂里已经低级格式化好了,制造商只标注格式化容量。虽然如此,几乎所有的驱动器仍有一部分保留空间,用于对准备写入磁盘的数据进行管理。
所以,前面所说的每个磁盘扇区的大小都是512字节,在技术上并不正确。每个扇区确实允许存储512个字节数据,但数据区域仅是扇区的一部分。磁盘上的每个扇区通常占据571个字节,其中512个字节用来存储用户数据。扇区头和尾要求的实际数量是随驱动器的不同变化而变化,但这个数字是典型的。目前,少数现代驱动器使用无ID记录方案,实际上免免去了存储扇区头信息的额外开销。可以将每个磁盘扇区看做一本书中的一页。在书中,每一页有正文,但不是整页都充满了正文,至少每页的顶、底,左和右都留有边缘空白。一些像章标题(磁盘和柱面编号)和页号(扇区编号)这样的信息放置在边缘空白内。一具扇区的
缘区域是在低级格式化过程中产生和写入的。格式化过程也同时对每个扇区的数据区域写入伪(字节)值。当在磁盘上执行高级格式化后,PC的文件系统能对每个扇区的数据区域进行写入,但是扇区头尾信息在正常的写操作中不会被修改,除非再次对磁盘进行低级格式化。
如下图列出了一个典型的硬盘驱动器上每个磁道和扇区的格式,此硬盘每个磁道有17个扇区。
字节            名称                                          说明
16              POST INDEX GAP                      全为4Eh,在索引标志之后的磁道开始处
下面的扇区数据(本表两线之间)按磁道扇区数重复
13              ID VFO LOCK                              全为00h,使VFO与扇区ID同步
1              SYNC BYTE                                  A1h,通知控制器后面是数据
1              ADDRESS MARK                        FEh,定义后面跟随的是ID段数据
2              CYLINDER NUMBER                  定义磁头伟动机构位置的数值
1                HEAD NUMBER                          定义选定特定磁头
1              SECTOR NUMBER                      定义扇区
2              CRC                                                ID数值的循环冗余校验
3              WRITE TURN-ON GAP                格式化时写入00h,以隔离ID和用户数据
13              DATA STNC VFO LOCK            全为00h,使VFODATA同步
1              SYNC BYTE                                    A1h通知控制器后是数据
1              ADDRESS MARK                        F8h,定义后面跟随的是用户数据区
512            DATA                                            用户数据
2              CRC                                                用户数据循环冗余校验
3              WRITE TURN-OFF GAP            00h,由数据更新形成,隔离用户数据
15              INTER-RECORD GAP                全为00h,作为主轴转速变化的缓冲
693            PRE-INDEX GAP                        全为4Eh,位于索引标志之前的磁道末尾
571=每扇区总字节数;512=每扇区数据字节数
注意:所有XXH表示该段用XXH字节添充。
由上可见,每个磁道上数据的可用空间比未格式化之前的容量少了约15%。这对大多数硬盘来说都是成立的,只是百分比可能稍有不同。下面的段落将详述在上表中扇区的每个部分。
POST INDEX GAP提供了了一个磁头切换恢复阶段,所以从一个磁盘切换到另一个磁道时,磁头不需要等待磁盘作额外旋转就能连续地读扇区。因为磁盘是连续旋转的,磁头要用一小段时间放射状地从一个磁道移动到另一个磁道,不可能在两个不同磁道间立刻读出连续的扇区。当磁头移到新磁道时,第二个扇区的头部已经转过去了。扇区之间留下的间隙为磁头移动到另一个磁道提供了时间。
有些驱动器中,此间隙不能提供足够的时间供磁头移动。出现这种情况时,可通过偏移不同磁道上的扇区为驱动器获取一段额外的时间,这样一来第一个扇区的到达时间被延迟了。换句话说,低级格式化过程偏移扇区编号,使各个磁道上相同编号的扇区不相互邻接,一个磁道上的9扇区可以和下一个磁道上的8低级格式化扇区邻接,这个8扇区再邻接下一个磁道上的7扇区,如此等等。最佳偏移值取决于磁盘旋转速度与磁头径向速度的比较。
注意:磁头偏移曾经是一个做低级格式化时由用户自己设置的参数。现今的ATA/IDESCSI驱动器已经在工厂被低级格式化并设置了最佳偏移值。
扇区ID数据包括柱面、磁头号、扇区号字段,以及用以校验ID数据的CRC字段。大多数控制器在低级格式化或表面分析时,用磁头编号字段的第7位标注扇区损坏。然而,此约定不是绝对的。有些控制器用辊的方法标注坏扇区,但通常都标注在某个ID字段之中。
WRITE TURN-ON GAP紧接着ID区的CRC字节,为保证随后用户数据正确记录提供了一个缓冲,同时也使ID CRC有可能完全恢复。
用户DATA段包含存储在扇区中的全部512个字节数据。后面紧跟着一个CRC字段来校验数据。虽然许多控制器使用两个字节的CRC,但是如果有多于两个字节的CRC内容要存储,控制器就需要实现一个更长的纠错码(ECC)。存储的ECC数据使检测出用户数据错误并纠正它们成为可能。纠错/检错能力取决于驱动器使用的ECC编码及其控制器的实现。WRITE TURN-OFF GAP是一个缓冲,使ECCCRC)字节得以完全恢复。
INTER-RECORD GAP提供了一种适应驱动器主轴速度变化的手段。当磁道被格式化时磁盘的转速度可能正
巧稍慢于正常速度,当磁道被写入数据时可能磁盘的转速稍快于正常速度。在这种情况下,此间隙就防止了将任何信息意外地覆写到一睛个扇区中。这个间隙的实际长度要依据磁道格式化和每次数据字段被更新时的磁盘转速而定。
PRE-INDEX GAP考虑到了整个磁道的转速阈限。此间隙的长度取决于格式化时磁盘的转速和写频率阈限。
扇区的前缀信息是级其重要的,因为其中包含了柱面、磁头和扇区的编号信息。所以,这些内容(除了DATA字段、DATA CRC字节和WRITE TURN-OFF GAP之外)只能在低级格式化时写入。
(完)