硬盤分區(qū)表知識——詳解硬盤MBR
分區(qū)從實(shí)質(zhì)上說就是對硬盤的一種格式化。當(dāng)我們創(chuàng)建分區(qū)時,就已經(jīng)設(shè)置好了硬盤的各項物理參數(shù),指定了硬盤主引導(dǎo)記錄(即Master Boot Record,一般簡稱為MBR)和引導(dǎo)記錄備份的存放位置。而對于文件系統(tǒng)以及其他操作系統(tǒng)管理硬盤所需要的信息則是通過以后的高級格式化,即 Format命令來實(shí)現(xiàn)。面、磁道和扇區(qū)硬盤分區(qū)后,將會被劃分為面(Side)、磁道(Track)和扇區(qū)(Sector)。需要注意的是,這些只是個 虛擬的概念,并不是真正在硬盤上劃軌道。
先從面說起,硬盤一般是由一片或幾片圓形薄膜疊加而成。我們所說,每個圓形薄膜都有兩個“面”,這兩個面都是用來存儲數(shù)據(jù)的。按照面的多少,依次稱為0 面、1面、2面……由于每個面都專有一個讀寫磁頭,也常用0頭(head)、1頭……稱之。按照硬盤容量和規(guī)格的不同,硬盤面數(shù)(或頭數(shù))也不一定相同, 少的只有2面,多的可達(dá)數(shù)十面。各面上磁道號相同的磁道合起來,稱為一個柱面(Cylinder)。
上面我們提到了磁道的概念。那么究竟何為磁道呢?由于磁盤是旋轉(zhuǎn)的,則連續(xù)寫入的數(shù)據(jù)是排列在一個圓周上的。我們稱這樣的圓周為一個磁道。如果讀寫磁頭沿
著圓形薄膜的半徑方向移動一段距離,以后寫入的數(shù)據(jù)又排列在另外一個磁道上。根據(jù)硬盤規(guī)格的不同,磁道數(shù)可以從幾百到數(shù)千不等;一個磁道上可以容納數(shù)KB
的數(shù)據(jù),而主機(jī)讀寫時往往并不需要一次讀寫那么多,于是,磁道又被劃分成若干段,每段稱為一個扇區(qū)。一個扇區(qū)一般存放512字節(jié)的數(shù)據(jù)。扇區(qū)也需要編號,
同一磁道中的扇區(qū),分別稱為1扇區(qū),2扇區(qū)……
計算機(jī)對硬盤的讀寫,處于效率的考慮,是以扇區(qū)為基本單位的。即使計算機(jī)只需要硬盤上存儲的某個字節(jié),也必須一次把這個字節(jié)所在的扇區(qū)中的512字節(jié)全部 讀入內(nèi)存,再使用所需的那個字節(jié)。不過,在上文中我們也提到,硬盤上面、磁道、扇區(qū)的劃分表面上是看不到任何痕跡的,雖然磁頭可以根據(jù)某個磁道的應(yīng)有半徑 來對準(zhǔn)這個磁道,但怎樣才能在首尾相連的一圈扇區(qū)中找出所需要的某一扇區(qū)呢?原來,每個扇區(qū)并不僅僅由512個字節(jié)組成的,在這些由計算機(jī)存取的數(shù)據(jù)的 前、后兩端,都另有一些特定的數(shù)據(jù),這些數(shù)據(jù)構(gòu)成了扇區(qū)的界限標(biāo)志,標(biāo)志中含有扇區(qū)的編號和其他信息。計算機(jī)就憑借著這些標(biāo)志來識別扇區(qū)。硬盤的數(shù)據(jù)結(jié)構(gòu) 在上文中,我們談了數(shù)據(jù)在硬盤中的存儲的一般原理。為了能更深入地了解硬盤,我們還必須對硬盤的數(shù)據(jù)結(jié)構(gòu)有個簡單的了解。硬盤上的數(shù)據(jù)按照其不同的特點(diǎn)和 作用大致可分為5部分:MBR區(qū)、DBR區(qū)、FAT區(qū)、DIR區(qū)和DATA區(qū)。
我們來分別介紹一下:
1、MBR區(qū)
MBR(Main Boot Record 主引導(dǎo)記錄區(qū))位于整個硬盤的0磁道0柱面1扇區(qū)。不過,在總共512字節(jié)的主引導(dǎo)扇區(qū)中,MBR只占用了其中的446個字節(jié),另外的64個字節(jié)交給了 DPT(Disk Partition Table硬盤分區(qū)表),最后兩個字節(jié)“55,AA”是分區(qū)的結(jié)束標(biāo)志。這個整體構(gòu)成了硬盤的主引導(dǎo)扇區(qū)。
主引導(dǎo)記錄中包含了硬盤的一系列參數(shù)和一段引導(dǎo)程序。其中的硬盤引導(dǎo)程序的主要作用是檢查分區(qū)表是否正確并且在系統(tǒng)硬件完成自檢以后引導(dǎo)具有激活標(biāo)志的分 區(qū)上的操作系統(tǒng),并將控制權(quán)交給啟動程序。MBR是由分區(qū)程序(如Fdisk.exe)所產(chǎn)生的,它不依賴任何操作系統(tǒng),而且硬盤引導(dǎo)程序也是可以改變 的,從而實(shí)現(xiàn)多系統(tǒng)共存。
下面,我們以一個實(shí)例讓大家更直觀地來了解主引導(dǎo)記錄:
例:80 01 01 00 0B FE BF FC
3F 00 00 00 7E 86 BB 00 在這里我們可以看到,最前面的“80”是一個分區(qū)的激活標(biāo)志,表示系統(tǒng)可引導(dǎo);“01
01
00”表示分區(qū)開始的磁頭號為01,開始的扇區(qū)號為01,開始的柱面號為00;“0B”表示分區(qū)的系統(tǒng)類型是FAT32,其他比較常用的有
04(FAT16)、07(NTFS);“FE BF FC”表示分區(qū)結(jié)束的磁頭號為254,分區(qū)結(jié)束的扇區(qū)號為63、分區(qū)結(jié)束的柱面號為764;“3F
00 00 00”表示首扇區(qū)的相對扇區(qū)號為63;“7E 86 BB 00”表示總扇區(qū)數(shù)為12289622。
2、DBR區(qū)
DBR(Dos Boot
Record)是操作系統(tǒng)引導(dǎo)記錄區(qū)的意思。它通常位于硬盤的0磁道1柱面1扇區(qū),是操作系統(tǒng)可以直接訪問的第一個扇區(qū),它包括一個引導(dǎo)程序和一個被稱為
BPB(Bios Parameter
Block)的本分區(qū)參數(shù)記錄表。引導(dǎo)程序的主要任務(wù)是當(dāng)MBR將系統(tǒng)控制權(quán)交給它時,判斷本分區(qū)跟目錄前兩個文件是不是操作系統(tǒng)的引導(dǎo)文件(以DOS為
例,即是Io.sys和Msdos.sys)。如果確定存在,就把它讀入內(nèi)存,并把控制權(quán)
交給該文件。BPB參數(shù)塊記錄著本分區(qū)的起始扇區(qū)、結(jié)束扇區(qū)、文件存儲格式、硬盤介質(zhì)描述符、根目錄大小、FAT個數(shù),分配單元的大小等重要參數(shù)。DBR
是由高級格式化程序(即Format.com等程序)所產(chǎn)生的。
3、FAT區(qū)
在DBR之后的是我們比較熟悉的FAT(File Allocation Table文件分配表)區(qū)。在解釋文件分配表的概念之前,我們先來談?wù)劥兀–luster)的概念。文件占用磁盤空間時,基本單位不是字節(jié)而是簇。一般情 況下,軟盤每簇是1個扇區(qū),硬盤每簇的扇區(qū)數(shù)與硬盤的總?cè)萘看笮∮嘘P(guān),可能是4、8、16、32、64…… 同一個文件的數(shù)據(jù)并不一定完整地存放在磁盤的一個連續(xù)的區(qū)域內(nèi),而往往會分成若干段,像一條鏈子一樣存放。這種存儲方式稱為文件的鏈?zhǔn)酱鎯?。由于硬盤上保 存著段與段之間的連接信息(即FAT),操作系統(tǒng)在讀取文件時,總是能夠準(zhǔn)確地找到各段的位置并正確讀出。 為了實(shí)現(xiàn)文件的鏈?zhǔn)酱鎯?,硬盤上必須準(zhǔn)確地記錄哪些簇已經(jīng)被文件占用,還必須為每個已經(jīng)占用的簇指明存儲后繼內(nèi)容的下一個簇的簇號。對一個文件的最后一 簇,則要指明本簇?zé)o后繼簇。這些都是由FAT表來保存的,表中有很多表項,每項記錄一個簇的信息。由于FAT對于文件管理的重要性,所以FAT有一個備 份,即在原FAT的后面再建一個同樣的FAT。初形成的FAT中所有項都標(biāo)明為“未占用”,但如果磁盤有局部損壞,那么格式化程序會檢測出損壞的簇,在相 應(yīng)的項中標(biāo)為“壞簇”,以后存文件時就不會再使用這個簇了。FAT的項數(shù)與硬盤上的總簇數(shù)相當(dāng),每一項占用的字節(jié)數(shù)也要與總簇數(shù)相適應(yīng),因?yàn)槠渲行枰娣? 簇號。FAT的格式有多種,最為常見的是FAT16和FAT32。
4、DIR區(qū)
DIR(Directory)是根目錄區(qū),緊接著第二FAT表(即備份的FAT表)之后,記錄著根目錄下 每個文件(目錄)的起始單元,文件的屬性等。定位文件位置時,操作系統(tǒng)根據(jù)DIR中的起始單元,結(jié)合FAT表就可以知道文件在硬盤中的具體位置和大小了。
5、數(shù)據(jù)(DATA)區(qū)
數(shù)據(jù)區(qū)是真正意義上的數(shù)據(jù)存儲的地方,位于DIR區(qū)之后,占據(jù)硬盤上的大部分?jǐn)?shù)據(jù)空間。
一、硬盤的物理結(jié)構(gòu):
硬盤存儲數(shù)據(jù)是根據(jù)電、磁轉(zhuǎn)換原理實(shí)現(xiàn)的。硬盤由一個或幾個表面鍍有磁性物質(zhì)的金屬或玻璃等物質(zhì)盤片以及盤片兩面所安裝的磁頭和相應(yīng)的控制電路組成(圖 1),其中盤片和磁頭密封在無塵的金屬殼中。
硬盤工作時,盤片以設(shè)計轉(zhuǎn)速高速旋轉(zhuǎn),設(shè)置在盤片表面的磁頭則在電路控制下徑向移動到指定位置然后將數(shù)據(jù)存儲或讀取出來。當(dāng)系統(tǒng)向硬盤寫入數(shù)據(jù)時,磁頭中 “寫數(shù)據(jù)”電流產(chǎn)生磁場使盤片表面磁性物質(zhì)狀態(tài)發(fā)生改變,并在寫電流磁場消失后仍能保持,這樣數(shù)據(jù)就存儲下來了;當(dāng)系統(tǒng)從硬盤中讀數(shù)據(jù)時,磁頭經(jīng)過盤片指 定區(qū)域,盤片表面磁場使磁頭產(chǎn)生感應(yīng)電流或線圈阻抗產(chǎn)生變化,經(jīng)相關(guān)電路處理后還原成數(shù)據(jù)。因此只要能將盤片表面處理得更平滑、磁頭設(shè)計得更精密以及盡量 提高盤片旋轉(zhuǎn)速度,就能造出容量更大、讀寫數(shù)據(jù)速度更快的硬盤。這是因?yàn)楸P片表面處理越平、轉(zhuǎn)速越快就能越使磁頭離盤片表面越近,提高讀、寫靈敏度和速 度;磁頭設(shè)計越小越精密就能使磁頭在盤片上占用空間越小,使磁頭在一張盤片上建立更多的磁道以存儲更多的數(shù)據(jù)。
二、硬盤的邏輯結(jié)構(gòu):
硬盤由很多盤片(platter)組成,每個盤片的每個面都有一個讀寫磁頭。如果有N個盤片。就有2N個面,對應(yīng)2N個磁頭(Heads),從0、1、2
開始編號。每個盤片被劃分成若干個同心圓磁道(邏輯上的,是不可見的。)每個盤片的劃分規(guī)則通常是一樣的。這樣每個盤片的半徑均為固定值R的同心圓再邏輯
上形成了一個以電機(jī)主軸為軸的柱面(Cylinders),從外至里編號為0、1、2……每個盤片上的每個磁道又被劃分為幾十個扇區(qū)(Sector),通
常的容量是512byte,并按照一定規(guī)則編號為1、2、3……形成Cylinders×Heads×Sector個扇區(qū)。這三個參數(shù)即是硬盤的物理參
數(shù)。我們下面的很多實(shí)踐需要深刻理解這三個參數(shù)的意義。
硬盤存儲數(shù)據(jù)是根據(jù)電、磁轉(zhuǎn)換原理實(shí)現(xiàn)的。硬盤由一個或幾個表面鍍有磁性物質(zhì)的金屬或玻璃等物質(zhì)盤片以及盤片兩面所安裝的磁頭和相應(yīng)的控制電路組成(圖
1),其中盤片和磁頭密封在無塵的金屬殼中。
三、磁盤引導(dǎo)原理:
3.1 MBR(master boot record)扇區(qū):
計算機(jī)在按下power鍵以后,開始執(zhí)行主板bios程序。進(jìn)行完一系列檢測和配置以后。開始按bios中設(shè)定的系統(tǒng)引導(dǎo)順序引導(dǎo)系統(tǒng)。假定現(xiàn) 在是硬盤。Bios執(zhí)行完自己的程序后如何把執(zhí)行權(quán)交給硬盤呢。交給硬盤后又執(zhí)行存儲在哪里的程序呢。其實(shí),稱為mbr的一段代碼起著舉足輕重的作用。 MBR(master boot record),即主引導(dǎo)記錄,有時也稱主引導(dǎo)扇區(qū)。位于整個硬盤的0柱面0磁頭1扇區(qū)(可以看作是硬盤的第一個扇區(qū)),bios在執(zhí)行自己固有的程序以 后就會jump到mbr中的第一條指令。將系統(tǒng)的控制權(quán)交由mbr來執(zhí)行。在總共512byte的主引導(dǎo)記錄中,MBR的引導(dǎo)程序占了其中的前446個字 節(jié)(偏移0H~偏移1BDH),隨后的64個字節(jié)(偏移1BEH~偏移1FDH)為DPT(Disk PartitionTable,硬盤分區(qū)表),最后的兩個字節(jié)“55 AA”(偏移1FEH~偏移1FFH)是分區(qū)有效結(jié)束標(biāo)志。
MBR不隨操作系統(tǒng)的不同而不同,意即不同的操作系統(tǒng)可能會存在相同的MBR,即使不同,MBR也不會夾帶操作系統(tǒng)的性質(zhì)。具有公共引導(dǎo)的特 性。
我們來分析一段mbr。下面是用winhex查看的一塊希捷120GB硬盤的mbr。
MBR扇區(qū)代碼
你的硬盤的MBR引導(dǎo)代碼可能并非這樣。不過即使不同,所執(zhí)行的功能大體是一樣的。這里找wowocock關(guān)于磁盤mbr的反編譯,已加了詳細(xì)的注釋,感 興趣可以細(xì)細(xì)研究一下。
我們看DPT部分。操作系統(tǒng)為了便于用戶對磁盤的管理。加入了磁盤分區(qū)的概念。即將一塊磁盤邏輯劃分為 幾塊。磁盤分區(qū)數(shù)目的多少只受限于C~Z的英文字母的數(shù)目,在上圖DPT共64個字節(jié)中如何表示多個分區(qū)的屬性呢?microsoft通過鏈接的方法解決 了這個問題。在DPT共64個字節(jié)中,以16個字節(jié)為分區(qū)表項單位描述一個分區(qū)的屬性。也就是說,第一個分區(qū)表項描述一個分區(qū)的屬性,一般為基本分區(qū)。第 二個分區(qū)表項描述除基本分區(qū)外的其余空間,一般而言,就是我們所說的擴(kuò)展分區(qū)。這部分的大體說明見表1。
DPT代碼分析
注:上表中的超過1字節(jié)的數(shù)據(jù)都以實(shí)際數(shù)據(jù)顯示,就是按高位到地位的方式顯示。存儲時是按低位到高位存儲的。兩者表現(xiàn)不同,請仔細(xì)看清楚。以后出現(xiàn)的表, 圖均同。
也可以在winhex中看到這些參數(shù)的意義:
說明: 每個分區(qū)表項占用16個字節(jié),假定偏移地址從0開始。如圖3的分區(qū)表項3。分區(qū)表項4同分區(qū)表項3。
1、0H偏移為活動分區(qū)是否標(biāo)志,只能選00H和80H。80H為活動,00H為非活動。其余值對microsoft而言為非法值。
2、重新說明一下(這個非常重要):大于1個字節(jié)的數(shù)被以低字節(jié)在前的存儲格式格式(little endian format)或稱反字節(jié)順序保存下來。低字節(jié)在前的格式是一種保存數(shù)的方法,這樣,最低位的字節(jié)最先出現(xiàn)在十六進(jìn)制數(shù)符號中。例如,相對扇區(qū)數(shù)字段的值 0x3F000000的低字節(jié)在前表示為0x0000003F。這個低字節(jié)在前的格式數(shù)的十進(jìn)制數(shù)為63。
3、系統(tǒng)在分區(qū)時,各分區(qū)都不允許跨柱面,即均以柱面為單位,這就是通常所說的分區(qū)粒度。有時候我們分區(qū)是輸入分區(qū)的大小為7000M,分出來 卻是6997M,就是這個原因。 偏移2H和偏移6H的扇區(qū)和柱面參數(shù)中,扇區(qū)占6位(bit),柱面占10位(bit),以偏移6H為例,其低6位用作扇區(qū)數(shù)的二進(jìn)制表示。其高兩位做柱 面數(shù)10位中的高兩位,偏移7H組成的8位做柱面數(shù)10位中的低8位。由此可知,實(shí)際上用這種方式表示的分區(qū)容量是有限的,柱面和磁頭從0開始編號,扇區(qū) 從1開始編號,所以最多只能表示1024個柱面×63個扇區(qū)×256個磁頭×512byte=8455716864byte。即通常的8.4GB(實(shí)際上 應(yīng)該是7.8GB左右)限制。實(shí)際上磁頭數(shù)通常只用到255個(由匯編語言的尋址寄存器決定),即使把這3個字節(jié)按線性尋址,依然力不從心。 在后來的操作系統(tǒng)中,超過8.4GB的分區(qū)其實(shí)已經(jīng)不通過C/H/S的方式尋址了。而是通過偏移CH~偏移FH共4個字節(jié)32位線性扇區(qū)地址來表示分區(qū)所 占用的扇區(qū)總數(shù)??芍ㄟ^4個字節(jié)可以表示2^32個扇區(qū),即2TB=2048GB,目前對于大多數(shù)計算機(jī)而言,這已經(jīng)是個天文數(shù)字了。在未超過 8.4GB的分區(qū)上,C/H/S的表示方法和線性扇區(qū)的表示方法所表示的分區(qū)大小是一致的。也就是說,兩種表示方法是協(xié)調(diào)的。即使不協(xié)調(diào),也以線性尋址為 準(zhǔn)。(可能在某些系統(tǒng)中會提示出錯)。超過8.4GB的分區(qū)結(jié)束C/H/S一般填充為FEH FFH FFH。即C/H/S所能表示的最大值。有時候也會用柱面對1024的模來填充。不過這幾個字節(jié)是什么其實(shí)都無關(guān)緊要了。
雖然現(xiàn)在的系統(tǒng)均采用線性尋址的方式來處理分區(qū)的大小。但不可跨柱面的原則依然沒變。本分區(qū)的扇區(qū)總數(shù)加上與前一分區(qū)之間的保留扇區(qū)數(shù)目依然必 須是柱面容量的整數(shù)倍。(保留扇區(qū)中的第一個扇區(qū)就是存放分區(qū)表的MBR或虛擬MBR的扇區(qū),分區(qū)的扇區(qū)總數(shù)在線性表示方式上是不計入保留扇區(qū)的。如果是 第一個分區(qū),保留扇區(qū)是本分區(qū)前的所有扇區(qū)。
附:分區(qū)表類型標(biāo)志如圖4
3.2 擴(kuò)展分區(qū)
擴(kuò)展分區(qū)中的每個邏輯驅(qū)動器都存在一個類似于MBR的擴(kuò)展引導(dǎo)記錄( Extended Boot Record, EBR),也有人稱之為虛擬mbr或擴(kuò)展mbr,意思是一樣的。擴(kuò)展引導(dǎo)記錄包括一個擴(kuò)展分區(qū)表和該扇區(qū)的標(biāo)簽。擴(kuò)展引導(dǎo)記錄將記錄只包含擴(kuò)展分區(qū)中每個 邏輯驅(qū)動器的第一個柱面的第一面的信息。一個邏輯驅(qū)動器中的引導(dǎo)扇區(qū)一般位于相對扇區(qū)32或63。但是,如果磁盤上沒有擴(kuò)展分區(qū),那么就不會有擴(kuò)展引導(dǎo)記 錄和邏輯驅(qū)動器。第一個邏輯驅(qū)動器的擴(kuò)展分區(qū)表中的第一項指向它自身的引導(dǎo)扇區(qū)。第二項指向下一個邏輯驅(qū)動器的EBR。如果不存在進(jìn)一步的邏輯驅(qū)動器,第 二項就不會使用,而且被記錄成一系列零。如果有附加的邏輯驅(qū)動器,那么第二個邏輯驅(qū)動器的擴(kuò)展分區(qū)表的第一項會指向它本身的引導(dǎo)扇區(qū)。第二個邏輯驅(qū)動器的 擴(kuò)展分區(qū)表的第二項指向下一個邏輯驅(qū)動器的EBR。擴(kuò)展分區(qū)表的第三項和第四項永遠(yuǎn)都不會被使用。
通過一幅4分區(qū)的磁盤結(jié)構(gòu)圖可以看到磁盤的大致組織形式。如圖5
關(guān)于擴(kuò)展分區(qū),如圖6所示,擴(kuò)展分區(qū)中邏輯驅(qū)動器的擴(kuò)展引導(dǎo)記錄是一個連接表。該圖顯示了一個擴(kuò)展分區(qū)上的三個邏輯驅(qū)動器,說明了前面的邏輯驅(qū)動器和最后 一個邏輯驅(qū)動器之間在擴(kuò)展分區(qū)表中的差異。
除了擴(kuò)展分區(qū)上最后一個邏輯驅(qū)動器外,表2中所描述的擴(kuò)展分區(qū)表的格式在每個邏輯驅(qū)動器中都是重復(fù)的:第一個項標(biāo)識了邏輯驅(qū)動器本身的引導(dǎo)扇區(qū),第二個項 標(biāo)識了下一個邏輯驅(qū)動器的EBR。最后一個邏輯驅(qū)動器的擴(kuò)展分區(qū)表只會列出它本身的分區(qū)項。最后一個擴(kuò)展分區(qū)表的第二個項到第四個項被使用。
擴(kuò)展分區(qū)表項中的相對扇區(qū)數(shù)字段所顯示的是從擴(kuò)展分區(qū)開始到邏輯驅(qū)動器中第一個扇區(qū)的位移的字節(jié)數(shù)。總扇區(qū)數(shù)字段中的數(shù)是指組成該邏輯驅(qū)動器的扇區(qū)數(shù) 目??偵葏^(qū)數(shù)字段的值等于從擴(kuò)展分區(qū)表項所定義的引導(dǎo)扇區(qū)到邏輯驅(qū)動器末尾的扇區(qū)數(shù)。
有時候在磁盤的末尾會有剩余空間,剩余空間是什么呢?我們前面說到,分區(qū)是以1柱面的容量為分區(qū)粒度的,那么如果磁盤總空間不是整數(shù)個柱面的話,不夠一個 柱面的剩下的空間就是剩余空間了,這部分空間并不參與分區(qū),所以一般無法利用。照道理說,磁盤的物理模式?jīng)Q定了磁盤的總?cè)萘烤蛻?yīng)該是整數(shù)個柱面的容量,為 什么會有不夠一個柱面的空間呢。在我的理解看來,本來現(xiàn)在的磁盤為了更大的利用空間,一般在物理上并不是按照外圍的扇區(qū)大于里圈的扇區(qū)這種管理方式,只是 為了與操作系統(tǒng)兼容而抽象出來CHS。可能其實(shí)際空間容量不一定正好為整數(shù)個柱面的容量。