切换到宽版
  • 9510阅读
  • 0回复

数据恢复基础知识之硬盘容量限制 [复制链接]

上一主题 下一主题
离线山东老王
 

只看楼主 倒序阅读 0 发表于: 2008-03-15
              数据恢复基础知识之硬盘容量限制

    硬盘的发展已有近五十年的历史,使用计算机比较早的读者都会记得硬盘在发展过程中经历了多次容量的限制问题,这些限制是如何产生又是如何被解决的呢?让我们来讨论一下这个问题。
    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.1  528MB的容量限制
由于早先的硬盘容量比较小,因此设计的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字节了,以后本书中再出现这种容量差别,就不再做说明,之所以不采用一种标准,主要是考虑到熟悉程度,比如说528MB限制,就很容易理解,而说504MB,可能就有点绕舌,还要去想一想,当然,这都是历史原因造成的)。

1.3.2.2  2.1GB的容量限制
这里分为两个部分,一部分是由磁盘服务的限制造成的,另外一部分是由于磁盘格式造成的,通常我们把前者称为2.1GB的硬件容量限制,后者称为2.1GB的软件容量限制。

1.3.2.2.1  硬件容量限制
当时,为了528MB容量限制的问题,人们提出了一些不同的办法,其中一个办法就是将INT13服务的磁头寄存器里没有用到的4位中的高2位保留给柱面数的第11、12位使用。这样,最大的磁头数就是26=64,最大的柱面数就是212=4096。但是,当时的操作系统不使用这种转换方法,而是认为磁头寄存器的所有位数只用来记录磁头数,它采用把柱面数除以某一整数,变成相应的逻辑柱面数、磁头数乘以同一整数,变成相应的逻辑磁头数的方式来进行管理。比如,INT13能正确使用的柱面数为4,096、磁头数为32的硬盘,操作系统在使用时把柱面数除以4(1024个逻辑柱面数),磁头数乘以4(128个逻辑磁头数),可因为上述的BIOS使用磁头数寄存器的高2位记录柱面数,所以就无法记录这样的磁头数。在这种BIOS的机器上使用大于2.1G的硬盘时,可能会在加电自检执行硬盘确认命令并在试图设置CHS值时死机。

1.3.2.2.1.2  软件容量限制
第一章里我们讲到了磁道、柱面、扇区等概念,却没有讲过“簇”(Cluster)的概念,这里就先讲讲什么是“簇”。
简单的说,簇就是一个扇区的集合。前面讲扇区时讲到扇区是作为一个整体一次性读出和写入的,它针对的是ATA硬盘控制器,而操作系统在管理文件的时候并不是以扇区为单位进行的,这是因为如果以扇区为单位的话,管理起来不仅系统开销很大,而且效率非常低。比如一个普通的40GB硬盘,约有78,852,915个扇区,系统要记录每一个扇区的使用情况,以及文件存储在哪一个扇区、哪一个扇区没有使用等各种复杂的情况,使用起来效率是很低的,而且也没有必要,因为小于512个字节的文件是很少的,对于大文件来说,一次管理的扇区越多,其数据读写速度就越快,因为管理的单元数据越大,寻道和等待的时间就越少,这样就引入了簇的概念。
系统管理文件时采用把数个扇区“捆”成一个簇的方式进行,而后按照簇来进行操作,文件使用的扇区,在簇方式下就形成了一个个的簇链,一个文件占用一个或多个簇,但至少是一个簇。前面已经说了,对于大文件,簇越大性能越优,但簇越大,可能造成的磁盘空间的浪费也就越多,比如哪怕只有一个字节的数据文件,也要占用一个簇,而一个簇一旦分配给一个文件,在删除该文件之前其它文件就不能再使用这个簇了。那么多少个扇区划分为一个簇呢?如果一个扇区划分为一个簇,那么簇就等同于扇区了,一般是4~64个扇区划分为一簇。每一簇的使用情况由文件分配表(FAT)来进行跟踪记录,早期的FAT为12/16位(软盘及小于16MB的硬盘的FAT为12位),当它处理一簇的最大长度是64个扇区即32,768字节时,最多能处理216=65,536个簇,所以DOS分区的限制就由文件分配表(FAT)决定了。如果将两个数字相乘,就会得到DOS的最大分区界限值是2,147,483,648字节或2,048MB。因此超过这个容量的硬盘,如果使用FAT格式,最大只能识别2.048GB的硬盘容量,大于2.048GB,就只有划分为一个个小于2.048GB的分区才能使用。

1.3.2.3  3.2GB的容量限制
一些版本的BIOS不能识别超过6322柱面的硬盘,不过这种BIOS比较少见,由于柱面有限制,其最高支持扇区数就是6322x16x63=6,372,576,乘以512Byte扇区容量的话,其最高支持容量为6,372,576x512=3,262,758,912Byte,即3.18GB。

1.3.2.4  4.2GB的容量限制
当时一些操作系统使用8位寄存器来存储磁头数,这样当BIOS报告硬盘的磁头数等于256(最高容量)时,只有磁头数的最先一位(即0)被系统保存,从而导致硬盘配置错误。一旦硬盘的磁头数是16,柱面数大于8,192(2的13次方,由于后三位寄存器已经被磁头寄存器借用,其实这里牵涉到一个突破528MB容量限制的转换做法的问题,由于这一段比较复杂,在这里就不详细介绍了,我们只要明白有这个限制就够了),系统就无法正常识别了,因此其最大的容量就被限制在了4.2GB=8192x16x63x512Byte。

1.3.2.5  8.4GB的容量限制
我们已经知道INT13服务的寻址方式最高可以支持8.4GB以下的容量(柱面数、磁头数、扇区数的最大值分别是16,383、16和63,而三者相乘就是8.456GB)。因此,这个容量限制的出现就只是迟早的问题了。所以,这个限制曾经是最常遇到的容量限制。为了解决这个问题,一些厂商定义了新的扩展的INT13服务扩展标准。新的INT13服务扩展标准不再使用操作系统的寄存器来传递硬盘的寻址参数,它使用存储在操作系统内存里的地址包来传递硬盘的寻址参数。地址包里保存的是64位的LBA地址,如果硬盘支持LBA寻址,就把低28位直接传递给ATA界面,如果不支持,操作系统就先把LBA地址转换为CHS地址,再传递给ATA界面。通过这种方式,能实现在ATA总线基础上CHS方式寻址最大容量是136.9GB,而LBA方式寻址最大容量是137.4GB。

1.3.2.6  33.8GB的容量限制
在对硬盘寻址时,由于IDE(ATA)界面的限制,柱面数最高支持216=65,536,所以,当遇到柱面数大于65,536的时候,系统就无法识别这种硬盘了,这个容量限制就是:65536x16x63x512Byte=33.8GB,这种限制可能是目前比较常见的容量限制。

1.3.2.7  137GB的容量限制
这个容量限制是由LBA的限制形成的,LBA通过一个28位的地址定义了268435456个扇区,每个扇区的容量为512字节,这样LBA最大可以支持137438953472字节的容量,以1000字节=1GB来换算的话,就是大约137GB容量。在BIOS中引入LBA模式时硬盘的容量只有几个GB,137GB在当时是不可企及的,然而硬盘容量的发展速度的确超乎了人们了想像,目前500GB的硬盘已经在市场上销售了。
山东回天盛邦数据恢复中心------磁盘阵列恢复专家,真正具备开盘实力和条件的专业数据恢复机构。电话:0533-6207528
快速回复
限100 字节
欢迎来到中国数据恢复技术联盟,请勿发表暴力、色情、广
 
上一个 下一个