iThome

較資深的電腦使用者都曾經歷過多次硬碟容量瓶頸問題,受BIOS的INT 13H中斷服務功能、硬碟的CHS定址方式、作業系統與檔案系統等因素影響,過去十多年來曾陸續出現過528MB、2.1GB、8.4GB、137GB等容量瓶頸,電腦廠商也透過引進24位元與48位元LBA定址模式、BIOS INT 13H Extension模式等技術,先後突破了前述限制。
然而隨著硬碟技術不斷發展,碟片儲存密度持續提高,今日的硬碟應用又再次遭遇2.1TB的容量瓶頸。

限制可用磁碟容量的因素

電腦中的資料儲存都須按一定的編址方式來進行,以便有序的寫入、搜尋與取用資料,進而達成有效的資料組織與管理。從另一個方面來看,不同編址方式的最大定址能力,也就決定了理論上可存取的最大空間上限。

從最上層的應用程式資料到底層儲存裝置,電腦中的資料儲存會經過應用程式、作業系統、檔案系統、儲存裝置驅動程式、磁碟控制器與磁碟儲存裝置等環節,任一環節的定址能力,都會影響到底層硬碟實際可用的儲存容量。

以最普遍的x86架構電腦為例,影響磁碟可用空間的主要因素有以下幾種:

作業系統的硬碟分割方式
不同版本作業系統所支援的硬碟分割方式(Partition styles)中,能應用的分割區容量不同。如傳統的MBR(master boot record)允許的分割區容量上限為2TB,新的GPT(GUID Partition Table)分割理論上則可達到9.4ZB。

檔案系統支援的磁碟區容量
磁碟區分割後,便須格式化為檔案系統才能為應用程式使用,不同檔案系統所能支援的磁碟區(Volume)容量上限各有不同,以DOS/Windows系統採用的檔案系統為例,早期FAT16允許的上限為2GB,後來改進的FAT32提高到2TB,NTFS則進一步提高到256TB(NTFS理論上可支援更大的磁碟區,但實務應用上最大只到256TB)。

而Linux採用的Ext2與Ext3檔案系統,則視格式化時採用的區塊(block)大小不同(1/4/8/32KB等),可允許最大2~32TB的磁碟區(每個檔案系統最多允許2的32次方個區塊),Ext4則能支援最大1EB的磁碟區。不過檔案系統儘管可支援這樣大的磁碟區,Linux用於建立與維護檔案系統的e2fsprogs程式,卻只能支援最大16TB容量,因此在實務部署上限制了檔案系統最大磁碟區空間。

不同磁碟指令集的定址能力
磁碟裝置的運作是透過磁碟指令集(command-set)進行,不同規格的硬碟各有其指令集,如ATA指令集或SCSI指令集等。因此應用程式必須透過作業系統底層的磁碟控制器驅動程式,將存取需求轉換為對應的磁碟區塊指令,對ATA設備發送ATA指令,對SCSI設備則發送SCSI指令,這些指令中包含了對應於磁碟的位址區段,藉以對指定的硬碟區域執行存取作業。

而磁碟指令集支援的定址方式,將直接影響到實際可允許存取的磁碟容量。

如SCSI Block Command指令中的LBA(Logical block addressing)位址變數長度,將決定一個SCSI目標上的LUN所能存取的儲存空間。早期的SCSI指令集支援的是32位元LBA定址,由於硬碟每個扇區(sector)大小為512Bytes,2的32次方乘以512等於2TB,因此有2TB容量限制。改版的SCSI Block Command便擴展為支援64位元LBA定址,因而解除了該限制,可定址高達8ZB的空間。

而以ATA指令集來說,在早期的IDE規格時代是採用22位元LBA定址,最大只能定址2.1GB空間,但從1994年的ATA-1以後,便能支援28位元的LBA定址,所以最大可定址容量提高到137GB。從2003年的ATA-6以後,更進一步支援了48位元LBA定址,最大定址容量也隨之提高到144PB。

而影響到電腦對不同磁碟指令集支援能力的因素,則主要是硬碟本身、磁碟控制器,以及作業系統中對應於磁碟控制器的驅動程式。舉例來說,IDE/ATA便要ATA-6以後規格的ATA硬碟才提供48位元LBA定址,此外也要一定版本以後的主機板南橋晶片組與其驅動程式,才能支援48位元LBA定址的硬碟,必須兩方面共同配合,才能實現完整的硬碟48位元LBA定址支援,從而使用大於137GB的硬碟容量。

而SCSI方面,則是在比ATA更早許多的時候,SCSI卡的控制器、驅動程式與SCSI硬碟就已支援64位元LBA。

BIOS中斷指令的定址能力
在x86架構下,當電腦啟動、尚未載入作業系統之前,必須透過BIOS中斷呼叫服務來探索與初始化硬體資源,自IBM建立PC AT架構以來,x86架構電腦都是透過BIOS的INT 13H中斷服務,來進行低階磁碟操作,因此INT 13H的定址能力,便決定了底層磁碟最大可用容量。

INT 13H採用以10位元磁柱為基礎的24位元CHS定址(磁柱10位元,磁頭8位元,磁區6位元),理論上可定址8.4GB容量。但問題在於這樣的定址方式與底層硬碟的定址方式有所衝突。

ATA-3以前的ATA指令集是採用16位元磁柱模式的28位元CHS定址(磁柱16位元,磁頭4位元,磁區8位元),理論容量上限是137GB,這雖然還比BIOS 13H允許的定址上限大上許多,但是當這兩者遭遇時,由於記錄方式不同,通約的結果只能取兩種定址模式中的最小值(磁柱10位元,磁頭4位元,磁區6位元),導致電腦只能定址528MB磁碟空間,反而低於兩種定址方式所允許的最小值,這也就是早期IDE硬碟所謂528MB容量限制的由來。

為解決這個問題,主機板廠商一開始是採取修改BIOS 13H的方式來因應,為主機板BIOS磁碟機選項中新增一個Large模式,可透過轉移2個磁頭記錄位元給磁柱記錄,將定址空間增加到2.1GB,比528MB大了4倍,這就是早期電腦主機板BIOS提供的一種特殊的Large硬碟模式。

不過前述方式只是一種暫時的應付辦法,僅能將容量瓶頸問題稍往後延,而非徹底解決方法,於是後來便出現了新的BIOS INT 13H extension中斷服務,可直接支援LBA定址模式,透過虛擬的邏輯CHS位址來存取磁碟,因而擺脫了INT 13H服務與硬碟之間因不同CHS定址方式所產生的528MB容量限制,也解除了INT 13H的8.4GB定址能力限制。

擁有10年以上電腦使用經驗的用戶,應該都會對10多年前電腦BIOS中磁碟機選項提供的Normal、Large與LBA三種模式有印象,其中Normal對應傳統的13H中斷服務與磁碟CHS定址,所以有528MB上限,主要用於小硬碟;Large提供修改的BIOS 13H,適用於528MB以上、小於2.1GB的硬碟;更大的硬碟則須要設定為LBA模式才能支援。

不同因素通約後的容量上限

顯然的,在一連串影響磁碟可用容量的因素中,決定實際磁碟可用空間的,將是其中定址能力最小的那個環節。

早期最主要的限制在於BIOS INT 13H與IDE/ATA磁碟CHS定址之間的衝突,以致最大可用容量僅為528MB。當前述問題解決後,瓶頸便轉移到28位元LBA/CHS定址造成的137GB限制,後來改用48位元LBA後,便消除了這個瓶頸,一舉將定址能力提高到144PB。

藉由採用64位元LBA定址模式,當前x86電腦BIOS的INT 13H extension中斷服務,理論上可定址多達8ZB空間,不過ATA規格只使用48位元LBA定址,搭配ATA硬碟時的最大可用空間仍為48位元LBA定址所允許的144PB。但即使如此,以當前硬碟發展速度,還要很多年才會遭遇144PB這個上限(或許傳統磁性記錄技術無法達到這樣大的儲存能力,而須依靠其他儲存技術)。

然而隨著電腦系統底層定址能力的提高,此時作業系統的磁碟分割與檔案系統支援能力,又成為新的瓶頸。

今日的2TB容量瓶頸問題

如前所述,當前電腦在磁碟底層已能透過48位元LBA定址,支援最大144PB的空間,而上層的NTFS檔案系統亦能支援到256TB容量,但問題出在磁碟分割上,目前多數x86架構電腦仍受制於MBR分割所帶來的2TB限制問題。

雖然微軟新的GPT分割理論上可支援高達9.4ZB的磁碟分割區,但一來只有Windows Server 2003 SP1以後的新版Windows才支援GPT,目前占有率最高的Windows XP只能支援MBR分割,對2TB上限問題是無能為力的(只有64位元Windows XP可支援GPT)。

二來,目前個人電腦的BIOS INT 13H extension中斷服務不支援GPT磁碟分割區,無法識別GPT磁碟區,只能支援舊的MBR分割區。這也造成使用者仍舊必須以MBR分割區作為開機磁碟,才能讓BIOS在開機時載入,這也使開機磁碟區受到MBR分割的2TB限制。

因此在傳統PC BIOS與Windows Server 2003 SP1的組合中,雖能使用GPT獲得大於2TB的磁碟區,但只能當成資料碟使用,而不能當成開機磁碟。

過去除非是利用硬體RAID卡或透過動態磁碟將多臺硬碟組成RAID,否則一般很少會碰到2TB上限問題。然而從去年開始,2TB容量的SATA硬碟已開始在市場上銷售,突破2TB門檻已是指日可待,日後電腦的磁碟組態輕易就會超出2TB,連帶也凸顯這個容量上限問題。

突破2TB限制的要件

只要作業系統支援GPT分割磁碟,即可將大於2TB的磁碟當成非開機用的資料磁碟。但要把大於2TB的磁碟區當成開機碟,除了必須採用GPT分割外,電腦BIOS也須改用新一代的EFI(Extensible Firmware Interface),才能識別GPT分割磁碟區,並從GPT磁碟區開機。

EFI是由Intel領導開發、用於取代BIOS的一種新型作業系統—韌體間介面,可支援以GPT磁碟開機。但這個功能還受到作業系統版本限制,如微軟只對64位元的Windows提供以EFI啟動GPT磁碟開機功能,詳見附表。

只要透過以EFI為基礎的電腦主機,搭配支援GPT分割的作業系統,理論上就能完全解決既有的2TB磁碟區限制問題。不過目前只有新一代電腦才支援EFI架構,舊的BIOS架構電腦即使安裝支援GPT分割的作業系統,仍只能將大於2TB的GPT分割區作為資料磁碟使用,而無法作為開機用的系統磁碟。

總結起來,要使用大於2TB的磁碟區必須滿足以下這些條件:

●作為非開機的資料磁碟使用:容量大於2TB的硬碟+支援GPT分割的作業系統。

●作為開機磁碟使用:容量大於2TB的硬碟+支援GPT分割的作業系統+採用EFI的電腦主機。

 

EFI解除BIOS桎梏

前面我們提到當前的2TB磁碟容量限制,主要是因為電腦的BIOS只支援MBR分割的開機磁碟區,所衍生的問題,必須透過改用EFI架構的主機板才能解決。我們在這裡對此做進一步的說明。

BIOS是自1980年代IBM建立PC AT架構以來,便在PC上沿用至今的底層服務架構,但這套老舊的架構也制約了x86架構電腦的發展。

BIOS主要用於電腦初始化,包括:

(1) 檢測硬體。

(2) 初始化硬體。

(3) 啟動OS Loader載入作業系統。

(4) 作業系統啟動後,一部分程式繼續留在記憶體中,為作業系統與應用軟體提供中斷服務,如INT 10H螢幕輸出服務,INT 13H磁碟服務等。

由於這套架構是20多年前的16位元處理器與DOS作業系統時代制定的,採用了當時16位元程式碼、從MBR磁碟區特定區間載入開機程式,以中斷概念為基礎的程式運作架構,以及1MB以下的記憶體固定編址等設計,後來發展的新一代x86電腦為了維持向下相容性,也繼續沿用這套架構。

但這也造成x86電腦的發展給BIOS綁住的問題,儘管處理器已一路進步到64位元,作業系統也從DOS進化到Windows 7,但電腦的基礎仍是建立在BIOS上,啟動時仍是以BIOS能支援的16位元真實模式進行初始化,並從MBR磁碟區開機。且用來存放BIOS程式的EPROM或Flash記憶體容量非常小,也難以增加新功能。

為了解除BIOS對x86電腦架構造成的束縛,在Intel主導下,UEFI論壇開始推動新一代的EFI架構。

EFI的架構與運作

EFI全名為可延伸韌體介面(Extensible Firmware Interface),與BIOS同樣都是用於電腦的初始化,但運作上像是一個低階的作業系統,包含了以下幾個主要模組:

● Pre-EFI初始化模組。
● EFI驅動執行環境(DXE)。
● EFI驅動程式。
● 相容性支援模組(CSM)。
● EFI高層應用。
● GUID磁碟分割表(GPT)。

開機時先啟動Pre-EFI初始化模組初始化CPU、南北橋晶片與記憶體,然後載入DXE,以便為載入EFI驅動程式做好準備。接下來各介面卡、晶片組的EFI驅動程式將依序載入,直到完成開機作業。

EFI的效益

藉由EFI,可以得到以下效益:

● 透過支援GPT分割,可從大於2TB的磁碟區開機,解除以往BIOS只支援MBR分割造成的開機磁碟2TB容量限制。
● 更快的開機速度。
● 與處理器無關的架構。過去的BIOS由於設計時是基於8088處理器的16位元與1MB記憶體定址架構,這也造成後來的許多問題。EFI則採用32/64位元架構,有完整的32/64位元定址與存取能力。
● 與處理器無關的驅動程式。EFI的驅動程式是以只能在EFI驅動執行環境執行的EFI Byte Code撰寫,可保證驅動程式的相容性,任何裝置的EFI驅動程式都可在EFI環境下執行,而無須顧慮處理器平臺是x86或IA-64,廠商也可省下為不同處理器平臺撰寫不同版本驅動程式的麻煩。
● 更彈性的pre-OS環境,容易操作的圖形化介面,甚至可在未載入作業系統情況下連接存取網路。

要使用EFI必須有主機板與作業系統的支援,最早支援EFI的平臺是HP的Itanium伺服器,在個人電腦方面,自微星於2008年推出全球首款支援EFI架構的主機板後,目前的EFI個人電腦主機板仍不多,用戶的選擇十分有限。

在作業系統方面,微軟只在64位元Windows上支援EFI,另外Mac OS X 10.4以後,以及較新的Linux、HP-UX也能支援EFI。

 

磁碟儲存應用各環節的定址能力

Windows對GPT分割的支援

熱門新聞

Advertisement