深入剖析硬盤數據部分結構
一塊硬盤最重要的兩部分就是存儲介質和電路板了,存儲介質又叫做硬盤數據部分。硬盤數據部分又分為五個區,為了讓大家更直觀地了解硬盤,筆者分析了一下這五個區所起的作用。
硬盤上的數據按照其不同的特點和作用大致可分為5部分:MBR區、DBR區、FAT區、DIR區和DATA區。
(1)MBR區
MBR(Main Boot Record),按其字面上的理解即為主引導記錄區,位于整個硬盤的0磁道0柱面1扇區。不過,在總共512字節的主引導扇區中,MBR只占用了其中的446個字節(偏移0--偏移1BDH),另外的64個字節(偏移1BEH--偏移1FDH)交給了DPT(Disk Partition Table硬盤分區表)(見下表),最后兩個字節"55,AA"(偏移1FEH- 偏移1FFH)是分區的結束標志。這個整體構成了硬盤的主引導扇區。
主引導記錄中包含了硬盤的一系列參數和一段引導程序。其中的硬盤引導程序的主要作用是檢查分區表是否正確并且在系統硬件完成自檢以后引導具有激活標志的分區上的操作系統,并將控制權交給啟動程序。MBR是由分區程序(如Fdisk.com)所產生的,它不依賴任何操作系統,而且硬盤引導程序也是可以改變的,從而實現多系統共存。
偏移 長度 所表達的意義
0 字節 分區狀態:如0-->非活動分區
80--> 活動分區
1 字節 該分區起始頭(HEAD)
2 字 該分區起始扇區和起始柱面
4 字節 該分區類型:如82--> Linux Native分區
83--> Linux Swap 分區
5 字節 該分區終止頭(HEAD)
6 字 該分區終止扇區和終止柱面
8 雙字 該分區起始絕對分區
C 雙字 該分區扇區數
下面,我們以一個實例讓大家更直觀地來了解主引導記錄:
例:80 01 01 00 0B FE BF FC 3F 00 00 00 7E 86 BB 00
在這里我們可以看到,最前面的"80"是一個分區的激活標志,表示系統可引導;"01 01 00"表示分區開始的磁頭號為01,開始的扇區號為01,開始的柱面號為00;"0B"表示分區的系統類型是FAT32,其他比較常用的有04(FAT16)、07(NTFS);"FE BF FC"表示分區結束的磁頭號為254,分區結束的扇區號為63、分區結束的柱面號為764;"3F 00 00 00"表示首扇區的相對扇區號為63;"7E 86 BB 00"表示總扇區數為12289622。
(2)DBR區
DBR(Dos Boot Record)是操作系統引導記錄區的意思。它通常位于硬盤的0磁道1柱面1扇區,是操作系統可以直接訪問的第一個扇區,它包括一個引導程序和一個被稱為BPB(Bios Parameter Block)的本分區參數記錄表。引導程序的主要任務是當MBR將系統控制權交給它時,判斷本分區跟目錄前兩個文件是不是操作系統的引導文件(以DOS為例,即是Io.sys和Msdos.sys)。如果確定存在,就把其讀入內存,并把控制權 交給該文件。BPB參數塊記錄著本分區的起始扇區、結束扇區、文件存儲格式、硬盤介質描述符、根目錄大小、FAT個數,分配單元的大小等重要參數。
(3)FAT區
在DBR之后的是我們比較熟悉的FAT(File Allocation Table文件分配表)區。在解釋文件分配表的概念之前,我們先來談談簇(cluster)的概念。文件占用磁盤空間時,基本單位不是字節而是簇。簇的大小與磁盤的規格有關,一般情況下,軟盤每簇是1個扇區,硬盤每簇的扇區數與硬盤的總容量大小有關,可能是4、8、16、32、64……
通過上文我們已經知道,同一個文件的數據并不一定完整地存放在磁盤的一個連續的區域內,而往往會分成若干段,像一條鏈子一樣存放。這種存儲方式稱為文件的鏈式存儲。硬盤上的文件常常要進行創建、刪除、增長、縮短等操作。這樣操作做的越多,盤上的文件就可能被分得越零碎(每段至少是1簇)。但是,由于硬盤上保存著段與段之間的連接信息(即FAT),操作系統在讀取文件時,總是能夠準確地找到各段的位置并正確讀出。不過,這種以簇為單位的存儲法也是有其缺陷的。這主要表現在對空間的利用上。每個文件的最后一簇都有可能有未被完全利用的空間(稱為尾簇空間)。一般來說,當文件個數比較多時,平均每個文件要浪費半個簇的空間。 好了,我們言歸正傳,為了實現文件的鏈式存儲,硬盤上必須準確地記錄哪些簇已經被文件占用,還必須為每個已經占用的簇指明存儲后繼內容的下一個簇的簇號,對一個文件的最后一簇,則要指明本簇無后繼簇。這些都是由FAT表來保存的,表中有很多表項,每項記錄一個簇的信息。