硬盤物理結(jié)構(gòu)
先看下硬盤物理結(jié)構(gòu)
硬盤物理上主要是盤片、機械手臂、磁頭、和主軸等組成。在盤片邏輯劃分上又分為磁道、扇區(qū),例如下圖:
磁道:
當(dāng)硬盤盤片旋轉(zhuǎn)時,磁頭若保持在一個位置上,則磁頭會在盤片表面劃出一個圓形軌跡,這些圓形軌跡就叫做磁道。以盤片中心為圓心,由此可以劃分出很多磁道來, 這些磁道用肉眼是根本看不到的,因為它們僅 是盤面上以特殊方式磁化了的一些磁化區(qū),硬盤上的信息便是沿著這樣的軌道存放的,盤片上的磁道 由外向內(nèi) 依次從 “0” 開始進(jìn)行編號。
柱面:
由于硬盤可以由很多盤片組成,不同盤片的相同磁道就組成了柱面 (cylinder) ,如圖 1 所示。
磁頭:
假設(shè)有 N 個盤片組成的硬盤,那么有 2N 個盤面 ( 一個盤片有 2 面 ) ,那么磁頭也就有 2N 個,即每個盤面有一個磁頭。
扇區(qū) :
早期的硬盤盤片的盤面以圓心開始向外放射狀將磁道分割成等分的弧段,這些弧段便是硬盤的扇區(qū) ( 如圖 2) 。每個扇區(qū)一般規(guī)定大小為 512byte ,這里大家應(yīng)該比較疑惑,外圈周長很明顯比內(nèi)圈要長,怎么可能每個扇區(qū)都是 512byte? 其實答案早期硬盤外圈存儲比內(nèi)圈存儲密度低一些,所以外圈很長但是仍然只能存儲 512byte ,因此如果我們知道了柱面數(shù) ( 磁道數(shù) ) Cylinders 、磁頭數(shù) Heads 、扇區(qū)數(shù) Sectors ,基本上硬盤的容量我們能夠計算出來 硬盤總?cè)萘? = Cylinders * Heads * Sectors * 512byte 。 但是由于早期硬盤外圈密度低,導(dǎo)致盤片利用率不高,現(xiàn)在的硬盤盤片則采用內(nèi)外存儲密度一致的方式,每個磁道都劃分成以 512byte 大小的弧段,這樣也造成了內(nèi)外磁道上扇區(qū)數(shù)量會不一樣,外圈上的扇區(qū)數(shù)要多于內(nèi)圈扇區(qū)數(shù)。
硬盤尋址方式
硬盤存取、讀取數(shù)據(jù),首先要做的就是尋址,即定位到數(shù)據(jù)所在的物理地址,在硬盤上就要找到對應(yīng)的柱面、磁頭以及對應(yīng)的扇區(qū),那么怎么尋址呢? 有兩種方式: CHS 和 LBA
CHS 模式:
CHS ( Cylinder/Head/Sector )尋址模式也稱為 3D 模式,是硬盤最早采用的尋址模式,它是在硬盤容量較小的前提下產(chǎn)生的。
硬盤的 C/H/S 3D 參數(shù)既可以計算出硬盤的容量,也可以確定數(shù)據(jù)所在的具體位置。這是因為扇區(qū)的三維物理地址與硬盤上的物理扇區(qū)一一對應(yīng),即三維物理地址可完全確定硬盤上的物理扇區(qū)。三維物理地址通常以 C/H/S 的次序來書寫,如 C/H/S 為 0/1/1 ,則第一個數(shù)字 0 指 0 柱面,第二個數(shù)字 1 指 1 磁頭(盤面),第三個數(shù)字 1 指 1 扇區(qū),表示該數(shù)據(jù)位于硬盤 1 盤面上的 0 磁道 1 扇區(qū)。現(xiàn)在定位已完成,硬盤內(nèi)部的參數(shù)和主板 BIOS 之間進(jìn)行協(xié)議,正確發(fā)出尋址信號,從而正確定位數(shù)據(jù)位置。
早期硬盤一個磁道上分 63 個扇區(qū),物理磁頭最多 16 個( 8 個盤片,盤片多了硬盤那就真要加厚了)。采用 8 位尋址方式, 8 位二進(jìn)制位的最大值是 256 ( 0-255 ),可以表示磁頭數(shù),而扇區(qū)只有 63 個( 1-63 ),只需要其中 6 個二進(jìn)制位即可表示,剩下 2 位拿去表示柱面,柱面數(shù)用 10(8+2) 位來表達(dá),達(dá)到 1024 個柱面( 0-1023 ),因此總扇區(qū)數(shù)( 1024×16×63 )。前面說一個扇區(qū)大小為 512byte ,這也就是說,如果以 C/H/S 尋址模式尋址,則 IDE 硬盤的最大容量只能為 1024×16×63×512B= 500MB 左右。
可以思考下,在 8 位尋址模式下,其實可以尋址的硬盤最大容量為 1024×256×63×512B =8G, 那為啥 CHS 模式硬盤只支持到 500MB 呢?原因很簡單,我們的硬盤盤片不可能讓 128 片盤片重疊起來吧,那會是多厚??如果采用 28 位尋址方式,那么可以尋址 137G ,盤片也不可能一直堆疊下去。
LBA(Logical Block Addressing)
經(jīng)常去買硬盤的人都知道,目前硬盤經(jīng)常都說單碟、雙碟,其實意思就是說硬盤盤片只有 1 個或者 2 個,而且都只是用一面,單碟一個磁頭而已,但是硬盤容量確是幾百 G ,而且硬盤柱面往往都大于 1024 個柱面, CHS 是無法尋址利用完這些硬盤容量的。
另外由于老硬盤的扇區(qū)劃分方式對硬盤利用率不高,因此出現(xiàn)了現(xiàn)在的等密度盤,外圈的扇區(qū)數(shù)要比內(nèi)圈多,原來的 3D 尋址方式也就不能適應(yīng)這種方式,因此也就出現(xiàn)了新的尋址方式 LBA ,這是以扇區(qū)為單位進(jìn)行的線性尋址方式,即從最外圈柱面 0 開始,依次將扇區(qū)號編為 0 、 1…. 等等,舉個例子,假設(shè)硬盤有 1024 個柱面,由于是等密度硬盤,柱面 0( 最外圈 ) 假設(shè)有 128 個扇區(qū),依次編號為 0-127 ,柱面 1 有 120 個扇區(qū),則依次編號為 127-246 , ….. 依次最內(nèi)圈柱面 127 只有扇區(qū) 64 個,則編號到最后。因此要定位到硬盤某個位置,只需要給出 LBA 數(shù)即可,這個就是邏輯數(shù)。
在 LBA 模式下,為了保留原來 CHS 時的概念,也可以設(shè)置柱面、磁頭、扇區(qū)等參數(shù),但是他們并不是實際硬盤的物理參數(shù),只是為了計算方便而出的一個概念, 1023 之前的柱面號都一一物理對應(yīng),而 1023 以后的所有柱面號都記錄成 1023 磁頭最大數(shù)可以設(shè)置為 255 ,而扇區(qū)數(shù)一般是每磁道 63 個, 硬盤 控制器會把由柱面、磁頭、扇區(qū)等參數(shù)確定的地址轉(zhuǎn)換為 LBA 數(shù)。這里我們再此明確兩個概念:
物理扇區(qū)號:
一般我們稱 CHS 模式下的扇區(qū)號為物理扇區(qū)號,扇區(qū)編號開始位置是 1
邏輯扇區(qū)號:
LBA 下的編號,扇區(qū)編號是從 0 開始。
CHS 模式轉(zhuǎn)換到邏輯扇區(qū)號 LBA
計算公式
LBA( 邏輯扇區(qū)號 )= 磁頭數(shù) × 每磁道扇區(qū)數(shù) × 當(dāng)前所在柱面號 + 每磁道扇區(qū)數(shù) × 當(dāng)前所在磁頭號 + 當(dāng)前所在扇區(qū)號 – 1
例如: CHS=0/0/1 ,則根據(jù)公式 LBA=255 × 63 × 0 + 63 × 0 + 1 – 1= 0
也就是說物理 0 柱面 0 磁頭 1 扇區(qū),是邏輯 0 扇區(qū)。
硬盤分區(qū)
我們知道,一般使用硬盤,我們首先會對硬盤進(jìn)行分區(qū),然后對分區(qū)使用某個文件系統(tǒng)格式 (NTFS 、 FAT 、 ext2/ext3) 進(jìn)行分區(qū)格式化,然后才能正常使用。那么分區(qū)是怎么回事呢?我們常見的 windows 中說到的 c 、 d 、 e 盤是怎么劃分出來的呢?其實,在裝 windows 系統(tǒng)過程中,一般我們只需要填寫每個分區(qū)的大小,看不出來分區(qū)過程的實際工作情況,我們可以從 linux 系統(tǒng)分區(qū)過程反而能反應(yīng)底層實際分區(qū)情況。
柱面是分區(qū)的最小單位,即分區(qū)是以某個某個柱面號開始到某個柱面號結(jié)束的。
如圖,柱面
1~200
我們可以分為一個區(qū),柱面
201~500
再劃分為一個區(qū),
501~1000
再劃分為一個區(qū),以此類推。大家可以看到,柱面
0
沒有在任何分區(qū)里面,為何?這里說說,前面說到硬盤從外圈
(
柱面
0)
到內(nèi)圈扇區(qū)是依次編號,看似各個扇區(qū)沒有什么區(qū)別,但是這里硬盤的柱面
0
的第一個扇區(qū)
(
邏輯扇區(qū)
0
,
CHS
表示應(yīng)該是
0/0/1)
卻是最重要的,因為硬盤的第一個扇區(qū)記錄了整個硬盤的重要信息,第一個扇區(qū)
(512
個字節(jié)
)
主要記錄了兩部分:
① MBR(Master Boot Record) :主引導(dǎo)程序就放在這里,主引導(dǎo)程序是引導(dǎo)操作系統(tǒng)的一個程序,但是這部分只占 446 字節(jié)。
② DPT(Disk Partition table) :硬盤分區(qū)表也在這里,分區(qū)表就是用來記錄硬盤的分區(qū)情況的,例如 c 盤是 1~200 柱面, d 盤是 201~500 柱面,分區(qū)表總共只占 64 字節(jié),可以看出,分區(qū)其實很簡單,就是在這個表里面修改一下記錄就重新分區(qū)了,但是由于只有 64 字節(jié),而一條記錄就要占用 16 字節(jié),這個分區(qū)表最多只能記錄 4 個分區(qū)信息,為了繼續(xù)分出更多分區(qū)來,引入了擴展分區(qū)的概念,也就是說,在這 4 個分區(qū)中,可以使用其中一條記錄來記錄擴展分區(qū)的信息,然后在擴展分區(qū)中再繼續(xù)劃分邏輯分區(qū),而邏輯分區(qū)的分區(qū)記錄則記錄在擴展分區(qū)的第一個扇區(qū)中,如此則可以像鏈表一樣劃分出很多分區(qū)來。但是請注意,一個分區(qū)表中可以有 1~4 條主分區(qū),但是最多只能有 1 個擴展分區(qū)。
舉例,主分區(qū)可以是 P1:1~200 ,擴展分區(qū) P2: 2~1400 ,擴展分區(qū)開始的第一個扇區(qū)可以用來記錄擴展分區(qū)中劃分出來的邏輯分區(qū)。
分區(qū)表鏈
分區(qū)表之間是如何關(guān)聯(lián)的,詳細(xì)講一下,分區(qū)表是一個單向鏈表,第一個分區(qū)表,也就是位于硬盤第一個扇區(qū)中的 DPT ,可以有一項記錄擴展分區(qū)的起始位置柱面,類似于指針的概念,指向擴展分區(qū) ( 圖 3) ,根據(jù)這項記錄我們可以找到擴展分區(qū)的某柱面 0 磁頭 1 扇區(qū) (CHS) ,而這個扇區(qū)中又存放了第二個分區(qū)表,第二個分區(qū)表第一項記錄一般表述了當(dāng)前所在的邏輯分區(qū)的起始 / 終止柱面,第二項記錄表述了下一個邏輯分區(qū)所在的 0 磁頭 1 扇區(qū) (CHS), 第三、第四項記錄不存任何信息 ( 圖 4) 。
請看下圖,主引導(dǎo)記錄 / 分區(qū)表所在的是硬盤第一個分區(qū),基本分區(qū) 1 、基本分 2 、基本分區(qū) 3 都是主分區(qū)、擴展分區(qū)內(nèi)有 2 個邏輯分區(qū),每個邏輯分區(qū)的第一個扇區(qū)都是分區(qū)表,至于引導(dǎo)扇區(qū) (DBR) ,在系統(tǒng)啟動一節(jié)中會提及。
系統(tǒng)啟動:
之前提到 MBR 中安裝的引導(dǎo)加載程序,他的作用是什么?
① 提供開機菜單選項:可以供用戶選擇啟動哪個操作系統(tǒng),這是多重引導(dǎo)功能。
② 加載操作系統(tǒng)內(nèi)核:每個操作系統(tǒng)都有自己的內(nèi)核,需要引導(dǎo)程序來加載
③ 轉(zhuǎn)交給其他引導(dǎo)程序:可以將工作移交給其他引導(dǎo)程序來進(jìn)行上述操作。
其實引導(dǎo)加載程序除了可以安裝在 MBR 中,還可以直接安裝在每個分區(qū)的引導(dǎo)扇區(qū) (DBR) 中,注意下,每個分區(qū) ( 主分區(qū)、邏輯分區(qū) ) 都有一個自己的啟動扇區(qū),專門用來安裝引導(dǎo)加載程序,如上圖標(biāo) 3 結(jié)構(gòu)圖。
系統(tǒng)啟動過程:
① 首先 ,BIOS 啟動后,讀取硬盤第一個扇區(qū) MBR 中的引導(dǎo)加載程序 ( 可能是 windows 或者 linux 的 grub)
② MBR 中的引導(dǎo)程序提供開機菜單,你可以選擇 1) 直接加載 windows 內(nèi)核 2) 將工作轉(zhuǎn)交給 windows 分區(qū)內(nèi)的引導(dǎo)扇區(qū)中的加載程序,讓他自己去加載內(nèi)核 3) 轉(zhuǎn)交給 linux 分區(qū)內(nèi)引導(dǎo)扇區(qū),讓他去加載 linux.
③ 根據(jù)用戶選擇的選項和引導(dǎo)加載程序中記錄的分區(qū),到分區(qū)表找對應(yīng)的分區(qū)柱面號等分區(qū)信息,啟動內(nèi)核或者分區(qū)加載程序。
Window 安裝時默認(rèn)會自動將 MBR 和 windows 所在分區(qū)的引導(dǎo)扇區(qū)都裝上引導(dǎo)程序,而不會提供任何選項給用戶選擇,因此如果之前裝過其他操作系統(tǒng),然后再另外裝一個 windows 時,會把公用的 MBR 覆蓋掉,如此,原來的操作系統(tǒng)就無法啟動了。如果先裝 windows ,然后裝 linux , linux 會覆蓋 MBR ,然后讓用戶選擇是否將 windows 等其他操作系統(tǒng)的啟動項添加進(jìn)來,如果你選擇了添加進(jìn)來,那么你在開機時就會有兩個選項讓用戶進(jìn)行選擇了。
后記
l 這里討論的全部是硬盤相關(guān)的東西,光盤不在此列,而且光盤的磁道并不是從外圈到內(nèi)圈編號,而是從內(nèi)圈開始編號,這點注意。
l 硬盤第一個扇區(qū)是由 MBR 和分區(qū)表占據(jù),因此 0 柱面 0 磁頭上剩下的 62 個扇區(qū)一般會空出來保留(這部分保留稱為隱藏扇區(qū),因為操作系統(tǒng)讀取不到這部分扇區(qū),這部分扇區(qū)是提供給 BIOS 讀取的),而系統(tǒng)分區(qū)則從 0 柱面 1 磁頭 1 扇區(qū)開始,折算成 LBA=255 × 63 × 0 + 63 × 1 + 1 – 1= 63 ,即從 LBA 63 號扇區(qū)開始分區(qū)。不過查閱有的資料提及到另外一種說法,那就是有的硬盤可能 0 柱面全部空下來,如果真是這樣,那浪費可就真的大了。
l 對于擴展分區(qū)的分區(qū)表我們知道也是由擴展分區(qū)的第一個扇區(qū)開始寫,而且是寫到每個邏輯驅(qū)動器的第一個扇區(qū),同樣,擴展分區(qū)內(nèi)的第一個扇區(qū)所在的磁道剩余的扇區(qū)也會全部空余出來,這些保留的扇區(qū)操作系統(tǒng)也是無法讀取的,注意在擴展分區(qū)的第一個扇區(qū)里面是沒有引導(dǎo)加載記錄的。引導(dǎo)加載記錄都是放在隱藏扇區(qū)后面的。可以看圖 3 ,圖 4
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
