因為硬體、軟體設計上的缺陷,大容量硬碟曾在歷史上多次造成麻煩,最近一次硬碟容量問題出現在2.2tb身上,因此在開發windows 8
的時候,微軟就充分考慮了大容量硬碟的完整支援問題,以及新的4kb扇區格式。
1, 8g限制-硬碟定址的限制
硬碟最初使用的定址方法是柱面/磁頭/扇區chs(cylinder/head/sector),也稱為3d模式,是硬碟最早採用的定址模式。通過分別指定柱面、磁頭、扇區來確定某個資料塊的確切位置,它是在硬碟容量較小的前提下產生的。硬碟的c/h/s 3d引數既可以計算出硬碟的容量,也可以確定資料所在的具體位置。這是因為扇區的三維實體地址與硬碟上的物理扇區一一對應,即三維實體地址可完全確定硬碟上的物理扇區。三維實體地址通常以c/h/s的次序來書寫,如c/h/s為0/1/1,則第乙個數字0指0柱面,第二個數字1指1磁頭(盤面),第三個數字1指1扇區,表示該資料位於硬碟1盤面上的0磁軌1扇區。現在定位已完成,硬碟內部的引數和主機板bios之間進行協議,正確發出定址訊號,從而正確定位資料位置。
早期硬碟乙個磁軌上分
63個扇區,物理磁頭最多
16個(
8個碟片,碟片多了硬碟那就真要加厚了)。採用
8位定址方式,
8位二進位制位的最大值是
256(
0-255),可以表示磁頭數,而扇區只有
63個(
1-63),只需要其中
6個二進位制位即可表示,剩下
2位拿去表示柱面,柱面數用
10(8+2)位來表達,達到
1024個柱面(
0-1023),因此總扇區數(
1024×16×63)。前面說乙個扇區大小為
512byte,這也就是說,如果以
c/h/s定址模式定址,則
ide硬碟的最大容量只能為
1024×16×63×512b= 500mb左右。
可以思考下,在8位定址模式下,其實可以定址的硬碟最大容量為1024×256×63×512b =8g,那為啥chs模式硬碟只支援到500mb呢?原因很簡單,我們的硬碟碟片不可能讓128片碟片重疊起來吧,那會是多厚?
2, 137g限制-主機板的限制
經常去買硬碟的人都知道,目前硬碟經常都說單碟、雙碟,其實意思就是說硬碟碟片只有
1個或者
2個,而且都只是用一面,單碟乙個磁頭而已,但是硬碟容量確是幾百
g,而且硬碟柱面往往都大於
1024個柱面,
chs是無法定址利用完這些硬碟容量的。
另外由於老硬碟的扇區劃分方式對硬碟利用率不高,因此出現了現在的等密度盤,外圈的扇區數要比內圈多,原來的
3d定址方式也就不能適應這種方式,因此也就出現了新的定址方式
lba,這是以扇區為單位進行的線性定址方式,即從最外圈柱面
0開始,依次將扇區號編為
0、1….等等,舉個例子,假設硬碟有
1024個柱面,由於是等密度硬碟,柱面
0(最外圈
)假設有
128個扇區,依次編號為
0-127,柱面
1有120個扇區,則依次編號為
127-246,
…..依次最內圈柱面
127只有扇區
64個,則編號到最後。因此要定位到硬碟某個位置,只需要給出
lba數即可,這個就是邏輯數。 在
lba模式下,為了保留原來
chs時的概念,也可以設定柱面、磁頭、扇區等引數,但是他們並不是實際硬碟的物理引數,只是為了計算方便而出的乙個概念,
1023
之前的柱面號都一一物理對應,而
1023
以後的所有柱面號都記錄成
1023
磁頭最大數可以設定為
255,而扇區數一般是每磁軌
63個,
硬碟控制器會把由柱面、磁頭、扇區等引數確定的位址轉換為
lba數。
lba定址方式的出現解決了chs定址對硬碟大小的限制。利用 lba 方案,每個扇區都擁有乙個預定義的大小(直到最近,每個扇區的大小一直為 512 位元組),而且計算機將以單調遞增的順序對各扇區進行定址,即從「扇區 0」開始,一直到「扇區 n」,其中:
n =(以位元組為單位的總容量)/(以位元組為單位的扇區大小)儘管 lba 定址方式在理論上可實現對無窮大容量的訪問,但在實踐中,「n」的最大值會受到相關「磁碟分割槽方案」的限制。
但是新的問題又出現了,早些時候出產的主機板大多使用28bit lba硬碟定址方式,而lba方式是指以邏輯塊方式使用硬碟的,其中每個邏輯塊的大小是512位元組。於是在28位lba硬碟定址方式下,邏輯塊數目的理論 極限是2的28次方即268435456塊,每塊乘以512位元組,則硬碟的理論容量極限就是:268435456(塊)*512(字 節)=137,438,953,472位元組=137gb。當然,這也是由於以前人們使用的硬碟的大小通常都較小,主機板的發展腳步要落後於硬碟的發展,後來 到了硬碟已經超過137gb大小的時候,主機板生產規則還停留在採用28bit lba硬碟定址的時代,於是137gb容量限制的就來了!但這種方法在137gb以上容量硬碟面前就失效了。
3, 2.2t的限制-磁碟分割槽機制
超過了137gb的容量以後,需要48位定址的支援來突破137gb的容量。
2001 年底,按照big drives規範(世界t13組織的48 bit定址解決方案),主板晶元組南橋必須支援137g以上的硬碟容量,很多晶元組廠商都推出了符合big drives規範的南橋晶元。48位定址模式可以定址的扇區數為2的48次方即281,474,976,710,655,這樣可支援的硬碟容量就達到了 281,474,976,710,655×512=144,115,188,075,855,872位元組,大致相當於 144pb(1pb=1000,000,000,000,000位元組),對普通使用者接近於無窮大,在一定時間內應該是足夠使用了
lba定址方法理論上支援超大硬碟容量,但實際上扇區的數量還受制於磁碟分割槽機制。
磁碟分割槽的概念可以追
溯到二十世紀八十年代初,是系統管理員們為了方便使用不同檔案系統儲存資料而發明的。主引導記錄(mbr)分割槽表支援最多32-bit資訊,換算成位元組數就是2的32次方,也就是大約2.2tb。
你也許會蔑視他們的「短視」,但在三十年前的人們看來,2.2tb幾乎就是個遙不可及的天文數字,要知道當時最大的民用硬碟也不過5mb,而**超過1500美元。
其實剛剛進入九十年代的時候,人們就已經意識到了2.2tb容量限制問題,為此多家公司聯合制定了一種彈性的分割槽機制,這就是guid分割槽表,簡稱 gpt,並將其做為uefi(統一可擴充套件韌體介面)規範的一部分。gpt支援最多64-bit資訊,理論最大容量為9.4zb,相當於 9400000000tb。又是乙個「天文數字」,不過說不定哪天就會成為第二個「2.2tb」。
4, 4k大小的扇區
uefi從設計之初就考慮了對guid分割槽表合超大容量硬碟的支援,所有硬碟都內建了某種形式的錯誤糾正資訊和邏輯,以便在讀取磁碟碟片的時候自動處理訊雜比(snr)。隨著硬碟容量的增大,資料儲存位越靠越 近,snr隨之降低,硬碟的每個扇區就都不得不儲存更多的ecc(錯誤校驗碼),以彌補讀取錯誤,512位元組的狹窄扇區空間慢慢就不夠用了。
於是,硬碟廠商將扇區容量擴大到了4kb,稱之為「高階格式」(af),並使用了新的ecc編碼機制,可以更高效地糾正錯誤,所佔儲存空間也更少,等同於擴大了可用容量。目前,西數、希捷等硬碟廠商都逐漸普及了4kb扇區格式。
扇區容量增大到4kb,資料的更新也必須按照這個尺寸來,所以為了實現更小資料塊的邏輯定址,硬碟必須做一些額外的工作。
如上圖,乙個4kb物理扇區仍然可以劃分成512位元組邏輯扇區進行邏輯定址。為了寫入單獨乙個512位元組的邏輯扇區,硬碟不能簡單地把磁頭挪到 4kb物理扇區上就寫入,而是需要先把整個物理扇區中的資料讀取到快取中,在那裡修改相應的512位元組邏輯扇區,然後再整體寫回去,覆蓋舊扇區。這叫做 「讀取-修改-寫入」(read-modify-write)。
有這種中間轉換層的硬碟叫做「4k with 512-byte emulation」,縮寫為512e,而沒有的叫做「4k native」,即乙個是模擬的,乙個是原生的。
讀取-修改-寫入可能會在面臨大容量非一致性資料的時候影響實際效能,因為windows必須確保應用程式能夠提取整個4kb物理扇區,應用程式則需要確保i/o的一致性以報告物理扇區尺寸。
附錄:mbr介紹
硬碟中磁頭定址方式
看了好多中介紹硬碟工作原理的文章,一直有幾個問題困擾著我 1 硬碟工作時轉動,非工作時不轉動 2 磁頭定址的軌跡是怎麼樣的 下邊就這兩個問題來說明下 1 待機是將當前處於執行狀態的資料儲存在記憶體中,機器只對記憶體供電,而硬碟 螢幕和cpu等部件則停止供電。由於資料儲存在速度快的記憶體中,因此進入等...
硬碟的定址方式
什麼是chs定址 很久以前,硬碟的容量還非常小的時候,人們採用與軟盤類似的結構生產硬碟。也就是硬碟碟片的每一條磁軌都具有相同的扇區數。由此產生了所謂的csh 3d引數 disk geometry 即磁頭數 heads 柱面數 cylinders 扇區數 sectors 以及相應chs定址方式。chs...
在linux中新增新硬碟
準備在vmware中裝oracle,突然發現硬碟空間不夠用,只好新加乙個虛擬scsi硬碟.fdisk dev sdb 進入fdisk命令模式,按m檢視幫助得知,n建立新區 mand m for help n輸入p建立主分割槽 一共可建4個,這裡我只有建乙個就ok mand action e exte...