我對硬盤MBR、DBR、BPB、FAT和FDT的理解(gliethttp) 文章來源:http://gliethttp.cublog.cn[轉(zhuǎn)載請聲明出處]
硬盤存儲數(shù)據(jù)是根據(jù)電、磁轉(zhuǎn)換原理實現(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ù)速度更快的硬盤。這是因為盤片表面處理越平、轉(zhuǎn)速越快就能越使磁頭離盤片表面越近,提高讀、寫靈敏度和速度;磁頭設(shè)計越小越精密就能使磁頭在盤片上占用空間越小,使磁頭在一張盤片上建立更多的磁道以存儲更多的數(shù)據(jù)。 硬盤由很多盤片(platter)組成,每個盤片的每個面都有一個讀寫磁頭。如果有N個盤片。就有2N個面,對應(yīng)2N個磁頭(Heads),從0、1、2開始編號。每個盤片被劃分成若干個同心圓磁道(邏輯上的,是不可見的。)每個盤片的劃分規(guī)則通常是一樣的。這樣每個盤片的半徑均為固定值R的同心圓再邏輯上形成了一個以電機主軸為軸的柱面(Cylinders),從外至里編號為0、1、2……每個盤片上的每個磁道又被劃分為幾十個扇區(qū)(Sector),通常的容量是512byte,并按照一定規(guī)則編號為1、2、3……形成Cylinders×Heads×Sector個扇區(qū)。這三個參數(shù)即是硬盤的物理參數(shù)。 [摘自:《FAT文件系統(tǒng)原理》] 以下為我的理解(gliethttp) Cylinders柱面?zhèn)€數(shù)為同心不同徑的磁道個數(shù) Heads磁頭個數(shù)為一個存放Cylinders個磁道的存儲介質(zhì)表面的面數(shù) Sector就是一個磁道上的扇區(qū)個數(shù) 所以Cylinders×Heads×Sector就是這個物理硬盤的扇區(qū)總數(shù). MBR->DPT 主分區(qū)1-->起始扇區(qū)DBR[包括BPB和擴展BPB]-->FAT1-->FAT2-->FDT-->數(shù)據(jù)區(qū) 主分區(qū)2-->下一個擴展分區(qū)信息描述 主分區(qū)3 主分區(qū)4 MBR-->位于絕對的第0扇區(qū) MBR的引導(dǎo)程序占了其中的前446個,緊接著的后64個字節(jié)是硬盤分區(qū)表DPT,最后2個字節(jié)是"55 AA",為磁盤有效結(jié)尾標(biāo)志值 [0x000~0x1BD]存放MBR--對于pc電腦bios執(zhí)行完自舉之后,會將cpu控制權(quán)交給此間的最大446個字節(jié)的loader程序 [0x1BE~0x1FD]存放MBR--DPT硬盤分區(qū)表,每16個字節(jié)描述一個主分區(qū),根據(jù)分區(qū)類型字節(jié)域,我們可以知道該分區(qū)類型 所以pc上主分區(qū)最多只能有4個.[gliethttp] (注:DPT中對于>1字節(jié)的組合類型數(shù)據(jù)的存儲,按小端模式[little endian]存儲) 幾個常見的分區(qū)類型值: 0x01 --- FAT32 0x04 --- FAT16<32M 0x05 --- Extended(擴展分區(qū)) 0x06 --- FAT16 0x07 --- NTFS 0x0B --- WIN95 FAT32 0x0C --- WIN95 FAT32 0x0E --- WIN95 FAT16 0x0F --- WIN95 Extended>8GB 0x11 --- Hidden FAT12 0x14 --- Hidden FAT16<32GB 0x16 --- Hidden FAT16 0x17 --- Hidden NTFS 0x1B --- Hidden FAT32 0x82 --- Linux swap 0x83 --- Linux 0x85 --- Linux extended 0xA6 --- Open BSD pc執(zhí)行完bios之后,將cpu控制權(quán)交給MBR的前446個字節(jié)的loader程序,位于MBR中的loader程序會加載活動主分區(qū)對應(yīng)的DBR區(qū),即—操作系統(tǒng) 啟動程序,之后MBR將cpu控制權(quán)交給DBR,所以DBR的第1個扇區(qū)的前3個字節(jié)必須對應(yīng)x86的跳轉(zhuǎn)指令”E8 58 90”,該指令負責(zé)跳過接下來的幾個不可執(zhí)行的字節(jié)(BPB和擴展BPB),跳到操作系統(tǒng)引導(dǎo)代碼部分。 DBR位于當(dāng)前分區(qū)的起始扇區(qū),比如c盤的第1個起始扇區(qū)地址,就是c盤對應(yīng)的DRB區(qū), 同樣D盤的第1個起始扇區(qū)地址,就是D盤對應(yīng)的DBR區(qū), 對于usb盤,也一樣,usb的第1個起始扇區(qū)就是該U盤的DBR區(qū) DBR的BPB區(qū)域描述本分區(qū)的大小,起始、終止磁盤、柱面、扇區(qū)號以及細分內(nèi)容:fat的個數(shù)、每扇區(qū)字節(jié)數(shù)、 每簇扇區(qū)數(shù)、當(dāng)前分區(qū)保留扇區(qū)數(shù)、根目錄FDT項數(shù)、本分區(qū)對應(yīng)的存儲介質(zhì)類型、每個fat需要的扇區(qū)數(shù)、 總扇區(qū)數(shù)、根目錄FDT簇號等 BPB地址 ---0x0B~0x40 擴展BPB地址 ---0x40~0x57 還記得前面提到的x86跳轉(zhuǎn)指令”E8 58 90”吧,這個指令翻譯過來就是從指令處開始向后跳轉(zhuǎn)幾個字節(jié)到0x5A處繼續(xù)執(zhí)行程序, 所以DBR的0x5A處開始存放了windows操作系統(tǒng)的引導(dǎo)代碼,DBR扇區(qū)的最后兩個字節(jié)一般存儲值為0x55AA的DBR有效標(biāo)志, 如果是其他值,系統(tǒng)將不會執(zhí)行DBR中的操作系統(tǒng)引導(dǎo)代碼. 還有一個知識點,就是“保留扇區(qū)”(也叫“隱藏扇區(qū)”或“系統(tǒng)扇區(qū)”),“保留扇區(qū)”指從管理本邏輯磁盤,如C盤:D盤:U盤等的DBR 扇區(qū)開始的供當(dāng)前邏輯盤使用的用來描述本邏輯盤信息或者操作系統(tǒng)啟動代碼之類數(shù)據(jù)的扇區(qū)總數(shù). 對于DBR管理的當(dāng)前分區(qū),如:C盤、D盤等來說,DBR所在的扇區(qū)為相對于當(dāng)前分區(qū)的0扇區(qū), 所以使用winhex,打開整個硬盤時, 看到的是該硬盤的絕對地址[gliethttp] 即:第0扇區(qū)為MBR,第63扇區(qū)為C盤的DBR,對于我的硬盤還有D、E和F C盤:分區(qū)表DPT---0扇區(qū) ,它對應(yīng)的DBR扇區(qū)---DPT+63=63扇區(qū) D盤:分區(qū)表DPT---81931500扇區(qū)(無用) ,它對應(yīng)的DBR扇區(qū)---DPT+63=81931563扇區(qū) E盤:分區(qū)表DPT---163863000扇區(qū)(無用),它對應(yīng)的DBR扇區(qū)---DPT+63=163863063扇區(qū) DBR又叫做該分區(qū)盤的起始扇區(qū),在絕對地址下, 該分區(qū)盤的DBR就是絕對偏移扇區(qū)值, 使用winhex打開該分區(qū)盤(如D盤)之后,DBR在該分區(qū)盤(如D盤)內(nèi)部的相對扇區(qū)值為0, 我的硬盤中[gliethttp] C盤的DBR相對扇區(qū)為0 C盤的FAT1相對C盤的扇區(qū)偏移值為34 D盤的DBR相對扇區(qū)為0 D盤的FAT1相對D盤的扇區(qū)偏移值為34 E盤的DBR相對扇區(qū)為0 E盤的FAT1相對E盤的扇區(qū)偏移值為38 U盤的DBR相對扇區(qū)為0 U盤的FAT1相對U盤的扇區(qū)偏移值為36 以上這些偏移值都在每個分區(qū)盤的DBR中的BPB里有描述. (winhex操作圖例1)(進入C盤之后,DBR即起始扇區(qū)為相對地址0) winhex操作圖例2(進入D盤之后,DBR即起始扇區(qū)為相對地址0) 雖然進入D盤或E盤等分區(qū)盤之后使用winhex打開的“起始扇區(qū)(模板)”的DBR相對地址不一樣,但實際上都是指向同一個絕對物理地址, DBR的內(nèi)容都是一樣的. 對于存在擴展分區(qū)的硬盤,比如我的硬盤有C、D、E和F共4個盤符 那么C盤將真正的使用硬盤的MBR,對于擴展分區(qū)是如何被系統(tǒng)識別的,以及他們之間是如何串聯(lián)起來的, 有這樣一個規(guī)定,使用MBR的第2個主分區(qū)作為下一個擴展分區(qū)相對與本分區(qū)的偏移扇區(qū)描述體 那么如果在擴展分區(qū)中,也沒有MBR啊,是的,所以我們虛擬出一個MBR,認為下一個擴展分區(qū)是一個虛擬的物理硬盤,它也存在MBR 這樣在虛擬MBR中只需要填寫第2個主分區(qū),即這個擴展分區(qū)對應(yīng)的下一個擴展分區(qū)的偏移扇區(qū)描述體即可,這樣循環(huán)下去.
| 文件: | FAT文件系統(tǒng)原理.rar | 大小: | 379KB | 下載: | 下載 | | | |