天天看點

硬碟容量限制變化曆史

硬碟容量限制變化曆史

20080421

草木瓜 轉載

原文出處http://www.cuan.cn/blogs/WebPostDetail.aspx?accountname=admin&PostGuid=e94d0f2cf6d54e2784c5822bc1ff0211

這篇文章曆史性,體系性内容都很翔實,由原作者表示由衷的感謝。

  對于大部分擁有硬碟的使用者來說,特别對于那些正在準備更新到大硬碟但是卻不打算更新系統的其它部分的使用者,它們首先考慮的是自己的系統是否支援這麼大容量的硬碟。這個問題同硬碟結構、BIOS和作業系統息息相關--歸根到底這些問題的出現是由于當時的人們由于條件所限制而缺乏長遠考慮的結果。在當時這樣的設計根本沒有問題,但是随着技術的進一步發展這些問題就曝露了出來,而且影響頗廣。

好在這些問題都已經被通過不同的方式解決了。本章節将會同大家一起來談談容量限制的問題。下面的容量限制分别采用兩種方式表示,前面的一種采用的是1GB=1000MB和1MB=1000KB的換算,而後面的容量采用的是1GB=1024MB和1MB=1024KB的換算。

528MB/504MB容量限制

這并不是曆史上第一個硬碟容量限制問題,但是它是第一個引起人們廣泛關注的容量限制問題。這之前硬碟的容量限制問題也一再的出現過,但是因為PC使用者非常的少,是以很多人并不知道這些問題,這裡我們做一個簡短的回顧:

10.4 MB容量限制:這個問題出現在最早的IBM PC/XT上,這種裝置使用了一種專門設計的硬碟,它有312個柱面(cylinders)、4個磁頭和17個扇區,這樣算來它的最大容量隻能為10MB,這種容量限制來自于硬碟。 16MB FAT12容量限制:第一種用于硬碟的FAT格式是12bit的,它最多能容納4086個大小為4096位元組的簇,是以總容量為16,736,256位元組,也就是大約16MB。 32MB DOS 3容量限制: 為了解決16 MB容量限制,DOS 3.x開始支援FAT16檔案系統,不過由于這種檔案系統隻能允許16384個容量為=2048位元組的簇,是以它就造成了32MB的容量限制問題,不過由于多分區的概念的引入,硬碟的容量并沒有是以受到太大的限制,隻是每個分區的容量不能超過32MB。 128MB DOS 4容量限制:DOS 4.x開始支援65526個容量為2048位元組的簇,是以其容量上限提升到了128MB

可以看到上面的這些容量限制的問題大都是由于MS-DOS系統所引起的,這之後的DOS 5允許每個簇的最大容量為8192位元組,是以最大分區容量限制為512 MB,不過這個容量限制并沒有引起人們的廣泛關注,因為在這之前由于BIOS和IDE規範所引起的504MB容量限制首先曝露了出來(大約是1994年左右)。如下表所示:

标準

 用于柱面的Bit

 用于磁頭的Bit

 用于扇區的Bit

 用于定義整個結構的Bit

IDE/ATA

 16

 4

 8

 28

BIOS Int 13h

 10

 8

 6

 24

最小定義

 10

 4

 6

 20

可以看到IDE/ATA标準和Int 13h組織的标準非常的不一緻,是以當分别符合這兩個标準的裝置配合使用的時候,隻能遵循其中的最小規範。下面我們把bit所代表的容量換算了出來:

Standard

 最大柱面數

 最大磁頭數

 最大扇區數

 最大容量

IDE/ATA

 65,536

 16

 256

 128 GB

BIOS Int 13h

 1,024

 256

 63

 7.88 GB

最小定義

 1,024

 16

 63

 504 MB

對于上面的數字是這樣算出來的:1024x16x63x512/1024x1024=504MB,如果不除以1024x1024而是除以1000000的話得到的數字是528MB--按照不同的換算方法,得到的容量不同但是其實指的是一個意思。

2.11/1.97GB容量限制

前面的504MB容量障礙的成因之一是BIOS無法支援超過1024柱面,不過現在的BIOS系統都能支援超過1024柱面。不過當時的部分BIOS系統雖然卻隻能支援不超過4095個柱面,這是因為它采用了12bit來表示柱面,這樣所支援的最大容量就是4096 x 16 x 63 x 512位元組了,也就是1.97GB。這個問題是在1996年左右浮現出來的,可以通過軟體的方法來解決。

2.11/2GB容量限制

這個容量限制注意的人們會更多一些,它也是由于檔案系統的定義造成的分區容量限制,同BIOS沒有什麼關系。從DOS 6和Windows 3.x以後開始支援FAT16檔案系統,如果在這些系統使用容量超過2GB的硬碟必須對于硬碟進行分區,而且每個分區的容量不會超過2GB。

FAT16最大隻能支援65536個32KB容量的簇,那麼也就意味着每個分區不能超過2GB的容量。估計現在沒有使用者還會遇到這個問題了,因為隻有DOS、Window 3.x和Windows 95第一版會有這個問題,更新到更高版本的支援FAT32或者NTFS檔案系統的作業系統(Windows 95 OEM SR2、Windows 98、Windows ME、Windows 2000和Windows XP都支援FAT32,其中後兩者都支援NTFS檔案系統)就沒有這個問題了。

3.26/3.04GB容量限制

這種容量限制的影響範圍也非常的小,隻是在一些特殊的機型中才出現過,它的出現是由于BIOS無法正确的識别超過6322桌面而造成的--如果使用者試圖設定高于6322的柱面,系統将會挂起。這個容量限制是這樣計算的:6322柱面 x 16頭 x 63 扇區 x 512 位元組=3GB

Phoenix BIOS容量限制

這是一個比較特别的容量限制,而且範圍也非常的小,隻是Phoenix BIOS 4.03和4.04這兩個版本上出現的問題。它其實隻是BIOS設計的一個對于硬碟容量計算錯誤的bug,基于這兩個版本BIOS推出主機闆的主機闆廠商有的矯正的這個問題,有的則沒有,是以也不是一個絕對的情況,不過這裡還是告訴大家,萬一有使用者遇到一些不能解釋的問題,或許這是一個啟發。

這個問題比較怪異,如果使用者把IDE裝置的磁頭數目設定為16,而扇區設定為63,那麼柱面設定為6349一下不會有任何問題,也就是說硬碟容量不能超過3.05 GB;如果把柱面數目設定為6350-8322之間,程式将會死鎖;如果柱面設定為8323-14671之間,那麼系統可以正常的工作,但是硬碟的容量無法正常的顯示。不過以後版本的BIOS都修正了這個問題。

4.22/3.94GB容量障礙

在解決了504MB容量限制之後,業界對于通過BIOS結構轉換(geometry translation)來解決這個問題駕輕就熟。這種方法主要是把硬碟的柱面數除以轉換系數來把IDE/ATA的柱面數限制在BIOS能轉換的範圍之内(也就是1024之内),當然為了保證正确識别硬碟容量在IDE/ATA磁頭數目乘以同一個系數(因為BIOS支援的磁頭數是256),進而實作對于超過BIOS Int13h規範的硬碟的正确支援。不過這樣依然會存在一個3.94GB的容量限制。

下面的表格所表示的是如何讓一個符合BIOS int13h規範的BIOS正确的支援容量為6.4GB的硬碟:

  柱面數目

 磁頭數目

 扇區

 容量

IDE/ATA 限制

 65,536

 16

 256

 137 GB

硬碟邏輯結構

 12,496

 16

 63

 6.45 GB

BIOS轉換系數

 除以16

 乘以16

 --

 --

BIOS轉換後的結構

 781

 256

 63

 6..45 GB

BIOS Int 13h 限制

 1,024

 256

 63

 7.88 GB

這款6.4GB的硬碟的邏輯結構為12496柱面、16磁頭和63扇區,但是BIOS int13h規範最大隻能支援1024個柱面,是以通過除以16使得柱面數目低于1024,而磁頭數目乘以16這樣的方式,既不會影響硬碟的總容量卻巧妙的解決了IDE/ATA和int 13h之間不統一的問題。不過,部分BIOS無法正常的支援256邏輯磁頭的轉換,是以人們變通了一下,把轉換系數改為了15:

  柱面數目

 磁頭數目

 扇區

 容量

IDE/ATA 限制

 65,536

 16

 256

 137 GB

硬碟邏輯結構

 12,496

 16

 63

 6.45 GB

BIOS轉換系數

 除以15

 乘以15

 --

 --

BIOS轉換後的結構

 833

 240

 63

 6..45 GB

BIOS Int 13h 限制

 1,024

 256

 63

 7.88 GB

可以看到當轉換系數改為15之後,依然可以滿足BIOS柱面要求,而磁頭數目隻有240。

7.93/7.38GB容量限制

這個容量限制主要是由于接口的限制所形成的,因為這個。不過,在部分系統上由于Int13h接口的限制它的最大容量隻有7.38 GB。

其實這個容量限制的成因前面已經提到了,雖然Int13h接口規範支援1024柱面、256磁頭和63個512位元組的柱面,不過DOS和部分版本的Windows無法轉換256邏輯磁頭,是以隻有使用15做為轉換系數,這樣最大的磁頭數目隻能是240,是以這個容量限制為:

1024 x 240 x 63 x 512= 7,927,234,560位元組

解決這個問題隻有通過Int13h擴充方案。

8.46/7.88GB容量限制

這個容量限制更加通俗的稱為8GB容量限制,估計很多看到這篇文章的朋友都經曆過這次容量限制。起因還是因為Int 13h規範,它僅僅使用10bit來定義柱面數(最大1024),使用8bit定義磁頭數目(最大256),使用6bit定義扇區數目(最大64,但是因為不使用0,是以最大是63),每個扇區的容量是512位元組,那麼最大的容量為8,455,716,864,這個容量限制是無法通過邏輯結構轉換來避免的。

這個時候顯然必須要對于Int13接口規範進行修改了,Int 13擴充規範則解決了這個問題。因為作業系統也是通過Int 13h來通路硬碟的,是以實作對于Int13擴充接口規範的支援也需要作業系統的支援,DOS 6.22及其以前的版本、Windows NT 3.5都不支援Int13h擴充,是以使用這些系統無法支援8.4GB以上的硬碟。

32/29.8GB容量限制

微軟在1999年宣布Windows 95将不支援容量超過32GB的硬碟,不過Windows 98以及Windows Me都對于32GB以上的硬碟提供了很好的支援,其主要的原因是Windows 95中的Scandisk在保護模式下對于容量超過32GB的硬碟進行磁盤掃描的時候,對于967363以後的柱面全部柱面都報錯,顯然這僅僅是一個軟體錯誤,但是微軟宣布Windows 95不支援超過32GB容量的硬碟,顯然是不希望使用者再使用這個“古老”的系統了。

33.8GB/32GB容量限制

其實這個容量顯示是我們通常所說的32GB容量限制,它的起因還是BIOS。部分版本的Award BIOS無法識别超過65535個柱面,最大隻能支援16個邏輯磁頭和63個扇區,這樣最大支援支援32GB左右的容量。這個問題出現在1999年左右,這之後的産品已經很好的解決了這個問題。

其實為了解決8GB容量限制的問題,人們做了比較長遠的打算,開始使用LBA來代替原來的使用柱面、磁頭、扇區定位的方式,是以對于出現這個32GB容量限制的問題非常的令人費解。

137/128GB容量限制

這個容量限制是由LBA形成的,LBA通過一個28bit的位址定義了268435456個扇區,每個扇區的容量為512位元組,這樣LBA最大可以支援137438953472位元組的容量,以1000位元組=1GB來換算的話,就是大約137GB容量。在BIOS中引入LBA模式時可以計算到這個容量限制為137GB,不過那個時候的硬碟容量隻有幾個GB,137GB隻是一個笑話而已,然後硬碟容量的發展速度的确超乎了人們了想像,目前200GB的容量的硬碟已經在市場上銷售了。

那麼這些大容量硬碟是如何得到正确的支援的呢?Technical Committee T13組織通過一個48bit的位址來定義了更多的扇區,不出意外的相當長的時間裡這個解決方案都不會遇到容量障礙的問題(144155188 GB)。不過由于,現在的用于PC的Windows作業系統都是32bit的,這樣就帶來了一個2200 GB的容量限制,如果最近幾年我們使用的作業系統不能過渡到64bit的話,我們很快就會遇到這個容量限制的。