Table of Contents
電腦軟體如何利用硬碟空間
在談完硬體層面的問題之後,接下來讓我們把目光轉向電腦軟體如何利用硬碟空間上,對於軟體來說,硬碟廠商使用什麼樣的技術去實作一款硬碟其實並不重要,軟體需要在意的是「有哪些空間可以運用」、「如何去劃分出這些空間的位置」、「如何維持高效率的存取」、「要用什麼規格去紀錄這些資料」等方面,因此我們發展了許多標準規範來解決這些問題,例如磁區的劃分與定址方式、硬碟分割的規劃方式與檔案系統等。
磁盤的區域劃分
由於軟碟與磁碟是利用「磁性物質在儲存媒介的分布情形」來做資料的讀寫,因此對磁性儲存媒介進行分區並且在儲存與讀取資料時精準定位各分區的實體位置非常重要,因此我們將磁性儲存媒介上劃分為許多磁區作為最小單位,並且根據不同的磁區分群方式創造出了磁軌、磁叢等名詞。
為了加速資料的存儲,我們在軟碟與硬碟上都是採用圓形的磁性儲存媒介 (稱為磁盤 disk),以透過快速轉動的方式來縮短讀寫頭在各個區域之間移動所需要耗費的時間,在結構上如同上面的簡圖,一塊硬碟可能有多個磁盤 (disk),而每個磁盤都具有正、反兩面,而每個磁盤表面上可以劃分為許多個同心圓,稱之為磁軌 (track),由於每面磁盤都需要一個讀寫頭,而且這些讀寫頭都裝置在同一個支架上面,因此會同步進行移動並同時接觸相對位置相同的磁軌,基於這樣的特性,讀取所有盤面上同一相對位置的磁區的效率會比讀取分散在不同相對位置的磁區來得高上許多 (可以減少讀寫頭移動的需求),而這些由上往下將每個磁盤上對應相對位置的磁軌可合稱為一個磁柱 (cylinder)。
而每個磁軌上可以分出許多稱之為磁區 (sector) 的小格子,這些小格子就是硬碟儲存資料時的最基本單位,絕大多數的硬碟都是以 512 bytes 為一個磁區的容量大小,近來硬碟廠商大力推廣的先進格式化 (Advanced Format,AF) 硬碟則是順應硬碟容量提升為了降低 ECC 校驗所需佔用的空間與造成的性能影響而將單一磁區的大小提升為 4,096 bytes 的意思。
此外,根據作業系統與檔案系統的設計,多個磁區有時也可以被合成為一個磁叢 (cluster) 或磁段 (block) 以方便作業系統處理檔案並進一步提高效率。
CHS 定址系統
在將這些單位定義清楚之後,接下來就可以對每個磁區賦予一個專屬位置,也就是所謂的「定址 (addressing)」,一般而言儲存設備所使用的定址方式主要有 CHS (Cylinder, Head and Sector) 與 LBA (邏輯區塊定址,Logical Block Addressing) 兩種方式,早期的電腦系統大多使用 CHS 定址,由其名稱可以知道這種定址方式是根據磁柱、磁頭以及磁區的方式來給予每個磁區一個專屬位置,先定出磁柱 (就是讀寫頭落點的位置),再決定磁頭 (其實就是選擇一個盤面) 以標定出特定的磁軌,最後在從這個磁軌上選出所要的磁區。
這種方式主要是對人類而言較為直觀,因為可以直接從定址的結果當中看出該磁區的實際位置,但缺點也很顯而易見,因為磁區位置的長度是固定的,而又要分段做固定的定義,因此相對而言所能定址的磁區數量就會比較受限。
例如在早年設計 IBM PC 的 BIOS 時,當年的工程師認為磁盤的密度提昇可能會很有限,而人們可能會透過堆疊大量磁盤的方式來提高硬碟的儲存容量,因此在設計 CHS 定址時將多達八個位數定義給了磁頭 (head),磁柱 (cylinder) 則分配了 10 個位數。
但後來的情況卻不是當年工程師所想的那樣,時至今日硬碟磁盤數量再怎麼多通常也不會超過 8 片,最多也就只有 16 面而已,根本不可能用到 255 個磁頭定址,這導致依照這種 CHS 定義規則設計出來的系統能夠定址的磁碟容量就變得有限許多,遠遠達不到原先理論估計的 8.4 GB。
而後來發展的 ATA 規範所採用的 CHS 定義規則則是將採用 28 位元定址,且磁頭被分配的位數只剩下 4 位,磁區則增加為 8 位,磁柱更是提高為 16 位,將理論上限提高至 137 GB,但卻引發了相容性問題,在早期的系統上只能正常存取 BIOS 定義與 ATA 規範定義的最大共同範圍內的定址-也就是磁柱 10 位元,磁頭 4 位元,磁區 6 位元,結果反而使最大容量被限縮到只剩下 528 MB,直到 1996 年廠商才透過在 BIOS 內新增大型硬碟模式 (Large Mode) 將磁頭的定義位數減少兩位並將空出來的二個位元重新分配給磁柱的方式使可支援的硬碟容量增加至 2.1 GB。
LBA 定址系統
然而,如同前面所提及的,實際上對軟體而言其只需要能夠標定出所有磁區的正確位置就足夠了,實際上軟體在讀寫資料時並不需要真正知曉每個磁區實際落在哪個盤面、哪條磁軌上,再加上越來越多非磁性儲存媒介的儲存裝置誕生 (這些裝置不採用磁性儲存媒介,因此自然也沒有甚麼磁軌、盤面的問題),因此後來的系統多改採 LBA 定址,這種方式非常直接,其實就只是直接賦予每個磁區一個專屬編號而已,可定址的理論最大容量會隨著位置編號的位數長度而持續指數增長。
磁區的結構
解決如何賦予磁區專屬位置以利使用的問題之後,接下來站長要談的是磁區本身的結構。
在傳統的架構中一個磁區可以存放 512 bytes 的資料,但一個完整的磁區並不是只由包含這 512 bytes 資料的區塊所組成,還要加上作為頭部的導入區塊 (Sync / DAM)、作為尾部的磁區間隙 (Gap) 與為了提高資料正確性而設計的 ECC 錯誤校正碼區塊這三個部分才能構成一個完整的磁區。
由此我們可以知道一個完整的磁區在磁盤上所佔據的面積實際上會略大於存放 512 bytes 資料所需要的最小空間,且每多存放 512 bytes 的資料就要多增加一組導入區塊、磁區間隙以及錯誤校正碼。
隨著硬碟的容量愈來愈大,單一磁盤上容納的磁區數量愈來愈多,這些不斷重複的導入區塊與磁區間隙就對磁盤上的面積造成了浪費,這就是接下來站長要談的「先進格式化 (Advanced Format)」的發展由來。
先進格式化 (Advanced Format,AF)
先進格式化雖然有著響亮的名字,但其實本質上並不是甚麼非常特別的技術,只是把原先單一磁區所容納的資料量由 512 bytes 提高至 4,096 bytes 而已,這使得硬碟在儲存相同大小的資料時所需要的磁區數量會下降為原來的四分之一,因此可以有效節省磁盤上被用做導入區塊與磁區間隙區域的面積,進而提高單位面積所能儲存的資料大小,根據 WD 的說法,採用先進格式化的硬碟磁盤單位面積所能容量的資料量可以提高約 11%。
若文字敘述上不是那麼好理解的話,搭配上方的示意圖應該就能很容易明白先進格式化到底是怎麼一回事了,值得注意的是由於先進格式化縮減磁區數目、提高單一磁區所包含的資料量後 ECC 錯誤校正碼區塊的數量也跟著減少,為了避免硬碟保存資料的可靠性下降,因此多數廠商在先進格式化硬碟上所使用的 ECC 錯誤校正碼區塊會較原先來得大,以彌補磁區數量減少之後 ECC 錯誤校正碼區塊縮減的問題。
磁碟分割
在談完磁區的架構與定址之後,下一個要探討的議題就是作業系統如何去應用這些磁區,為了方便使用與提高相容性、效率,作業系統不會直接依據前述的實體結構使用磁碟空間,作業系統會將特定範圍的磁區以虛擬的方式組織在一起進行應用,其中與使用者日常使用最為相關且最大的單位即為磁碟分割。
目前個人電腦所使用的磁碟分割方式主要有 MBR 與 GPT 兩種,其中前者多用於較老舊的電腦,近幾年的新電腦大多以 GPT 模式為主,接下來站長會分別介紹這兩種磁碟分割模式,由於相較於近年已成為主流的 GPT 磁碟分割模式而言,傳統的 MBR 磁碟分割模式的架構較為單純,因此我們先從 MBR 磁碟分割模式開始看起。
主要開機紀錄 (Master Boot Record,MBR)
在電腦啟動時會先從磁碟上的第一個磁碟區開始讀起 (即 CHS 定址編號 0,0,1 的磁區,這個磁區被特別命名為主要開機磁區 Master Boot Record,縮寫為 MBR),這個 512 bytes 大小的磁區當中包含了啟動程序、磁碟分割表 (Disk Partition Table,DPT)兩大部分,其中啟動程序佔據絕大部分空間 (約 446 bytes 左右),磁碟分割表則固定佔據 64 bytes 的空間。
而這固定的 64 bytes 空間會被分為四組,每組分別代表一個磁碟分割,依照下列的格式紀錄這個磁碟分割的各種基本特性:
位置 | 長度 | 內容 |
00H | 1 bytes | Boot indicator bit flag 標示是否為啟動磁碟) |
01H | 1 bytes | 起點磁頭 |
02H – 03H | 2 bytes | 起點磁區、磁柱 |
04H | 1 bytes | 檔案系統類型 |
05H | 1 bytes | 終點磁頭 |
06H – 07H | 2 bytes | 終點磁區、磁柱 |
08H – 11H | 4 bytes | 起點磁區的 LBA 定址 |
12H – 15H | 4 bytes | 總磁區數 |
從上面的格式我們可以知道 MBR 磁碟分割表主要紀錄的事項包含了該分割是否為啟動磁碟、該分割在磁性儲存媒介上的起點與終點、該分割所使用的檔案系統類型與其實際大小這四項資料,且分割的起點與終點是採用前面提過的 CHS 定址方式標示的。
MBR 磁碟分割表的限制
在了解 MBR 磁碟分割表的格式之後我們可以很明顯發現 MBR 磁碟分割表的規範非常固定且使用了過時的 CHS 定址編碼格式,隨著時代發展這些特性就導致了 MBR 磁碟分割表開始有不敷使用的情形出現,例如固定只能存放四組磁碟分割紀錄導致一個磁碟上最多只能有四個分割區、使用 CHS 定址限制了所能取用的磁碟空間範圍等,而在 GPT 被發展出來之前,人們也發展了多種方式來暫時繞過這些限制,例如延伸分割區、改採相對 LBA 位置定址為主要定址方式等。