数据恢复基础知识之硬盘容量限制
硬盘的发展已有近五十年的历史,使用计算机比较早的读者都会记得硬盘在发展过程中经历了多次容量的限制问题,这些限制是如何产生又是如何被解决的呢?让我们来讨论一下这个问题。
1957年IBM公司研制成功的IBM 350(RAMAC)容量仅仅只有5M,之后经历了漫长的技术革新,在80年代初期将硬盘用于个人计算机,当时的容量也仅有20-40M。随后经过十几年的发展,硬盘的容量逐步提高,但当时因为在设计上存在一定的失误,所以造成了以后多次出现硬盘容量的限制问题。
要明白这个原因我们需要对IDE接口硬盘的工作方式作一个介绍:即使到现在,我们使用的IDE硬盘驱动器依旧建立在早先的DOS-BIOS(磁盘操作系统-基本输入/输出系统)的分层结构之上。它们的基本工作模式就是:程序调用->DOS功能调用->文件管理设备->INT13中断管理(读/写)->BIOS磁盘服务->IDE(ATA)界面->磁盘控制器,也就是说如果我们需要对硬盘进行操作必须通过以上的一系列步骤才能完成,下面我们就一起来看看这一系列步骤的作用。
文件管理设备:负责文件及其在磁盘上存储位置之间的映射关系,不过需要通过磁盘读写中断INT13执行读写命令来存储、调入文件。当新文件被保存时,文件管理器决定它在当前目录里的存储位置,在文件分配表中为这个新文件添加文件目录项,并把文件写入磁盘。当读文件时,文件管理器在FAT表中找到文件在磁盘上的位置,接着就调入文件。
IDE界面:IDE界面是寄存器驱动式的并口总线。要传输数据,BIOS首先往IDE里特定的寄存器写入数据的开始地址和数据传输的长度,再把有关的读/写命令往特定的寄存器里发送从而开始数据传输。
现在的硬盘一般都支持逻辑块寻址(LBA)和柱面/磁头/扇区寻址(C/H/S),我们以C/H/S寻址方式来举例:数据传输的开始地址是写到4个8位寄存器里的,分别是:
柱面低位寄存器CL;
柱面高位寄存器CH;
扇区寄存器S;
设备/磁头寄存器H。
因此,柱面地址是16位[柱面低位寄存器(8位),柱面高位寄存器(8位)],扇区地址是8位(注意:扇区寄存器里第一个扇区是1扇区,而不是0扇区),而磁头地址是4位(没有完全占用8位)。因此,硬盘柱面的最大数是216=65,536,磁头的最大数是24=16,扇区的最大数是28-1=255(因为扇区是从“1”开始编号的)。所以,能寻址的最大扇区数是65,536x16x255=267,386,880。一个扇区是512个字节,也就是说如果以CHS方式寻址,IDE硬盘的最大容量为136.9GB。
LBA方式寻址时,上述的总共28位可用的寄存器空间(16C+8S+4H)被看作一个完整的LBA地址,因为包括位0(CHS方式下扇区不能从0开始计算),其能寻址的扇区数是65,536x16x256=268,435,456,这时IDE硬盘的最大容量为137.4GB。
INT13管理:INT13管理其实也是按照寄存器的模式来设计的,它的高层即文件管理器层发布数据读写命令和有关的参数给CPU,然后触发INT13中断的进行,激活BIOS的磁盘服务来执行数据传输。数据的开始地址被写到3个8位寄存器里,分别是:
柱面低位寄存器CL;
柱面高位/扇区寄存器CH/S;
磁头寄存器H。
柱面地址是10位(柱面低位寄存器占用8位、柱面高位寄存器占用2位,占用的是扇区地址寄存器的高2位),扇区地址为6位,磁头寄存器为8位。因此这样就有:柱面的最大数是210=1024,磁头的最大数是28=256,扇区的最大数是26-1=63。所以,通过INT13管理能寻址的扇区数是1,024x256x63=16,515,072。一个扇区是512个字节,也就是说如果以CHS寻址方式,IDE硬盘的最大容量为7.875GB。LBA寻址方式能寻址的扇区数是1024x256x64=16,777,216,这时IDE硬盘的最大容量为8.0GB。
看到这里,我们对硬盘容量限制的成因有了一些“眉目”了吧,其实主要也就是硬盘以外的系统使用的C/H/S与硬盘ATA接口使用的C/H/S的匹配问题。下面就具体看看到底是什么让硬盘出现了所谓的限制:
1.3.2.1528MB的容量限制
由于早先的硬盘容量比较小,因此设计的BIOS是:当把地址从INT13的地址寄存器转换到IDE(ATA)的地址寄存器时,仅仅把INT13管理中的10位柱面地址直接送给对应IDE(ATA)界面中的16位柱面寄存器,而把没有用到的6位(高位寄存器)地址都设定为0,把6位的扇区地址直接送给对应IDE(ATA)界面的8位扇区寄存器,其中没有用到的2位设置为0,把INT13管理的磁头寄存器4位(又去掉了4位)直接送给对应IDE(ATA)的磁头地址寄存器(当时的工程师们认为磁头数怎么也不可能超过16,现在物理磁头也确实没有超过16)。所以,此时的磁盘柱面最大数为210=1024,磁头的最大数是24=16,扇区的最大数是26-1=63,因此能寻址的扇区数就成了1,024x16x63=1,032,192。一个扇区的容量是512字节,也就是说如果以CHS方式寻址,IDE硬盘的最大容量为528MB,这样528MB的硬盘容量限制就出现了(有时也称504MB限制,这是因为把1MB当作1,048,576字节了,以后本书中再出现这种容量差别,就不再做说明,之所以不采用一种标准,主要是考虑到熟悉程度