主板BIOS程序運行,完成一系列的檢測和配置后,將執行權力交予硬盤,跳到硬盤的第一個(主引導512字節)扇區上執行MBR,其中MBR的后64個字節為DPT(硬盤分區表,這里最多4個分區,以55 AA結束),DPT上表明了分區是否為活動分區、分區的起始/結束磁頭、起始/結束柱面、起始/結束扇區等信息,(從這里看出硬盤內部就是以扇區為單元管理磁盤),接下來CPU找到活動分區,跳到活動分區去引導系統。
我們已經了解了MBR,就可以知道磁盤的分區等信息,那么我們接下來再看看具體的分區中的結構;通過DPT找到一個分區,MBR將跳到活動分區,將執行權交給該分區的引導扇區(DBR,相當扇區編號為0),
每個分區的結構都是一樣的,最開始的是引導扇區,然后是數據。
DBR區(DOS BOOT RECORD)即操作系統引導記錄區的意思,通常占用分區的第0扇區共512個字節(特殊情況也要占用其它保留扇區,我們先說第0扇)。在這512個字節中,第一部分是跳轉指令,接下來是廠商標志和操作系統版本號,BPB(BIOS Parameter Block),擴展BPB,os引導程序,結束標志幾部分組成。
MBR將CPU執行轉移給引導扇區,因此,引導扇區的前三個字節必須是合法的可執行的基于x86的CPU指令。這通常是一條跳轉指令,該指令負責跳過接下來的幾個不可執行的字節(BPB和擴展BPB),跳到操作系統引導代碼部分。
BPB(相對偏移字節0X0B),它包含了磁盤容量和幾何結構變量等信息:硬件扇區大。ㄗ止潝担、每鏃扇區數、文件系統版本等信息。
擴展BPB也包含與文件系統等的相關各種信息。
不論是硬盤還是各種flash,存儲設備要通過文件系統管理存儲,存儲設備的粗線條存儲規劃都是這樣的,使用不同的文件系統或不同的分區,也就是相關的描述信息不一樣,數據區的存儲格式不一樣,但是粗線條的存儲規劃是一致的(如MBR,DBR,數據區,只是其中包含的信息不一樣)。
擴展分區可以被分區多個邏輯分區(邏輯驅動器),每個邏輯分區的結構是與主分區結構類似,但有區別,每個邏輯驅動器包含擴展引導記錄(擴展分區表與結束符)、引導扇區、數據區。
邏輯驅動器的擴展引導記錄的第一項指向本驅動器的“引導扇區+數據區”,第二項指向下一個邏輯驅動器的擴展引導記錄;然而每個引導扇區與主分區的引導扇區類似也有區別,具體在看文檔。
FAT16在DBR之后沒有留有任何保留扇區,其后緊隨的便是FAT表。FAT表是FAT16用來記錄磁盤數據區簇鏈結構的,FAT表以"F8 FF FF FF" 開頭,FAT表記錄了磁盤數據文件的存儲鏈表,對于數據的讀取而言是極其重要的,以至于Microsoft為其開發的FAT文件系統中的FAT表創建了一份備份,就是我們看到的FAT2。
1:硬盤的物理結構
硬盤存儲數據是根據電、磁轉換原理實現的。硬盤由一個或幾個表面鍍有磁性物質的金屬或玻璃等物質盤片以及盤片兩面所安裝的磁頭和相應的控制電路組成(圖1),其中盤片和磁頭密封在無塵的金屬殼中。
硬盤工作時,盤片以設計轉速高速旋轉,設置在盤片表面的磁頭則在電路控制下徑向移動到指定位置然后將數據存儲或讀取出來。當系統向硬盤寫入數據時,磁頭中“寫數據”電流產生磁場使盤片表面磁性物質狀態發生改變,并在寫電流磁場消失后仍能保持,這樣數據就存儲下來了;當系統從硬盤中讀數據時,磁頭經過盤片指定區域,盤片表面磁場使磁頭產生感應電流或線圈阻抗產生變化,經相關電路處理后還原成數據。因此只要能將盤片表面處理得更平滑、磁頭設計得更精密以及盡量提高盤片旋轉速度,就能造出容量更大、讀寫數據速度更快的硬盤。這是因為盤片表面處理越平、轉速越快就能越使磁頭離盤片表面越近,提高讀、寫靈敏度和速度;磁頭設計越小越精密就能使磁頭在盤片上占用空間越小,使磁頭在一張盤片上建立更多的磁道以存儲更多的數據。 
2:硬盤的邏輯結構
硬盤由很多盤片(platter)組成,每個盤片的每個面都有一個讀寫磁頭。如果有N個盤片。就有2N個面,對應2N個磁頭(Heads),從0、1、2開始編號。每個盤片被劃分成若干個同心圓磁道(邏輯上的,是不可見的。)每個盤片的劃分規則通常是一樣的。這樣每個盤片的半徑均為固定值R的同心圓再邏輯上形成了一個以電機主軸為軸的柱面(Cylinders),從外至里編號為0、1、2……每個盤片上的每個磁道又被劃分為幾十個扇區(Sector),通常的容量是512byte,并按照一定規則編號為1、2、3……形成Cylinders×Heads×Sector個扇區。這三個參數即是硬盤的物理參數。我們下面的很多實踐需要深刻理解這三個參數的意義。
3:磁盤引導原理
MBR(master boot record)扇區
計算機在按下power鍵以后,開始執行主板bios程序。進行完一系列檢測和配置以后。開始按bios中設定的系統引導順序引導系統。假定現在是硬盤。Bios執行完自己的程序后如何把執行權交給硬盤呢。交給硬盤后又執行存儲在哪里的程序呢。其實,稱為mbr的一段代碼起著舉足輕重的作用。MBR(master boot record),即主引導記錄,有時也稱主引導扇區。位于整個硬盤的0柱面0磁頭1扇區(可以看作是硬盤的第一個扇區),bios在執行自己固有的程序以后就會jump到mbr中的第一條指令。將系統的控制權交由mbr來執行。在總共512byte的主引導記錄中,MBR的引導程序占了其中的前446個字節(偏移0H~偏移1BDH),隨后的64個字節(偏移1BEH~偏移1FDH)為DPT(Disk PartitionTable,硬盤分區表),最后的兩個字節“55 AA”(偏移1FEH~偏移1FFH)是分區有效結束標志。
MBR不隨操作系統的不同而不同,意即不同的操作系統可能會存在相同的MBR,即使不同,MBR也不會夾帶操作系統的性質。具有公共引導的特性。我們來分析一段mbr。下面是用winhex查看的一塊希捷120GB硬盤的mbr。
我們看DPT部分。操作系統為了便于用戶對磁盤的管理。加入了磁盤分區的概念。即將一塊磁盤邏輯劃分為幾塊。磁盤分區數目的多少 只受限于C~Z的英文字母的數目;
在上圖DPT的64個字節中,如何表示多個分區的屬性呢? microsoft通過鏈接的方法【見下圖】解決了這個問題。在DPT共64個字節中,以16個字節為分區表項單位描述一個分區的屬性。也就是說,第一個分區表項描述一個分區的屬性,一般為基本分區。第二個分區表項描述除基本分區外的其余空間,一般而言,就是我們所說的擴展分區。這部分的大體說明見表1。【也就是64個字節,每16個字節用來描述一個分區,所以64個字節做多描述4個分區,所以硬盤格式化分區的時候,主分區+擴展分區最多就4個:3+1,1+1,4+0,擴展分區可以用來劃分邏輯分區】,下圖就是一個16字節的分區描述字段。

說明: 每個分區表項占用16個字節,假定偏移地址從0開始。如圖3的分區表項3。分區表項4同分區表項3。
1、0H偏移為活動分區是否標志,只能選00H和80H。80H為活動,00H為非活動。其余值對microsoft而言為非法值。
2、重新說明一下(這個非常重要):大于1個字節的數被以低字節在前的存儲格式格式(little endian format)或稱反字節順序保存下來。低字節在前的格式是一種保存數的方法,這樣,最低位的字節最先出現在十六進制數符號中。例如,相對扇區數字段的值0x3F000000的低字節在前表示為0x0000003F。這個低字節在前的格式數的十進制數為63。
3、系統在分區時,各分區都不允許跨柱面,即均以柱面為單位,這就是通常所說的分區粒度。有時候我們分區是輸入分區的大小為7000M,分出來卻是6997M,就是這個原因。 偏移2H和偏移6H的扇區和柱面參數中,扇區占6位(bit),柱面占10位(bit),以偏移6H為例,其低6位用作扇區數的二進制表示。其高兩位做柱面數10位中的高兩位,偏移7H組成的8位做柱面數10位中的低8位。由此可知,實際上用這種方式表示的分區容量是有限的,柱面和磁頭從0開始編號,扇區從1開始編號,所以最多只能表示1024個柱面×63個扇區×256個磁頭×512byte=8455716864byte。即通常的8.4GB(實際上應該是7.8GB左右)限制。實際上磁頭數通常只用到255個(由匯編語言的尋址寄存器決定),即使把這3個字節按線性尋址,依然力不從心。 在后來的操作系統中,超過8.4GB的分區其實已經不通過C/H/S的方式尋址了。而是通過偏移CH~偏移FH共4個字節32位線性扇區地址來表示分區所占用的扇區總數?芍ㄟ^4個字節可以表示2^32個扇區,即2TB=2048GB,目前對于大多數計算機而言,這已經是個天文數字了。在未超過8.4GB的分區上,C/H/S的表示方法和線性扇區的表示方法所表示的分區大小是一致的。也就是說,兩種表示方法是協調的。即使不協調,也以線性尋址為準。(可能在某些系統中會提示出錯)。超過8.4GB的分區結束C/H/S一般填充為FEH FFH FFH。即C/H/S所能表示的最大值。有時候也會用柱面對1024的模來填充。不過這幾個字節是什么其實都無關緊要了。
雖然現在的系統均采用線性尋址的方式來處理分區的大小。但不可跨柱面的原則依然沒變。本分區的扇區總數加上與前一分區之間的保留扇區數目依然必須是柱面容量的整數倍。(保留扇區中的第一個扇區就是存放分區表的MBR或虛擬MBR的扇區,分區的扇區總數在線性表示方式上是不計入保留扇區的。如果是第一個分區,保留扇區是本分區前的所有扇區。

擴展分區
擴展分區中的每個邏輯驅動器都存在一個類似于MBR的擴展引導記錄( Extended Boot Record, EBR),也有人稱之為虛擬mbr或擴展mbr,意思是一樣的。擴展引導記錄包括一個擴展分區表和該扇區的標簽。擴展引導記錄將記錄只包含擴展分區中每個邏輯驅動器的第一個柱面的第一面的信息。一個邏輯驅動器中的引導扇區一般位于相對扇區32或63。但是,如果磁盤上沒有擴展分區,那么就不會有擴展引導記錄和邏輯驅動器。第一個邏輯驅動器的擴展分區表中的第一項指向它自身的引導扇區。第二項指向下一個邏輯驅動器的EBR。如果不存在進一步的邏輯驅動器,第二項就不會使用,而且被記錄成一系列零。如果有附加的邏輯驅動器,那么第二個邏輯驅動器的擴展分區表的第一項會指向它本身的引導扇區。第二個邏輯驅動器的擴展分區表的第二項指向下一個邏輯驅動器的EBR。擴展分區表的第三項和第四項永遠都不會被使用。
除了擴展分區上最后一個邏輯驅動器外,表2中所描述的擴展分區表的格式在每個邏輯驅動器中都是重復的:第一個項標識了邏輯驅動器本身的引導扇區,第二個項標識了下一個邏輯驅動器的EBR。最后一個邏輯驅動器的擴展分區表只會列出它本身的分區項。最后一個擴展分區表的第二個項到第四個項被使用。
擴展分區表項中的相對扇區數字段所顯示的是從擴展分區開始到邏輯驅動器中第一個扇區的位移的字節數?偵葏^數字段中的數是指組成該邏輯驅動器的扇區數目?偵葏^數字段的值等于從擴展分區表項所定義的引導扇區到邏輯驅動器末尾的扇區數。
有時候在磁盤的末尾會有剩余空間,剩余空間是什么呢?我們前面說到,分區是以1柱面的容量為分區粒度的,那么如果磁盤總空間不是整數個柱面的話,不夠一個柱面的剩下的空間就是剩余空間了,這部分空間并不參與分區,所以一般無法利用。照道理說,磁盤的物理模式決定了磁盤的總容量就應該是整數個柱面的容量,為什么會有不夠一個柱面的空間呢。在我的理解看來,本來現在的磁盤為了更大的利用空間,一般在物理上并不是按照外圍的扇區大于里圈的扇區這種管理方式,只是為了與操作系統兼容而抽象出來CHS?赡芷鋵嶋H空間容量不一定正好為整數個柱面的容量吧。
FAT分區原理
現在我們著重研究FAT格式分區內數據是如何存儲的。FAT分區格式是MICROSOFT最早支持的分區格式,依據FAT表中每個簇鏈的所占位數(有關概念,后面會講到)分為fat12、fat16、fat32三種格式"變種",但其基本存儲方式是相似的。
仔細研究圖7中的fat16和fat32分區的組成結構。下面依次解釋DBR、FAT1、FAT2、根目錄、數據區、剩余扇區的概念。提到的地址如無特別提示均為分區內部偏移。
DBR
DBR區(DOS BOOT RECORD)即操作系統引導記錄區的意思,通常占用分區的第0扇區共512個字節(特殊情況也要占用其它保留扇區,我們先說第0扇)。在這512個字節中,其實又是由跳轉指令,廠商標志和操作系統版本號,BPB(BIOS Parameter Block),擴展BPB,os引導程序,結束標志幾部分組成。 以用的最多的FAT32為例說明分區DBR各字節的含義。見圖8
MBR將CPU執行轉移給引導扇區,因此,引導扇區的前三個字節必須是合法的可執行的基于x86的CPU指令。這通常是一條跳轉指令,該指令負責跳過接下來的幾個不可執行的字節(BPB和擴展BPB),跳到操作系統引導代碼部分。
跳轉指令之后是8字節長的OEM ID,它是一個字符串, OEM ID標識了格式化該分區的操作系統的名稱和版本號。為了保留與MS-DOS的兼容性,通常Windows 2000格式化該盤是在FAT16和FAT32磁盤上的該字段中記錄了“MSDOS 5.0”,在NTFS磁盤上(關于ntfs,另述),Windows 2000記錄的是“NTFS”。通常在被Windows 95格式化的磁盤上OEM ID字段出現“MSWIN4.0”,在被Windows 95 OSR2和Windows 98格式化的磁盤上OEM ID字段出現“MSWIN4.1”。
接下來的從偏移0x0B開始的是一段描述能夠使可執行引導代碼找到相關參數的信息。通常稱之為BPB(BIOS Parameter Block),BPB一般開始于相同的位移量,因此,標準的參數都處于一個已知的位置。磁盤容量和幾何結構變量都被封在BPB之中。由于引導扇區的第一部分是一個x86跳轉指令。因此,將來通過在BPB末端附加新的信息,可以對BPB進行擴展。只需要對該跳轉指令作一個小的調整就可以適應BPB的變化。圖9已經列出了項目的名稱和取值,為了系統的研究,針對圖8,將FAT32分區格式的BPB含義和擴展BPB含義釋義為表格,見表4和表5。
FAT表和數據的存儲原則
FAT表(File Allocation Table 文件分配表),是Microsoft在FAT文件系統中用于磁盤數據(文件)索引和定位引進的一種鏈式結構。假如把磁盤比作一本書,FAT表可以認為相當于書中的目錄,而文件就是各個章節的內容。但FAT表的表示方法卻與目錄有很大的不同。
在FAT文件系統中,文件的存儲依照FAT表制定的簇鏈式數據結構來進行。同時,FAT文件系統將組織數據時使用的目錄也抽象為文件,以簡化對數據的管理。