第三章 硬碟分區表原理
3.1.硬碟分區格式化
1、 硬碟低級格式化(low level format)簡稱低級格式化,也稱為物理格式化 (physical format)
2、Format 高級格式化。
3、 硬碟先分區(Fdisk、Partition Magic),分區是用來建立一些分區表等資訊;
以下是fdisk分區的一部分資訊:
圖3-1 Fdisk介面
4、Format主要作用如下:
A、從各個邏輯盤指定的柱面開始,對磁區進行邏輯編號(分區內的編號);
B、創建引導記錄(DBR或成為引導區),如果命令中帶上“/S”則裝入msdos.sys、command.com、IO.SYS等3個文件;
C、在各個硬碟上建立檔案配置表(FAT);
D、建立對應的檔目錄表(FDT)及資料區(DATA)。
3.2.硬碟分區表結構
新購買來一塊硬碟需要將它分區、格式化,然後才能安裝作業系統方可以使用。以Win9x/Me系列來說,我們一般要將硬碟分成主引導磁區(MBR)、作業系統引導磁區(DBR)、
FAT(檔案配置表)、DIR(目錄區)和Data(資料區)等五部分(其中只有主引導磁區是唯一的,其它的隨你的分區數的增加而增加)。
.. MBR(Main Boot Record)即主引導記錄區,它位於整個硬碟的0磁軌0柱面1扇區,包括硬碟引導程式和分區表。
.. DBR(Dos Boot Record)即作業系統引導記錄區,通常位於硬碟的0磁軌1柱面1磁區,是作業系統可直接訪問的第一個磁區,它也包括一個引導程式和一個被稱為BPB(BIOS Parameter Block)的本分區參數記錄表。每個邏輯分區都有一個DBR。
.. FAT(File Allocation Table)即檔案配置表,是DOS、Windows9X系統的檔定址格式,為了資料安全起見,FAT一般做成兩個,第二FAT為第一FAT的備份。
.. DIR是Directory即根目錄區的簡寫,DIR緊接在第二FAT表之後。
.. Data既是資料區,在目錄區之後就是資料區,所有的檔等資料均存放在此區域。
3.2.1.主引導磁區
主引導磁區位於整個硬碟的0磁軌0柱面1磁區,包括硬碟主引導記錄MBR(Main Boot Record)和分區表DPT(Disk Partition Table)。其中主引導記錄的作用就是檢查分區表是否正確以及確定哪個分區為引導分區,並在程式結束時把該分區的啟動程式(也就是作業系統引導磁區)調入記憶體加以執行。至於分區表,很多人都知道,以80H或00H為開始標誌,以55AAH為結束標誌,共64位元組,位於本磁區的最末端。值得一提的是,MBR是由分區程式(例如DOS的Fdisk.exe)產生。
下圖是用江民硬碟修復王查看主引導磁區(主引導記錄+分區表)
圖3-3
上圖3-3是硬碟的主引導記錄,為硬碟的0面0柱1磁區的資訊;也是邏輯上的0磁區(用KVFIX可以看出)每磁區位元組數為512個位元組。前446個位元組為硬碟的主引導記錄。如果在分區表80至55AA等64個位元組都正常的情況下,用KVFIX/K或FDISK/MBR能自動生成這446個位元組。
上圖3-3畫紅線的80至55AA是硬碟的分區表,以下詳細介紹:
80 該位元組表示當前硬碟分區是否為啟動分區,80表示啟動、00表示非啟動;
01 該位元組表示硬碟的起始磁頭(也稱為面),
01 該位元組表示硬碟的起始磁區(0101這兩個位元組表示分區起始磁區和柱面號),
00 該位元組表示硬碟的起始柱面,
0B 該位元組表示硬碟分區的類型,如果硬碟為FAT16位元那麼此處為06;如果硬碟分區格式為FAT32位那麼此處為0B,但是如果該分區格式大於8G那麼此處為0C,如果為NTFS格式此處為07,如果是LiNux分區格式為83。
FE 該位元組表示硬碟的結束磁頭,255-1=254
3FFE 這兩個位元組表示硬碟的結束磁區和柱面(常常用FFFF替換)。
3F000000 這4個直接表示為硬碟的隱含磁區,也就是說硬碟分區表到引導區之間的扇區數目。低位元在前高位在後0000003F寫成3F000000;
00823E00 表示該分區的大小,低位元在前高位在後3E8200寫成00823E00。
01FF0FFEFFFF 可以從D盤分區表抄過來,但是主要磁碟分割一般用0F表示,而擴展分區用05表示。
3F823E00 這4個位元組表示下一個分區的起始磁區,低位元在前高位在後3E823F寫成
41A71502 這4個位元組表示擴展DOS分區的硬碟大小。
3.2.2.作業系統引導磁區
DBR(Dos Boot Record)即作業系統引導磁區,通常位於硬碟的1磁軌0柱面1磁區(這是對於DOS來說的,對於那些以多重開機方式啟動的系統則位於相應的主要磁碟分割/擴展分區的第一個磁區),是作業系統可直接訪問的第一個磁區,它也包括一個引導程式和一個被稱為BPB(BIOS Parameter Block)的本分區參數記錄表。其實每個邏輯分區都有一個DBR,其參數視分區的大小、作業系統的類別而有所不同。引導程式的主要任務是判斷本分區根目錄前兩個檔是否為作業系統的引導檔(例如MSDOS或者起源於MSDOS的Win9x/Me的IO.SYS和MSDOS.SYS)。如是,就把第一個檔讀入記憶體,並把控制權交予該檔。BPB參數塊記錄著本分區的起始磁區、結束磁區、檔存儲格式、硬碟介質描述符、根目錄大小、FAT個數、分配單元(Allocation Unit,以前也稱之為簇)的大小等重要參數。DBR由高級格式化程式產生(例如DOS的Format.com)。1面0柱1扇(KVFIX在63磁區,)也成引導區或BOOT區。參看下圖。
圖3-5
上圖為FAT32位的引導區。詳細介紹:
EB5890 這3個位元組為跳轉指令,跳轉到引導代碼;4D5357494E342E31 這8個位元組為廠商表示和DOS版本號或OEM版本號資訊
0002 這兩個位元組表示硬碟每磁區的位元組數,每磁區位元組數為512,那麼十進制為0200,低位元在前高位在後為0020。
08 該位元組為每個簇的磁區數(目錄磁區數);
2000 這兩個位元組表示為保留磁區數,也就是說從引導區到第一個檔案配置表之間的磁區數目,在此為32個磁區換算十六進位為0020,低位元在前高位在後為2000;
02 該位元組為檔案配置表的份數,
0000 根目錄項數(早期DOS版本,FAT16允許最大目錄項數512,現在不用了)
0000 磁區總數,小於32MB時;否則不用。
F8 該位元組表示磁片介質,硬碟用F8表示。
0000 這兩個位元組表示FAT16位元的檔案配置表的長度,如果是FAT32位此處為空,
3F00 表示每磁軌磁區數目,每磁軌磁區為63那麼十進位為3F。(低位元在前高位在後)
FF00 表示硬碟的磁頭數目,255十進位為FF,低位元在前高位在後為FF00;
3F000000 表示為硬碟的隱含磁區,也就是說分區表到引導區的磁區數目;
00823E00 表示本分區大小
990F0000 表示檔案配置表的長度,FAT32位。
02000000 為根目錄所在簇數,一般為第2簇,為00000002h,字組內前後位(byte)交換得02000000,所以此處為"02000000";
0100 為檔案系統資訊磁區,此檔案系統資訊磁區為1磁區,為0001h,字組內前後位(byte)顛倒得0100,所以此處為"0100";
0600 為系統引導磁區數目,FAT32位元的系統引導磁區有7個磁區,即0至6為0006h,字組內前後位(byte)顛倒得0600,所以此處為"0600";
80 為磁片編號(第一個硬碟為80h);
"29"以後為擴展的引導磁區特徵碼及系統安裝序號等,這部份可用標準的硬碟照搬過來。
3.2.3.檔案配置表
FAT(File Allocation Table)即檔案配置表,是DOS/Win9x系統的檔定址系統,為了資料安全起見,FAT一般做兩個,第二FAT為第一FAT的備份,FAT區緊接在DBR之後,其大小由本分區的大小及檔分配單元的大小決定。關於FAT的格式歷來有很多選擇,Microsoft的DOS及Windows採用我們所熟悉的FAT12、FAT16和FAT32格式,但除此以外並非沒有其它格式的FAT,像Windows NT、OS/2、UNIX/Linux、Novell等都有自己的檔管理方式。
3.2.4.目錄區
DIR是Directory即根目錄區的簡寫,DIR緊接在第二FAT表之後,只有FAT還不能定位檔在磁片中的位置,FAT還必須和DIR配合才能準確定位檔的位置。DIR記錄著每個檔(目錄)的起始單元(這是最重要的)、檔的屬性等。定位檔位置時,作業系統根據DIR中的起始單元,結合FAT表就可以知道檔在磁片的具體位置及大小了。在DIR區之後,才是真正意義上的資料存儲區,即DATA區。
3.2.5.數據區
DATA雖然佔據了硬碟的絕大部分空間,但沒有了前面的各部分,它對於我們來說,也只能是一些枯燥的二進位碼,沒有任何意義。在這裡有一點要說明的是,我們通常所說的
格式化程式(指高級格式化,例如DOS下的Format程式),並沒有把DATA區的資料清除,只是重寫了FAT表而已,至於分區硬碟,也只是修改了MBR和DBR,絕大部分的DATA區的資料並沒有被改變
3.3.硬碟分區方式
我們平時說到的分區概念,不外乎三種:主要磁碟分割、擴展分區和邏輯分區。
主要磁碟分割是一個比較單純的分區,通常位於硬碟的最前面一塊區域中,構成邏輯C磁片。
在主要磁碟分割中,不允許再建立其它邏輯磁片。擴展分區的概念則比較複雜,也是造成分區和邏輯磁片混淆的主要原因。由於硬碟僅僅為分區表保留了64個位元組的存儲空間,而每個分區的參數佔據16個位元組,故主引導磁區中總計可以存儲4個分區的資料。作業系統只允許存儲4個分區的資料,如果說邏輯磁片就是分區,則系統最多只允許4個邏輯磁片。對於具體的應用,4個邏輯磁片往往不能滿足實際需求。為了建立更多的邏輯磁片供作業系統使用,系統引入了擴展分區的概念。
所謂擴展分區,嚴格地講它不是一個實際意義的分區,它僅僅是一個指向下一個分區的指標,這種指標結構將形成一個單向鏈表。這樣在主引導磁區中除了主要磁碟分割外,僅需要存儲一個被稱為擴展分區的分區資料,通過這個擴展分區的資料可以找到下一個分區(實際上也就是下一個邏輯磁片)的起始位置,以此起始位置類推可以找到所有的分區。無論系統中建立多少個邏輯磁片,在主引導磁區中通過一個擴展分區參數即可逐個找到每一個邏輯磁片。需要特別注意的是,由於主要磁碟分割之後的各個分區是通過一種單向鏈表的結構來實現連結的,因此,若單向鏈表發生問題,將導致邏輯磁片的丟失。
3.4.資料存儲原理
既然要進行資料的恢復,當然資料的存儲原理我們不能不提,在這之中,我們還要介紹一下資料的刪除和硬碟的格式化相關問題。
.. 文件的讀取
作業系統從目錄區中讀取檔資訊(包括檔案名、尾碼名、檔大小、修改日期和檔在資料區保存的第一個簇的簇號),我們這裡假設第一個簇號是0023。 作業系統從0023簇讀取相應的資料,然後再找到FAT的0023單元,如果內容是檔結束標誌(FF),則表示檔結束,否則內容保存資料的下一個簇的簇號,這樣重複下去直到遇到檔結束標誌。
.. 文件的寫入
當我們要保存檔時,作業系統首先在DIR區中找到空區寫入檔案名、大小和創建時間等相應資訊,然後在Data區找到閒置空間將檔保存,並將Data區的第一個簇寫入DIR區,其餘的動作和上邊的讀取動作差不多。
.. 檔的刪除
看了前面的檔的讀取和寫入,你可能沒有往下邊繼續看的信心了,不過放心,Win9x的文件刪除工作卻是很簡單的,簡單到只在目錄區做了一點小改動――將目錄區的檔的第一個字元改成了E5就表示將改檔刪除了。
.. Fdisk和Format的一點小說明
和檔的刪除類似,利用Fdisk刪除再建立分區和利用Format格式化邏輯磁片(假設你格式化的時候並沒有使用/U這個無條件格式化參數)都沒有將資料從DATA區直接刪除,前者只是改變了分區表,後者只是修改了FAT表,因此被誤刪除的分區和誤格式化的硬碟完全有可能恢復。
如下為FAT16位:
如下為FAT32位:
轉自:http://bbs.intohard.com/index.php
0 意見: