2.2 现代硬盘的逻辑结构揭秘
要想深入了解数据恢复的理论知识,除了需要掌握硬盘的物理结构,还必须深入了解硬盘的逻辑结构。
当我们通过操作系统访问文件时,操作系统需要读取硬盘相应的位置来调用我们访问的文件,那么这些文件是如何在盘片上分布的呢?这就是由盘片上相关的一些逻辑参数所决定的。
硬盘的盘片都具有类似的格式,被划分为几个区域,这些区域称为磁道、扇区、柱面,硬盘就是利用这几个参数对数据进行寻址的。
2.2.1 硬盘的逻辑磁道
磁盘在出厂前,厂家会对盘片进行格式化,盘片被划分成许多同心圆,这些同心圆就叫做磁道(Track),如图2-37所示。
图2-37 磁道
现在的大硬盘每一个盘面上都有上万个磁道,为便于管理,这些磁道都有一个编号,在逻辑上磁道从外向内自0开始顺序编号。
提示:盘片上的这些磁道是看不见的,它们只是盘面上以特殊形式磁化了的一些区域。
2.2.2 硬盘的逻辑扇区
盘面上的每个磁道都被划分成一段段的圆弧,每段圆弧叫做一个扇区,如图2-38所示。在逻辑上扇区从“1”开始编号,它是硬盘存储的最小单位,扇区中的数据是作为一个单元同时读出或写入的,逻辑每个扇区包括512字节的数据和一些其他信息。
图2-38 扇区
操作系统是以扇区的形式将信息存储在硬盘上的,一个扇区有两个主要部分:存储扇区地址的标识符和存储数据的数据区,其结构如图2-39所示。
图2-39 扇区结构图
在计算机系统BIOS中断13H的入口参数中,扇区地址占用寄存器中的6位,其值为1H~3FH,所以逻辑上扇区编号为1~63,也就是说每个磁道包含63个扇区。
2.2.3 硬盘的逻辑柱面
柱面是指各个盘面上编号相同的磁道构成的整体,如图2-40所示。在逻辑上,柱面的编号是和磁道的编号相统一的,都是从外向内自0开始顺序编号。
图2-40 柱面
数据的读/写是按柱面进行的,即磁头在读/写数据时首先在同一柱面内从“0”磁头开始进行操作,依次向下在同一柱面的不同盘面即磁头上进行操作,只在同一柱面所有的磁头全部读/写完毕后才移动磁头转移到下一柱面。这样操作的原因是因为选取磁头只需通过电子切换即可,而选取柱面则必须通过机械切换。电子切换速度非常快,比在机械上磁头向邻近磁道移动快得多,所以数据的读/写是按柱面来进行的,而不是按盘面来进行的。
在计算机系统BIOS中断13H的入口参数中,柱面地址占用寄存器中的10位,所以柱面号为0~1023,其低8位单独占用一个寄存器,高两位与扇区地址共用一个寄存器,占用共用寄存器中的高两位。所以在逻辑上柱面数为1024个,也就是说在这种寄存模式下,每个硬盘最多包含1024个柱面。
2.2.4 硬盘的逻辑磁头
硬盘中都会有一个或者多个盘片,每一个盘片又有两个盘面,即上盘面和下盘面,每一个盘面都有一个盘面号,逻辑上按顺序从上而下自“0”开始依次编号。
盘片是用来存储数据的,那么数据是如何写到盘片上去的呢?这个工作是由磁头来完成的。硬盘的每个盘面都会对应一个磁头,所以在硬盘系统中,逻辑盘面号也可称为逻辑磁头号,就是因为每一个有效盘面都有一个对应的读/写磁头。
在计算机系统BIOS中断13H的入口参数中,磁头地址占用寄存器中的8位,其值为0H~FEH,所以磁头号为0~254,也就是说在这种寄存模式下,每个硬盘逻辑上包含255个磁头。
2.2.5 硬盘的逻辑C/H/S
硬盘是通过磁头、柱面和扇区进行寻址的,也就是C/H/S。之前我们谈到过物理C/H/S,那是硬盘内部的地址,而对于计算机系统和程序来讲,需要使用逻辑C/H/S访问硬盘。在计算机系统BIOS中断13H的入口参数中,磁头寄存器占8位,其值为0H~FEH,所以磁头号为0~254。柱面地址是10位,所以柱面号为0~1023,其低8位单独占用一个寄存器,高两位与扇区地址共用一个寄存器,占用共用寄存器中的高两位。扇区地址占用共用寄存器中的低6位,其值为1H~3FH,所以扇区编号为1~63。按照这种地址管理模式,逻辑C/H/S的最大取值为1023/254/63,因为逻辑C/H/S的初始值分别为0/0/1,所以逻辑C/H/S能够管理的逻辑柱面、磁头、扇区的个数分别为1024、255、63,这样就可以算出逻辑C/H/S能够管理的扇区总数:1024×255×63=16 450 560,把这个数值换算为GB的结果约等于8GB,这也是逻辑C/H/S能够管理的最大空间。
2.2.6 硬盘的28位LBA及48位LBA
LBA全称为Logic Block Address,即扇区的逻辑块地址。
由于INT 13的限制,逻辑C/H/S地址能访问的最大值硬盘空间为8GB,在系统管理地址时还需要去记录烦琐的C/H/S,使得访问效率非常低,这样就引入了LBA的概念。在LBA方式下,系统把所有的物理扇区都按照某种规则看做是一线性编号的扇区,即从0到某个最大值方式排列,并连成一条线,把LBA作为一个整体来对待,而不再是具体的实际的C/H/S值,这样只用一个序数就确定了一个唯一的物理扇区,这就是线性地址扇区的由来。显然线性地址是物理扇区的逻辑地址。
LBA地址最初被定义为28位的大小,所以能够管理的扇区总数为228-1,即268 435 455个扇区,换算为GB大约等于137GB,这也是硬盘曾经的一个容量限制值。在BIOS中引入LBA模式时硬盘的容量只有几GB,137GB在当时是不可企及的,然而硬盘容量的发展速度的确超乎了人们了想象,目前2000GB的硬盘已经在市场上销售了。
Technical Committee T13组织为了解决28位LBA寻址模式的限制,对于ATA/ATAPI-6标准进行了一些修改,通过48位LBA来支持更多的扇区,从而突破这一限制。Compaq、Microsoft、Maxtor联合推出的Big Drives规范就是以T13组织提出的48位方案为基础,将原来LBA寻址寄存器从24位提高到了48位,使其寻址的扇区数达到281 474 976 710 655,这样可支持的硬盘容量就达到了281 474 976 710 655×512=144 115 188 075 855 872字节,大致相当于144PB(以1PB=1000 000GB来算)。
关于硬盘容量的大小,很多人可能会感到迷惑,为什么同一块硬盘,有时显示或报为200GB,有时却只有186GB?这主要是换算方法不统一造成的,如1MB到底代表1 000 000字节还是代表1 048 576字节呢?硬盘厂家对硬盘上标称的容量一般都是按1MB=1 000 000字节计算的,而依据计算机表示数据的特点、数制的表示方式及计算机本身的运算方式,硬盘容量单位是以2的多少次方来表示的,即以KB(KiloByte)、MB(MegaByte)、GB(GigaByte)、TB(TeraByte)、PB(PetaByte)、EB(ExaByte)、ZB(ZettaByte)、YB(YottaByte)为单位,各种单位之间的换算关系如下:
1KB=210B=1024B
1MB=210KB=220B=1 048 576B
1GB=210MB=220KB=230B=1 073 741 824B
1TB=210GB=220MB=230KB=240B=1 099 511 627 776B
1PB=210TB=220GB=230MB=240KB=250B=1 125 899 906 842 624B
1EB=210PB=220TB=230GB=240MB=250KB=260B=1 152 921 504 606 846 976B
1ZB=210EB=220PB=230TB=240GB=250MB=260KB=270B=1 180 591 620 717 411 303 424B
1YB=210ZB=220EB=230PB=240TB=250GB=260MB=270KB=280B=1 208 925 819 614 629 174 706 176B