1. 硬盤物理結(jié)構(gòu)
現(xiàn)代硬盤(非固態(tài)硬盤SSD)通常由一個(gè)或多個(gè)圓形盤片組成,每個(gè)盤片都是兩面存儲(chǔ)的(還記得以前的軟盤有雙面雙密之說(shuō)),通過機(jī)械臂上的磁頭進(jìn)行數(shù)據(jù)讀寫操作。一個(gè)硬盤的參數(shù)通常稱之為 3D 參數(shù) (Disk Geometry),即柱面數(shù)(Cylinder)、磁頭數(shù)(Head)和扇區(qū)數(shù)(Sector)。
磁頭: 磁頭固定在可移動(dòng)的機(jī)械臂上,用于讀寫數(shù)據(jù)。現(xiàn)代硬盤都是雙面可讀寫,因此磁頭數(shù)量等于盤片數(shù)的 2 倍。磁頭數(shù)最大值為 255 (8 個(gè)二進(jìn)制位)。
磁道: 每個(gè)盤面都有 n 個(gè)同心圓組成,每個(gè)同心圓稱之為一個(gè)磁道。由外向內(nèi)分為 0 磁道到 n 磁道。
柱面: n 個(gè)盤面的相同磁道 (位置相同) 共同組成一個(gè)柱面。柱面數(shù)最大為 1023 (10 個(gè)二進(jìn)制位)。
扇區(qū): 從磁盤中心向外畫直線,可以將磁道劃分為若干個(gè)弧段。每個(gè)磁道上一個(gè)弧段被稱之為一個(gè)扇區(qū)。扇區(qū)是硬盤的最小組成單元,通常是 512 字節(jié)。磁道上的扇區(qū)數(shù)最大為 63 (6 個(gè)二進(jìn)制位)。
在老式硬盤中,盡管磁道周長(zhǎng)不同,但每個(gè)磁道上的扇區(qū)數(shù)是相等的,越往圓心扇區(qū)弧段越短,但其存儲(chǔ)密度越高。不過這種方式顯然比較浪費(fèi)空間,因此現(xiàn)代硬盤則改為等密度結(jié)構(gòu),這意味著外圍磁道上的扇區(qū)數(shù)量要大于內(nèi)圈的磁道,尋址方式也改為以扇區(qū)為單位的線性尋址。為了兼容老式的 3D 尋址方式,現(xiàn)代硬盤控制器中都有一個(gè)地址翻譯器將 3D 尋址參數(shù)翻譯為線性參數(shù)。
硬盤的存儲(chǔ)容量公式:
存儲(chǔ)容量 = 磁頭數(shù) × 磁道(柱面)數(shù) × 每道扇區(qū)數(shù) × 每扇區(qū)字節(jié)數(shù)
3D 尋址參數(shù):
×× 磁道(柱面),×× 磁頭,×× 扇區(qū)
我們注意到 Linux 的分區(qū)是按柱面來(lái)劃分的。
yuhen@yuhen-desktop:~$ sudo fdisk -l /dev/sda Disk /dev/sda: 8589 MB, 8589934592 bytes Device Boot Start End Blocks Id System |
2. 引導(dǎo)區(qū)信息
硬盤的第一個(gè)扇區(qū)被稱之為 Boot Sector。由 MBR (MasterBoot Record)、DPT (Disk Partition Table) 和 Boot Record ID 三部分組成。
MBR 又稱作主引導(dǎo)記錄,占用 Boot Sector 的前 446 個(gè)字節(jié)(0 ~ 0x1BD)。存放系統(tǒng)主引導(dǎo)程序,負(fù)責(zé)從活動(dòng)分區(qū)中裝載并運(yùn)行系統(tǒng)引導(dǎo)程序。
DPT 即主分區(qū)表,占用 64 個(gè)字節(jié) (0x1BE ~ 0x1FD),記錄了磁盤的基本分區(qū)信息。主分區(qū)表分為四個(gè)分區(qū)項(xiàng),每項(xiàng) 16 字節(jié),分別記錄了每個(gè)主分區(qū)的信息 (因此最多可以有 4 個(gè)主分區(qū))。
Boot Record ID 即引導(dǎo)區(qū)標(biāo)記,占用兩個(gè)字節(jié) (0x1FE ~ 0x1FF)。對(duì)于合法引導(dǎo)區(qū),它等于 0xAA55,這是判別引導(dǎo)區(qū)是否合法的標(biāo)志。