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