2008年(8065)
分类: 服务器与存储
2008-11-26 13:31:22
要明白这个原因我们需要对IDE接口的工作方式做一个介绍,即使到现在我们今天的IDE硬盘驱动依旧使用早先的DOS-BIOS(磁盘-基本输入/输出系统)的分层结构上。它的基本工作模式就是:程序调用->DOS功能调用->文件管理设备->INT 13中断管理(读/写)->BIOS磁盘服务->IDE(ATA)界面->磁盘控制器,也就是说我们如果需要对硬盘进行操作必须通过以上的一系列步骤才能完成,那么我们以下一起来看看这一系列步骤的作用。
文件管理设备:其负责文件及其在磁盘上存储位置之间的映射关系,不过需要通过磁盘读写中断INT13执行读写命令来存储、调入文件。当新文件被保存时,文件管理器决定它在当前目录里的存储位置,在文件分配表中为这个新文件添加文件目录项,并把文件写入磁盘。当读文件时,文件管理器在FAT中找到文件在磁盘上的位置,接着就调入文件。
IDE(ATA) 界面:在介绍IDE(ATA)界面前,简单说说硬盘的结构:硬盘分为一定数量的柱面(以硬盘中心为圆心的同心圆磁迹),每个柱面都需要磁头来读写数据。另外,硬盘上的数据都是以每扇区512字节的格式存储的,所有的数据传输都是以扇区(柱面被等分的园弧磁迹)为单位的。IDE(ATA)界面是寄存器驱动式的并口总线。要传输数据,BIOS首先往IDE(ATA)里特定的寄存器写入数据的开始地址和数据传输的长度,再把有关的读/写命令往特定的寄存器里发送从而开始数据传输。
现在的硬盘一般都支持逻辑块寻址(LBA)和柱面磁头扇区寻址(CHS),我们以CHS寻址方式来举例:数据传输的开始地址是写到4个8位寄存器里的,分别是:
柱面低位寄存器
柱面高位寄存器
扇区寄存器
设备/磁头寄存器
因此,柱面地址是16位[柱面低位寄存器(8位),柱面高位寄存器(8位)]。扇区地址是8位(注意:扇区寄存器里第一个扇区是1扇区,而不是0扇区)。而磁头地址是4位(没有完全占用8位)。因此,硬盘柱面的最大数是65,536(2的16次方),磁头的最大数是16(2的4次方),扇区的最大数是255(2的8次方-1,注意刚刚我们提到的扇区寄存器问题)。所以,能寻址的最大扇区数是267,386,880 (65,536x16x255)。一扇区又是512字节,也就是说如果以CHS寻址方式,IDE硬盘的最大容量为136.9GB。LBA寻址方式,上述的总共28位可用的寄存器空间(16+8+4)被看作一个完整的LBA地址,因为包括位0(CHS里扇区不能从0开始计算),其能寻址的扇区数是268,435,456 (65,536x16x256),这时IDE硬盘的最大容量为137.4GB。
INT 13管理:INT 13管理其实也是按照寄存器的模式来设计的,它的高层即文件管理器层发布数据读写命令和有关的参数给CPU,然后触发INT 13中断的进行,激活BIOS的磁盘服务来执行数据传输。数据的开始地址被写到3个8位寄存器里,分别是:
柱面低位寄存器
柱面高位/扇区寄存器
磁头寄存器
柱面地址是10位(柱面低位寄存器占用8位、柱面高位寄存器占用2位),扇区地址为6位(8位-已经被计算过的高位寄存器的2位)。磁头寄存器为8位。因此如果这样的话:柱面的最大数是1024(2的10次方) ,磁头的最大数是256(2的8次方),扇区的最大数是63(2的6次方-1)。所以,通过INT 13管理能寻址的扇区数是16,515,072 (1,024x256x63)。一扇区是512字节,也就是说如果以CHS寻址方式,IDE硬盘的最大容量为8.456GB。LBA寻址方式能寻址的扇区数是16,777,216(1024x256x64),这时IDE硬盘的最大容量为8.601GB。
看到这里,我们应该感到硬盘容量限制的成因有了一些“眉目”了吧,那么我们具体来到底是什么让硬盘出现了所谓的限制:
1.528MB的容量限制:
由于早先的硬盘容量比较小,因此设计的BIOS的时候当把地址从Int 13的地址寄存器转换为IDE(ATA)的地址寄存器时,仅仅把INT 13管理中10位的柱面地址用来对应IDE(ATA)界面中的16位柱面寄存器,而把没有用到的6位(高位寄存器)地址都设定为0。并且也仅把6位的扇区地址来对应IDE(ATA)界面的8位扇区寄存器,其中没有用到的2位设置为0。并且INT 13管理的磁头寄存器4位(又去掉了4位)来对应IDE(ATA)。因此,此时的磁盘柱面最大数为1024(2的10次方),磁头的最大数是16(2的4次方),扇区的最大数是63(2的6次方-1)。因此能寻址的扇区数就成了1,032,192(1,024x16x63)。一个扇区的容量是512字节,也就是说如果以CHS寻址方式,IDE硬盘的最大容量为528.4MB。因此528MB的硬盘容量限制就出现了。
2.1GB的容量限制:
这里分为两个部分,一部分是由磁盘服务的限制造成的,另外一个是由于磁盘格式造成的,通常我们把前者称为2.1GB的容量限制,后一种称为2.1GB的容量限制。
硬件容量硬件
当时,为了528MB容量限制的问题,人们提出一些不同的办法,其中一个办法就是INT 13服务的磁头寄存器没有用到的4位中的2位(确切的说是高2位)保留给柱面数的第11、12位使用。这样,最大的磁头数就是64(2的6次方)。但是,当时的操作系统不使用这种转换方法,其认为磁头寄存器的所有位数只可能记录磁头数。比如,为了正确地转换柱面数为2,048、磁头数为64的硬盘,就需要操作系统把柱面数除以4(512个逻辑柱面数),磁头数乘以4(256个逻辑磁头数)。不过由于BIOS中并没有开放所有的磁头数寄存器,当然无法记录这样的磁头数。因此遇到这种运行机制的BIOS,在系统自检的时候就会造成系统当机。
软件容量限制
当时DOS分区的限制是由文件分配表(FAT)决定的。FAT处理存储空间是以簇为单位的,它处理一簇的最大长度是32,768字节,最多能处理65,536个簇,如果将两个数字相乘,就会得到DOS的最大分区界限值是2,147,483,648字节或2,048MB(2,147,483,648 /1,0242)。因此超过这个容量的硬盘,如果使用FAT格式,就最大只能识别2.048GB的硬盘容量。
3.2GB的容量限制:
一些版本的BIOS不能识别超过6322柱面的硬盘,不过这种BIOS比较少见,由于柱面有限制,其最高支持扇区数为6,372,576(6322x16x63),如果乘以512扇区容量的话,其最高支持容量为6,372,576x512=3,262,758,912/1024=3.18GB。
4.2GB的硬盘容量限制:
当时一些操作系统使用8位寄存器来存储磁头数,这样当BIOS报告硬盘的磁头数等于256(最高容量)时,只有磁头数的最先一位(即0)被系统保存,从而导致硬盘配置错误。一旦硬盘的磁头数是16,柱面数大于8,192(2的13次方,由于后三位寄存器已经被磁头寄存器借用,其实这里牵涉到一个突破528MB容量限制的转换做法的问题,由于这一段比较负责,在这里就不详细介绍了,我们只要明白有这个限制就够了),系统就无法正常识别了,因此其最大的容量就被限制在了4.2GB=8192x16x63x512/1024。
8.4GB的容量限制
我们已经知道INT 13服务的寻址方式最高可以支持8.4GB以下的容量(柱面数、磁头数、扇区数的最大值分别是16,383、16和63,而三者相乘就是8.456GB)。因此,这个容量限制出现是迟早的问题了。所以,这个限制是我们目前最常遇到的容量限制。为了解决这个问题,一些厂商定义了新的扩展INT 13服务扩展标准。新的INT 13服务扩展标准不使用操作系统的寄存器传递硬盘的寻址参数,它使用存储在操作系统里的地址包。地址包里保存的是64位LBA地址,如果硬盘支持LBA寻址,就把低28位直接传递给ATA界面,如果不支持,操作系统就先把LBA地址转换为CHS地址,再传递给ATA界面。通过这种方式,能实现在ATA总线基础上CHS寻址最大容量是136.9 GB,而LBA寻址最大容量是137.4GB。
33.8GB的容量限制
在CHS寻址中,由于IDE(ATA)界面的限制,柱面数最高支持65,535(2的16次方-1),所以,当遇到柱面数大于65,535的时候,系统就无法识别这种硬盘了,不过LBA由于独特的寻址模式就不存在这个问题,这个容量限制具体为:65535x16x63x512/1024=33.8GB。
137GB的容量限制
相信这个问题就不用提了,目前的磁盘工作方式就注定IDE硬盘存在这个问题,前面介绍IDE(ATA)界面的时候,这个问题就已经出现了 那么遇到容量限制问题的时候,系统会出现什么状况呢?并且遇到这些问题如何解决呢?
容量限制的症状和解决方法:
528 MB
症状:无论容量有多大,识别不超过528MB。
解决方法:LBA模式设置硬盘,不过当时很多硬盘和BIOS都不支持这种设置,因此只能更换
2.1 GB
问题
症状:在加电自检时当机
解决方法:升级BIOS、强制硬盘跳线、LBA模式设置硬盘
问题
症状:分区的时候发现主分区划分2.1GB的容量
解决方法:更换FAT 32文件分配(不过早先的一些软件就无法使用了,并且不支持这个文件格式的操作系统也无法使用)划分多个分区
3.2GB
症状:在加电自检时当机
解决方法:升级BIOS、LBA模式设置硬盘
4.2GB
症状:在硬盘上创建分区后,再启动机器时当机。
解决方法:升级BIOS、LBA模式设置硬盘
8.4GB
症状:系统报告硬盘容量不超过8.4GB,在BIOS自检的时候可能会报硬盘参数错误并当机
解决方法:升级BIOS、采用专用的分区软件
33.8GB
症状:系统自检的时候当机
解决方法:升级BIOS,使用专用的硬盘、强制硬盘跳线、使用LBA模式管理硬盘
137GB
症状:无法识别硬盘或者系统自检的时候当机
解决方法:需要硬盘和主板(可以用ATA 133控制卡来支持)都支持最新的ATA 133规范(ATA 133规范是刚刚由Maxtor提出的一种新的硬盘传输规范,其把目前最高的28位可用的寄存器空间提高到48位,从而支持更大的硬盘)
的要点:
硬件解决方法:
从硬件思路上来看,既然很多问题都是由BIOS引起的,那么升级到合适的版本也就可以突破很多容量限制了,比如:3.2GB、4.2GB、8.4GB、33.8GB,这也是目前解决硬盘容量限制最简单的办法了。
另外选择BIOS扩展卡也是一个解决方法,不过此方法用于老主板上,目前的主板的BIOS都支持擦写,BIOS扩展卡使用起来即麻烦又要我们多投入一些金钱。
软件解决方法
从上面的解决方法来看,很多方法就是只要硬盘支持LBA寻址模式就可以解决问题了,因此一些公司推出了针对这个问题修补方法,其中最优秀的就是Maxtor的MaxBlast和Western Digital的EZ Drive了,这两种解决方法其实就是软件解决方法,它们可以转换大容量硬盘的各个参数,从而达到全容量使用硬盘的目的。不过这类软件并不是在操作系统启动后才加载的(在磁盘分区建立一个磁盘的管理BIOS,通过它来同系统BIOS进行联系),而是在BIOS启动后、操作系统启动前加载的,所以实现也比较简单。
另外使用专用的硬盘分区软件也是一个不错的解决方法,由于新版本的硬盘分区软件已经附带了INT 13扩展标准因此可以支持更大容量的硬盘,不过它也是同MaxBlast和EZ Drive一样会系统启动后加载INT 13扩展,当遇到硬盘分区表破坏或者覆盖后,磁盘使用会再次出现问题。
操作系统的限制:
目前又几种操作系统不支持大容量的硬盘:DOS 6.22或更低的版本,不支持大于8.4 GB的硬盘,并且没有办法解决。Windows 95(NT 3.5x)支持INT 13扩展、支持更大容量的硬盘,不过FAT 16限制其每分区最大支持的容量仅为2GB。另外以上两种操作系统都不支持FAT 32格式,因此要使用大硬盘尽量不要采用以上的操作系统。Windows NT 4.0存在一个奇怪的问题:当启动分区的容量大于8.4 GB时,NT就不能使用超过8.4 GB的其它硬盘空间了,因此使用此操作系统要注意。
综上所说,大家应该对磁盘容量限制的成因和解决方法有一个比较感性的认识了吧,一般来说避免容量限制问题的出现就是:更新BIOS,尽量不是用CHS硬盘寻址模式。以上两点是解决容量限制最简单和有效的办法,因为我们无需投入任何费用,并且对所有用硬盘都适用,并且无须进行烦琐的软件设置或安装。
附:一种新的8.4GB容量限制问题解决方法:
一大容量硬盘,在BIOS中限制仅为8.4GB大小,不管它,保存CMOS信息,启动系统执行FDISK,在系统认出的8.4GB硬盘上先分出一个分区(即为C盘,大小随意),在分出的分区(C盘)上将WINDOWS系统装好。(注意,只能先分出一个分区)然后,将此大硬盘接在能认出大硬盘全部容量的上,将剩下的容量全部分完(注意,每个逻辑分区容量不能大于8.4GB),最后,再将此大硬盘接回不能识别8.4GB以上容量的电脑上,CMOS仍将此硬盘认为8.4GB,不管他,保存CMOS信息后重启系统,进入WINDOWS系统,发现所有的逻辑盘全部存在,格式化后即可使用。
注:以上的分区必须按照FAT 32模式来进行
这种办法对那些已经停止更新BIOS的主板来说非常有用,并且不需要任何软件介入。