想必大家都有過資料丟失的糟糕經曆,費盡心力收集的資料,由於病毒破壞、誤 刪除、誤格式化、分區軟體誤操作、存放裝置損壞等原因而毀之一旦,真是令人痛心。其實我們只要靜下心來學習一點資料恢複方面的淺近知識,遇上這樣的倒黴 事,只要不是嚴重的硬體損壞,就能挽回一部分資料,運氣不錯的話,找回全部資料也是可能的。
討論資料恢複,我們先來看看最簡單的情況:單純的硬碟分區表損毀(非硬體損壞),現象——分區丟失。要重建硬碟分區表,就得搞清楚硬碟分區是如何組織的,下面先介紹相關的背景知識。
一、硬碟檔案系統定址方式:CHS和LBA
1.CHS定址方式
CHS是Cylinder(柱面)/Head(磁頭)/Sector(扇區)的縮寫。
為什麼會有這些參數,這要從硬碟的結構說起。硬碟通常是由幾個碟片疊加在一起,每個盤面由一個磁頭訪問,盤面又劃分為許多同心圓環,這就是磁軌,每條磁軌又劃分為許多區段,每個區段就稱為一個扇區。硬碟的儲存單位是扇區,資料就儲存在扇區裡。
由此產生了所謂的3D參數(Disk Geometry),即磁頭數(Heads)、柱面數(Cylinders,所謂柱面是由半徑相同分屬不同盤面的若干磁軌組成)、扇區數(Sectors),以及相應的定址方式。見附圖:
在硬碟檔案系統中規定:
磁頭數(Heads) 表示硬碟總共有幾個磁頭,也就是有幾面碟片,
最大為 255 (用 8 個二進位位儲存);
柱面數(Cylinders) 表示硬碟每一面碟片上有幾條磁軌,
最大為 1024(用 10 個二進位位儲存);
扇區數(Sectors) 表示每一條磁軌上有幾個扇區,
最大為 63 (用 6個二進位位儲存)。
每個扇區一般是 512個位元組,理論上講這不是必須的,但好象沒有取別的值的。
所以CHS 方式最大定址範圍為:
255 * 1024 * 63 * 512 / 1000 / 1000 / 1000 = 8.4 GB。
在 CHS 定址方式中,磁頭,柱面,扇區的取值範圍分別為
0到 Heads - 1, 0到 Cylinders - 1,1到Sectors (注意是從1開始)。
當硬碟需要讀取某一扇區的資料時,先確定柱面號,再確定磁軌(磁頭)號,逐級縮小範圍,最後確定扇區號,這樣就完成了定址過程。只要確定CHS參數,硬碟就指定相應的磁頭到相應的磁軌和扇區去讀寫資料。
需 要說明的是所謂的CHS參數與硬碟真實的柱面號、磁頭號、扇區號並不是一一對應的,一般的硬碟磁頭也就有幾個,不可能到255之多。物理上的柱面號、磁頭 號、扇區號與檔案系統中的CHS 參數存在一定的轉換關係,這由硬碟的韌體去完成,我們不必關心,在這裡,我們只關注檔案系統中的CHS 參數。
2.LBA定址方式
隨 著硬碟技術的不斷髮展,其容量也不斷增大,現在的硬碟早就超過了8G的容量,在硬碟檔案系統中採用CHS定址方式已經滿足不了需要了,那麼在現代硬碟的文 件系統中又是如何定址的呢?現在的硬碟檔案系統基本都採用線性定址的方式,即把硬碟上所有可用扇區(假定數目為N)從0到N - 1按序編號,硬碟讀寫資料時按扇區號定址,這就是LBA定址方式(logic block address),扇區編號也就是該扇區的LBA地址。
儘管LBA已經成為硬碟檔案系統的主流定址方式(小於8.4G的分區仍需在分區表中 標註CHS 參數,在大於8.4G的分區,CHS 參數就沒有什麼意義了,此時須用LBA 方式定址),但在Windows 系統中整個硬碟的邏輯結構仍然是以傳統上的CHS 方式組織起來的,硬碟檔案系統是由整數柱面組成。現代硬碟檔案系統的柱面數已經突破了1024的限制,最大磁頭數和扇區數仍為255和63。相對於LBA 來說,CHS模式較為直觀,所以磁碟編輯器通常採用CHS模式來作為磁碟邏輯結構劃分方式。
二、MBR(Master Boot Record)、DPT(Disk Partition Table)、
主要磁碟分割(Primary Partition)、擴充分區(Extended Partition)
和邏輯分區(Logical Partition)
硬碟的第一個扇區被稱為主開機磁區,習慣上稱為MBR,CHS參數為0,0,1,LBA參數為0,它包含了硬碟引導程式和硬碟分區表(DPT),作用十分重要,如果MBR扇區受損,那麼系統就無法訪問這個磁碟了。
1.MBR引導程式概述
MBR扇區的512位元組資料中,前446位元組(0 to 0x1BD)存放硬碟引導程式碼。電腦從硬碟啟動時,系統從硬碟中首先讀取MBR引導代碼,其流程大致如下:
(1) 將程式碼由0:7C00H移動到0:0600H(注,BIOS把MBR放在0:7C00H處)
(2) 搜尋可引導分區,即80H標誌
成功:goto 3
失敗:跳入ROM BASIC
無效分區表:goto 5
(3) 讀開機磁區
失敗:goto 5
成功:goto 4
(4) 驗證開機磁區最後是否為0xAA55H
失敗:goto 5
成功:goto 6
(5) 列印錯誤進入無窮迴圈
(6) 跳到0:7C00H進行下一步啟動工作
然後MBR引導程式就把系統控制權交給作業系統引導程式。
如果MBR損壞硬碟無法訪問,可在DOS下輸入:
Fdisk /cmbr X(X = 1,第一塊硬碟;X = 2,第二塊硬碟),重寫主引導記錄。
2.硬碟分區表(DPT)
MBR扇區的最後66位元組除去末尾的標誌0xAA55H(所有開機磁區的標誌。由於磁碟編輯器中的顯示內容是從低址到高址排列的,所以AA55顯示為55AA)外,剩餘的64位元組被稱為硬碟分區表。硬碟分區表包含四個項目,每項16位元組,代表四個分區的參數。分區表項的各位元組含義如下:
位移 意義
0 自舉標誌(80為使用中的磁碟分割,00為非使用中的磁碟分割)
1 起始磁頭號H
2 起始扇區號S
3 起始柱面號CYL(CYL的高2位存放在S位元組的高2位)
4 分區格式標誌(05:DOS Extended;06:BIGDOS FAT16;
07:NTFS;0B:FAT32;
0C: FAT32(對INT 13H指令使用LBA);
0E: FAT16(對INT 13H指令使用LBA);
0F: Extended(對INT 13H指令使用LBA);
82:LINUX Swap;83:LINUX;85:LINUX Extended)
5 終止磁頭號H
6 終止扇區號S
7 終止柱面號CYL
8-11 本分區之前已用扇區數(即該分區的LBA地址,
當分區表屬於擴充分區中的記錄時,該值為相對擴充分區首扇區的位置)
12-15 本分區扇區總數
3.主要磁碟分割(Primary Partition)、擴充分區(Extended Partition)
和邏輯分區(Logical Partition)
DPT中可定義的分區包括主要磁碟分割和擴充分區。所謂主要磁碟分割,是指DPT中包含的能夠被系統使用的磁碟分割,它是可以設定為活動的,即可以引導作業系統,一個硬碟只能有一個使用中的磁碟分割;而擴充分區並不能被系統使用,它的作用是突破DPT只能定義4個分區的限制。
其做法是:讓DPT在定義主要磁碟分割後,將多餘容量定義為擴充分區,指定該分區的起始位置,根據起始位置指向硬碟的某一扇區,稱作虛擬MBR,在其中定義下一個分區表。如果只有一個分區,就定義該分區,然後結束;如果不止一個分區,就定義一個基本分區和一個擴充分區,擴充分區再指向下一個分區表,在下一個分區表中繼續定義分區,直至結束。這樣就形成一個分區鏈,可以描述所有的分區。
任何分區表中只能有一個擴充分區,擴充分區不能引導作業系統。位於擴充分區中的可被系統使用的磁碟分割稱為邏輯分區,邏輯分區不能設定為活動。由於定義了擴充分區和邏輯分區的概念,windows使用的磁碟盤符可以一直到Z,見。
CTRL+Mouse wheel to zoom in/out" nclick="if(!this.resized) {return true;} else {window.open('http://benyouhui.it168.com/attachments/month_0609/t9bH+LHt_TBJndQ9RlDhS.jpg');}" nmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new window/nCTRL+Mouse wheel to zoom in/out';}" nmousewheel="return imgzoom(this);" title="點擊圖片可在新視窗開啟" style="cursor: pointer;">
三、硬碟分區結構執行個體分析
使 用磁碟編輯器可以直接存取硬碟資料,一般磁碟編輯器都是以十六進位顯示資料。這裡推薦使用資料恢複領域內被廣泛使用的軟體WinHex,這個軟體能在 windows下直接讀寫磁碟扇區。開啟WinHex,點擊“工具”菜單,選擇“磁碟編輯器”-“物理媒介”-“HD0......”,這樣整個硬碟的數 據就以十六進位的方式顯示於編輯框之內。本文使用的編輯器是UltraEdit,下面就對本人的硬碟分區情況進行分析。
1.MBR扇區圖示
,MBR扇區的0~1bd區段是MBR引導代碼,
1be~1dd一共有32位元組代表兩個分區表項,末尾0xAA55H是開機磁區的標誌。
第一分區各項參數為:
80,01,01,00,0C,FE,FF,FF,3F,00,00,00,F8,93,32,02。
第一項80,代表該分區是活動的(可以引導作業系統);
起始位置是0柱面、1磁頭、1扇區;
0C代表該分區是FAT32格式;FE、FF、FF三項代表終止柱面磁頭扇區的序號,
由於該分區大於8G,所以它的CHS參數已經沒有意義;
3F,00,00,00是該分區首扇區的LBA地址,為0x3FH,等於63;
F8,93,32,02代表該分區的扇區數
(由於排列是從低址到高址,扇區數應該是0x23293F8H,為36869112個扇區)。
第二分區各項參數為:
00,00,C1,FF,0F,FE,FF,FF,37,94,32,02,49,E8,C9,04。
第一項00,代表該分區是非活動的;
起始CHS參數柱面號無效,磁頭號0,扇區號1;0F代表該分區是擴充分區;
37,94,32,02是該分區首扇區的LBA地址,為0x2329437H,等於36869175;
49,E8,C9,04代表該分區的扇區數,為0x4C9E849H,一共80341065個扇區。
2.擴充分區首扇區(虛擬MBR)圖示
(1)第一擴充分區首扇區(虛擬MBR)圖示
如前文所述,由於DPT只能記錄4個分區的資訊,windows通過擴充分區來記錄多於4個分區的資訊。DPT中的擴充分區稱為第一擴充分區,它的首扇區稱作虛擬MBR。
從樣本圖上可以看到擴充分區的首扇區之內沒有MBR引導代碼,只有分區表,一共有兩項記錄,表示一個邏輯分區和一個擴充分區。
第一分區各項參數:
00,01,C1,FF,0B,FE,FF,FF,3F,00,00,00,37,16,71,02。
第一項00,代表該分區是非活動的;
起始CHS參數柱面號無效,磁頭號1,扇區號1;0B代表該分區是FAT32檔案系統;
3F,00,00,00是該分區首扇區的LBA地址(相對第一擴充分區首扇區),為63;
37,16,71,02代表該分區的扇區數,一共40965687個扇區。
第二分區各項參數:
00,00,C1,FF,05,FE,FF,FF,76,16,71,02,D3,D1,58,02。
第一項00,代表該分區是非活動的;
起始CHS參數柱面號無效,磁頭號0,扇區號1;05代表該分區是擴充分區;
76,16,71,02是該分區首扇區的LBA地址(相對第一擴充分區首扇區);
D3,D1,58,02代表該分區的扇區數,一共39375315個扇區。
(2)第二擴充分區首扇區(虛擬MBR)圖示
,該擴充分區只包含一個邏輯分區,它的分區表各項參數如下:
00,01,C1,FF,07,FE,FF,FF,3F,00,00,00,94,D1,58,02
第一項00,代表該分區是非活動的;
起始CHS參數柱面號無效,磁頭號是1,扇區號是1;
07代表該分區是NTFS檔案系統;
3F,00,00,00是該分區首扇區的LBA地址(相對第二擴充分區首扇區),為63;
94,D1,58,02代表該分區的扇區數,一共39375252個扇區。
綜上所述,該硬碟的分區結構已經搞清楚了,它的主分區表中包括一個主要磁碟分割(活動的)和第一擴充分區;第一擴充分區中包含一個邏輯分區和第二擴充分區;第二擴充分區包含一個邏輯分區,。
3.主要磁碟分割和邏輯分區首扇區圖示
如前文所述,該硬碟一共有三個分區,C區為主要磁碟分割、FAT32格式,D區是邏輯分區、FAT32格式,E區是邏輯分區、NTFS格式。我們就來看看這三個分區的第一扇區各自都有什麼特點。
(1)C區首扇區圖示
C區首扇區結尾標誌是0xAA55H,CHS參數為0,1,1。
扇區第一行出現MSWIN4.1字樣(由於文本顯示不正確,“M”被省略掉了),
說明該分區是FAT32檔案系統,在位移52~59區段還有FAT32字樣。
C區首扇區內儲存著該分區的引導代碼,這略去不談,我們只關注1C~23欄位。
其中1C~1F欄位是3F,00,00,00,這是LBA地址,表示該分區之前有63個扇區;
20~23欄位是F8,93,32,02,是該分區的總扇區數。
以上這些資訊十分重要,對於我們下面手工恢複磁碟分割結構十分關鍵。
(2)D區首扇區圖示
D區首扇區結尾標誌是0xAA55H,CHS參數為X,1,1,扇區第一行出現MSDOS5.0字樣
(由於文本顯示的問題,“M”被省略掉了),
說明該分區是FAT32檔案系統,在位移52~59區段還有FAT32字樣。
1C~1F欄位是3F,00,00,00,這是D區的LBA地址,表示該分區之前有63個扇區
(相對於擴充分區首扇區而言),20~23欄位是37,16,71,02,是分區的總扇區數。
(3)E區首扇區圖示
E區首扇區結尾標誌是0xAA55,CHS參數為X,1,1,扇區第一行出現NTFS字樣
(由於文本顯示的問題,“N”被省略掉了),說明該分區是NTFS檔案系統。
28~2F欄位是93,D1,58,02,00,00,00,00,是E區可使用的總扇區數,
與第二擴充分區表中記錄的E區總扇區數相差1。為何相差1呢?那是因為NTFS
檔案系統的一個特性,它會把分區最後一個扇區用來儲存首扇區的備份,這個
扇區是保留的,不能被使用者使用。一般保留扇區數目為1,但也有大於1的情況,
這時NTFS分區首扇區中記錄的可用扇區數和分區表中記錄的總扇區數相差就不是1了。
4.總結
綜上所述,有幾點經驗值得重視:
(1)所有開機磁區的末尾都是0xAA55H。
(2)硬碟MBR扇區的CHS參數是0,0,1;
所有擴充分區首扇區的CHS參數是X,0,1;
主要磁碟分割、邏輯分區的首扇區CHS參數是X,1,1,
主要磁碟分割的CHS參數也可以是X,0,1,
主要磁碟分割、邏輯分區的首扇區也可能不是1號扇區,這個現象是存在的。
(3)所有擴充分區、主要磁碟分割、邏輯分區終止CHS參數都為:X,254,63。
綜合(2)、(3)來看,所有分區的大小都是整數柱面,不能跨柱面存在。
(4)所有擴充分區一般只包含分區表資料和0xAA55H標誌,一般不含引導代碼。
(5)第一擴充分區的LBA地址是相對於MBR而言,而之後的擴充分區的LBA地址計算
都是以第一擴充分區的位置為基準。
(6)主要磁碟分割、邏輯分區的首扇區常常帶有FAT32、NTFS之類的字串,
MSWIN4.1、MSDOS5.0是FAT32分區的標誌,MSDOS5.0還可能是
FAT16分區的標誌。引導扇中儲存有該分區的大小資料,對於NTFS
分區來說,引導扇中記錄的分區扇區數和分區表中記錄的資料相差個位元,
通常是1。這對我們找回丟失的分區十分關鍵。
(7)似乎第一擴充分區類型是0F,之後的擴充分區為05類型,主要磁碟分割為FAT32格式,
類型為0C,邏輯分區若為FAT32格式則為0B類型。
四、硬碟分區表恢複實戰經曆
1.使用工具軟體自動回復硬碟分區
這裡選用深山紅葉的硬碟分區表管理軟體進行操作,示範過程在虛擬機器中進行。
(1)首先查看一下硬碟的分區情況,有三個分區,C區是活動的主要磁碟分割,NTFS格式,D、E是邏輯分區,FAT32格式,為類比分區丟失的情況,用分區軟體把硬碟所有分區刪除,。
(2)開啟硬碟分區表修複與管理軟體Partition Table Doctor 3.0,點擊“操作”菜單,選“重建分區表”-互動模式,軟體自動搜尋,找到三個分區,。
(3)在[檔案] 功能表中選擇儲存,於是丟失的分區又回來了,。
能夠重建硬碟分區表的工具還有很多,比較常用的還有DiskGenius,使用方法類似。
2.使用磁碟編輯器手工恢複磁碟分區表
有 朋友可能會問,既然有軟體能自動回復,為何還要費時費力地手動恢複呢?其實手動恢複的過程雖然繁瑣,卻能讓我們對磁碟分割的結構有清楚的瞭解,再說軟體雖 好卻不夠智能,遇到比較複雜的情況就無能為力了,這時只能藉助磁碟編輯器手動恢複,我們只要瞭解了原理,在實際情況中就能遊刃有餘。
(1)開啟硬碟分區表修複與管理軟體Partition Table Doctor 3.0,點擊“扇區”-“編輯扇區”,彈出十六進位磁碟編輯器,首先顯示的是硬碟主開機磁區,CHS:0,0,1,。
從圖上可以看到,主分區表已經被清空,說明刪除分區的操作其實就是清除分區表中的相關項目,只要正確地填寫出分區表資料,那麼丟失的分區就找回來了。
(2)恢複C分區:
移動扇區至0,1,1位置,這是C區的首扇區。
從圖上可以看到該分區是NTFS系統,
大小是7F,E2,5D,00,實際大小還要再加上1,為80,E2,5D,00。
移動扇區至0,0,1位置,填寫1BE~1CD欄位。
由於該分區小於8G,所以CHS參數要填寫正確。
起始CHS參數是0,1,1,終止CHS參數是382,254,63。
終止柱面號可以這樣計算:
(終止柱面號 + 1)X 255 X 63 = 分區總扇區數 + 分區之前的總扇區數。
於是C分區的分區表參數如下:
80,01,01,00,07,FE,7F,7E,3F,00,00,00,80,E2,5D,00,
填寫完畢,儲存。
(3)恢複第一擴充分區:
第一擴充分區首扇區的LBA地址應為63 + C分區扇區總數,
為BF,E2,5D,00(6152895)。
起始CHS參數應為:383,0,1,終止CHS參數為1043,254,63
(此處柱面號大於1023,填寫分區表時按1023計)。
擴充分區大小為10618965個扇區,換算為十六進位為55,08,A2,00。
再移至硬碟主開機磁區,編輯1CE~1DD欄位,輸入:
00,00,41,7F,0F,FE,FF,FF,BF,E2,5D,00,55,08,A2,00,儲存。
(4)恢複D分區:
把磁碟編輯器移動至383,1,1扇區,這就是D區首扇區。
由圖可知該分區是FAT32格式,大小是80,E2,5D,00。
移動扇區至383,0,1位置,此處為第一擴充分區首扇區。先在末尾填上55AA標誌。
起始CHS參數為383,1,1,終止CHS參數為765,254,63。
於是D分區的分區表參數如下:
00,01,41,7F,0B,FE,BF,FD,3F,00,00,00,80,E2,5D,00,
填寫1BE~1CD欄位,儲存。
(5)恢複E分區:
第二擴充分區首扇區位於766,0,1;
LBA地址為D區扇區數 + 63,等於BF,E2,5D,00。
把磁碟編輯器的當前扇區移到這裡,發現分區表依然完好,。
這樣的話剩下的過程就很容易了,從分區表中可以獲知E區大小是57,25,44,00,
由此可知第二擴充分區大小為E區扇區數 + 63,等於96,25,44,00。
把磁碟編輯器移至383,0,1,即第一擴充分區首扇區,
編輯1CE~1DD:
00,00,81,FE,05,FE,FF,FF,BF,E2,5D,00,96,25,44,00,儲存。
至此大功告成,,丟失的分區已經全部找回。
以上便是我新近學到的磁碟分割恢複方面的一點入門知識,絕對業餘,不值高手一哂。辛苦整理成文,只是希望能對感興趣的新手朋友有所協助。