容量限制問題的成因
要明白這個原因我們需要對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)界面的時候,這個問題就已經出現了 那么遇到容量限制問題的時候,系統會出現什麼狀況呢?並且遇到這些問題如何解決呢?
2.1TB的容量限制
MBR,主引導記錄(Master Boot Record),也就是現有的硬碟分區模式。MBR分區的標準決定了MBR只支持在2TB以下的硬碟,超過2TB的硬碟只能管理2TB!為解決這個大問題,微軟和英特爾在EFI方案中開發了GPT分區模式。
容量限制的症狀和解決方法
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位,從而支持更大的硬碟)
2.1TB
症狀:不能識別2.1TB外的磁碟容量
解決方法:使用GPT分區表和EFI BIOS的主機板,windows7或windows xp 64bit 。如使用傳統的BIOS則硬碟只能當從盤使用,不能啟動作業系統
解決方案的要點
硬體解決方法:
從硬體思路上來看,既然很多問題都是由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的其它硬碟空間了,因此使用此作業系統要注意。