?

重建GPT分區與NTFS_DBR的研究

2020-04-15 02:59陳培德吳建平王麗清朱辰龍
計算機技術與發展 2020年2期
關鍵詞:扇區磁盤字節

陳培德,吳建平,王麗清,朱辰龍,鄧 劍

(1.云南省電子計算中心,云南 昆明 650223;2.云南大學 信息學院,云南 昆明 650223)

0 引 言

GPT是GUID partition table的縮寫,其含義是“全局唯一標識磁盤分區表”[1]。它是Windows Server 2003中的一種新型磁盤架構,是一種基于Itanium計算機中的可擴展固件接口使用的磁盤分區架構[1]。GPT的出現替代了舊式的MBR(master boot record)[2-3],解決了MBR分區表不支持容量大于2 TB分區的問題[4]。

而NTFS文件系統則是Windows操作系統重要的組成部分,但是由于計算機病毒的破壞、掉電、用戶誤Ghost、GPT分區至MBR分區誤轉等各種原因,導致GPT分區表被破壞的情況時有發生。當GPT分區表被破壞后,用戶通過查找的方式獲得GPT分區中各卷的容量,并通過重建GPT分區的來恢復。

然而在GPT分區的硬盤中,當GPT分區表、NTFS_DBR和NTFS_DBR備份同時被破壞后,恢復數據的難度系數也就更大。鑒于目前國內尚未有人展開同時恢復GPT分區、NTFS_DBR和NTFS_DBR備份的相關研究工作,文中針對這種情況進行了開創性的探索與研究。

1 GPT磁盤結構

一個GPT磁盤主要由保護的MBR、GPT頭、GPT分區表、GPT分區區域等6個部分組成,大致結構如圖1所示,6個部分說明如下:

在圖1中,n為GPT磁盤的總扇區數,GPT磁盤的扇區號范圍為0 ~(n-1)。

第1部分為保護MBR,存儲在整個GPT磁盤的0號扇區,該扇區由磁盤簽名[5]、1個MBR分區表和結束標志3個部分組成。其中,MBR分區表固定如下:

00 00 02 00 EE FF FF FF 01 00 00 00 FF FF FF FF

從MBR分區表可知:分區標志為0XEE,而相對扇區為1(存儲形式為01 00 00 00),總扇區數為4 294 967 295(存儲形式為FF FF FF FF),也就是該分區總數的最大值[6]。也就是說,該磁盤已經沒有剩余空間再進行MBR分區,即該磁盤已經成為GPT磁盤。

第2部分為GPT頭,存儲在整個GPT磁盤的1號扇區[7],在1號扇區中,只使用了92個字節;主要描述了GPT頭簽名、版本號、GPT頭所占字節數(注:一般為92)、GPT頭CRC校驗和、GPT頭所在扇區號(注:一般為1)、GPT頭備份所在扇區號、GPT分區區域開始扇區號(注:一般為34)、GPT分區區域結束扇區號、GPT磁盤的GUID、GPT分區表開始扇區號、每個GPT分區表所占字節數(注:一般為128)、GPT分區表的個數(注:固定為128)、GPT分區表的CRC校驗和等信息。

第3部分為GPT分區表,存儲在GPT磁盤的2~33號扇區,共占用32個扇區[8];從GPT頭可知,每個GPT分區表占128字節[9],所以,在這32個扇區中最多可以存放128個GPT分區表[9],而每個GPT分區表管理一個分區;在每個分區表中記錄著該分區的開始扇區號、結束扇區號、分區類型的GUID、分區名、分區屬性和分區GUID。第1個分區表為系統保留,因此,用戶在GPT磁盤上最多還可以再建立127個分區。

第4部分為GPT分區區域,是GPT磁盤中最大的一塊區域[8],也是GPT磁盤最重要的組成部分;位于GPT磁盤的中間位置,其開始扇區號和結束扇區號在GPT頭已定義。一般情況下,該區域的開始扇區號為34,而結束扇區號為GPT磁盤總扇區數減去35。該區域由該GPT磁盤中各個具體的分區組成,各分區的開始扇區號和結束扇區號在各分區表中均有定義。

第5部分為GPT分區表備份,存儲在GPT磁盤的倒數33號扇區~倒數2號扇區,也是占用32個扇區[8]。是第3部分,即GPT磁盤的2 ~ 33號扇區的備份。

第6部分為GPT頭備份,存儲在GPT磁盤的倒數2號扇區[10],但該扇區不是GPT頭的簡單復制。在這個扇區中,也是使用了92個字節;主要描述了GPT頭簽名、版本號、GPT頭所占字節數(注:一般為92)、GPT頭CRC校驗和、GPT頭備份所在扇區號、GPT頭所在扇區號(注:一般為1)、GPT分區區域開始扇區號(注:一般為34)、GPT分區區域結束扇區號、GPT磁盤的GUID、GPT分區表開始扇區號、每個GPT分區表所占字節數(注:一般為128)、GPT分區表的個數(注:固定為128)、GPT分區表的CRC校驗和等信息。

2 NTFS文件系統

當用戶將硬盤中的一個分區采用NTFS文件系統對其格式化后,在該分區上就建立了一個NTFS文件系統的結構,NTFS文件系統的結構大致如圖2所示。

元文件SBOOT…某元文件…數據或文件某元文件數據或文件…DBR備份

圖2 某NTFS文件系統的總體布局

從圖2可知,NTFS文件系統主要由元文件、文件夾、數據和其他用戶文件等組成[11-12]。其中:一些信息對于NTFS文件系統來說是非常重要的,存儲這些重要信息所對應的文件就是元文件[13]。元文件是NTFS系統最重要的組成部分,它主要負責管理整個NTFS文件系統。在NTFS文件系統中,元文件主要有$MFT、$MFTMirr、$LogFile、$Volume、$Attrdef、$Root、$Bitmap、$Boot等。

其中:元文件$Boot在NTFS卷中的位置是固定不變的,位于NTFS卷的0號簇[11],該元文件所占簇數與每個簇的扇區數有關,NTFS_DBR則是元文件$Boot的重要組成部分,位于NTFS卷的0號扇區。由于NTFS_DBR比較重要,所以,在NTFS卷的最后一個扇區存儲著NFTS_DBR備份。如果NTFS_DBR被破壞,可以通過NTFS_DBR備份來恢復;但是如果NTFS_DBR和NTFS_DBR備份同時被破壞,只有通過計算NTFS_DBR中BPB參數的形式來恢復。

3 實驗環境與制作實驗素材

(1)實驗環境。

操作系統:Windows 7。

硬盤:虛擬硬盤。

數據恢復軟件:WinHex 15.08。

(2)制作實驗素材的步驟。

步驟1:在Windows 7桌面上,右擊“計算機”圖標,從彈出的快捷菜單中選擇“管理”,出現“計算機管理”窗口,在導航窗格中選擇“存儲→磁盤管理”,選擇菜單欄上的“操作→創建VHD”后,在“創建和附加虛擬硬盤”窗口中指定虛擬硬盤位置為G盤的根目錄,虛擬硬盤文件名為a2.vhd,虛擬硬盤大小為2 GB。

步驟2:選擇菜單欄上的“操作→附加VHD”后,附加a2.vhd文件為虛擬磁盤1,將光標移動到磁盤1處,將磁盤1初始化成GPT磁盤。

步驟3:在磁盤1上建立1個分區,分區大小為450 MB,文件系統選擇NTFS,將其進行格式化。

步驟4:重復步驟3共計3次,在磁盤1上依次再建立3個分區,分區大小分別為390 MB、630 MB和510 MB文件。

完成以上操作后,在磁盤1中4個分區對應4個邏輯盤情況如下:

序號盤符文件系統容量(單位:MB)1H盤 NTFS4502I盤 NTFS3903J盤 NTFS6304K盤 NTFS510

分別復制一定數量的文件夾和文件到4個邏輯盤中;并記錄下4個邏輯盤的NTFS_DBR和NTFS_DBR備份所在扇區號。

分離虛擬磁盤1,使用Winhex軟件打開a2.vhd文件;將4個邏輯盤的NTFS_DBR和NTFS_DBR備份所在扇區號填充為00。

將a2.vhd文件附加為虛擬磁盤1,并刪除4個邏輯盤,然后再轉換成MBR磁盤。

至此,實驗素材已制作完成。

4 重建GPT分區

4.1 重建GPT分區的基本思路與方法

重建GPT分區的基本思路:分別計算H盤、I盤、J盤和K盤的容量;重建GPT分區的方法如下:

(1)通過NTFS元文件$MFT或者元文件$MFTMirr的0號記錄80H非常駐屬性計算出NTFS文件系統每個簇的扇區數。

(2)通過NTFS元文件$MFT的8號記錄80H屬性計算NTFS總簇數。

(3)通過NTFS卷總簇數和每個簇的扇區數,計算NTFS卷的容量。

4.2 重建GPT分區的操作步驟

重建GPT分區操作步驟如下:

步驟1:啟動WinHex軟件。

步驟2:打開a2.vhd文件,并映象為磁盤。

步驟3:查找元文件$MFT或者$MFTMirr的0號記錄,在65 680號扇區找到,如圖3所示。

步驟4:計算每個簇的扇區數。

從圖3可知,NTFS文件系統分配給元文件$MFT的空間為524 288字節,占512個簇;在元文件$MFT或者$MFTMirr的0號記錄80H屬性中的存儲形式分別為“00 00 08 00 00 00 00 00”和“00 02”。

根據元文件NTFS文件系統分配給元文件$MFT的空間和所占簇數,可以計算出第1個卷(即H盤)每個簇的扇區數。

圖3 第1個NTFS元文件$MFT或者$MFTMirr的0號記錄80H屬性

NTFS文件系統分配給元文件$MFT的空間=每個簇的扇區數×所占簇數×512字節/簇

524 288字節=每個簇的扇區數×512簇×

512字節/簇

每個簇的扇區數=2

步驟5:查找元文件$MFT的8號記錄,在372 880號扇區找到,如圖4所示。

從圖4可知,NTFS文件系統的最后一個簇號為460 799,其存儲形式為“FF 07 07”。

步驟6:計算NTFS卷的容量。

NTFS文件系統的簇號范圍為0~460 799,即總簇數為460 800。

圖4 第1個NTFS元文件$MFT的8號記錄80H屬性

步驟7:重復步驟3至步驟5,可以計算出第2個(即I盤)至第4個(即K盤)卷中NTFS系統的每個簇扇區數和容量。在GPT磁盤中,4個卷的基本情況如下:

序號每個簇的扇區數卷的容量(單位:MB) 12450212839033263042510

NTFS卷的容量=總簇數×每個簇的扇區數×

512字節/扇區÷1 024÷1 024 MB=

460 800×2×512÷1 024÷1 024 MB=

450 MB步驟8:退出WinHex。

步驟9:進入“計算機”管理窗口,選擇菜單欄上的“操作→附加VHD”后,附加G盤根目錄的a2.vhd文件為虛擬磁盤1,并轉換成GPT磁盤。

步驟10:在磁盤1上依次建立4個GPT分區,磁盤1中4個分區依次對應4個卷的容量分別為450 MB、390 MB、630 MB和510 MB。

注:千萬不要對4個卷進行(快)格式化操作。

至此,4個卷的GPT分區已經重建完成。

步驟11:分離a2.vhd,使用WinHex打開a2.vhd,并映象為磁盤,從主窗口可以得到分區2、分區3、分區4和分區5的開始扇區分別為65 664、987 264、1 785 984和3 076 224(注:分區1為微軟保留分區)。

5 重建NTFS_DBR

5.1 重建NTFS_DBR的基本思路與方法

重建NTFS_DBR的基本思路:計算NTFS_DBR中的每個簇的扇區數、隱藏扇區數、總扇區數等七個BPB參數?;痉椒ㄈ缦拢?/p>

(1)每個簇的扇區數:通過NTFS元文件$MFT或者元文件$MFTMirr的0號記錄80H非常駐屬性計算出NTFS文件系統每個簇的扇區數。

(2)隱藏扇區數:通過NTFS_DBR所在扇區號獲得,即建立GPT分區后,每個卷在整個硬盤中的開始扇區號。

注:系統對該參數的正確性不進行校驗,也可以不計算該參數,重建NTFS_DBR中沒有計算該參數。

(3)總扇區數:總容量轉換為扇區數后減1。

(4)元文件$MFT的開始簇號:從元文件$MFT或$MFTMirr的0號記錄80H屬性數據運行列表中的開始簇號獲得。

(5)元文件$MFTMirr的開始簇號:從元文件$MFT或$MFTMirr的1號記錄80H屬性數據運行列表中的開始簇號獲得。

(6)元文件$MFT每條記錄大小描述和索引節點大小描述[1]:以每個簇的扇區數為依據通過查詢表1獲得,見表1。

表1 每個簇的扇區數與$MFT記錄大小、索引節點大小對應表

將同一版本的NTFS_DBR復制到每個NTFS_DBR所在扇區號,并修改每個簇的扇區數、隱藏扇區數等這七參數[14]。

5.2 重建NTFS_DBR的操作步驟

重建NTFS_DBR操作步驟如下:

步驟1:啟動WinHex軟件。

步驟2:打開a2.vhd文件,并映象為磁盤。

步驟3:查找元文件$MFT或者$MFTMirr的0號記錄,在65680號扇區找到,如圖3所示。

步驟4:計算每個簇的扇區數。

NTFS文件系統分配給元文件$MFT的空間=每個簇的扇區數×所占簇數×512字節/簇

524 288字節=每個簇的扇區數×512簇×

512字節/簇

每個簇的扇區數=2

步驟5:計算總扇區數。

總扇區數=總容量×1 024×1 024÷512-1=

450×1 024×1 024÷512-1=

921 599

步驟6:元文件$MFT的開始簇號:從圖3可知,元文件$MFT的開始簇號為153 600(注:存儲形式為00 58 02)。

步驟7:元文件$MFTMirr的開始簇號:將光標移動到65 682號扇區,即元文件$MFT或$MFTMirr的1號記錄開始扇區號,可以得到元文件$MFTMirr的開始簇號為8(注:存儲形式為08)。

步驟8:以每個簇的扇區數為依據,通過查詢表1獲得元文件$MFT每條記錄大小描述和索引節點大小描述。

第1個NTFS文件系統每個簇的扇區數為2,從表1可以查找到,元文件$MFT每條記錄大小描述為1,每個索引節點大小描述為4。

步驟9:綜合步驟4至步驟8,重建第1個NTFS_DBR需要計算的BPB參數,如下所示。

字節偏移字節數含義值0X0D1每個簇的扇區數20X288扇區總數921 5990X308$MFT的開始簇號153 6000X388$MFTMirr的開始簇號80X401每個$MFT記錄大小描述1個簇0X441每個索引節點大小描述4個簇

轉換成在NTFS_DBR中的存儲形式,如下所示:

字節偏移含義在NTFS_DBR中的存儲形式0X0D每個簇的扇區數020X28扇區總數FF 0F 0E 00 00 00 00 000X30$MFT的開始簇號00 58 02 00 00 00 00 000X38$MFTMirr的開始簇號08 00 00 00 00 00 00 000X40每個$MFT記錄大小描述010X44每個索引節點大小描述04

步驟10:重復步驟4至步驟9,重建第2個NTFS_DBR需要計算的BPB參數,如下所示:

字節偏移字節數含義值0X0D1每個簇的扇區數1280X288扇區總數798 7190X308$MFT的開始簇號2 0800X388$MFTMirr的開始簇號10X401每個$MFT記錄大小描述1 024字節0X441每個索引節點大小描述4 096字節

轉換成在NTFS_DBR中的存儲形式,如下所示:

字節偏移含義在NTFS_DBR中的存儲形式0X0D每個簇的扇區數800X28扇區總數FF2F 0C 00 00 00 00 000X30$MFT的開始簇號20 08 00 00 00 00 00 000X38$MFTMirr的開始簇號01 00 00 00 00 00 00 000X40每個$MFT記錄大小描述F60X44每個索引節點大小描述F4

步驟11:重復步驟4至步驟9,重建第3個NTFS_DBR需要計算的BPB參數,如下所示:

字節偏移字節數含義值0X0D1每個簇的扇區數320X288扇區總數1 290 2390X308$MFT的開始簇號13 4400X388$MFTMirr的開始簇號10X401每個$MFT記錄大小描述1 024字節0X441每個索引節點大小描述4 096字節

轉換成在NTFS_DBR中的存儲形式,如下所示:

字節偏移含義在NTFS_DBR中的存儲形式0X0D每個簇的扇區數200X28扇區總數FF AF 13 00 00 00 00 000X30$MFT的開始簇號80 34 00 00 00 00 00 000X38$MFTMirr的開始簇號01 00 00 00 00 00 00 000X40每個$MFT記錄大小描述F60X44每個索引節點大小描述F4

步驟12:重復步驟4至步驟9,重建第4個NTFS_DBR需要計算的BPB參數,如下所示:

字節偏移字節數含義值0X0D1每個簇的扇區數20X288扇區總數1 044 4790X308$MFT的開始簇號1740800X388$MFTMirr的開始簇號80X401每個$MFT記錄大小描述1簇0X441每個索引節點大小描述4簇

轉換成在NTFS_DBR中的存儲形式,如下所示:

字節偏移含義在NTFS_DBR中的存儲形式0X0D每個簇的扇區數020X28扇區總數FF EF 0F 00 00 00 00 000X30$MFT的開始簇號00 A8 02 00 00 00 00 000X38$MFTMirr的開始簇號08 00 00 00 00 00 00 000X40每個$MFT記錄大小描述010X44每個索引節點大小描述04

步驟13:將同一版本NTFS_DBR復制到65 664號扇區,并修改第1個NTFS_DBR中的BPB參數并存盤,如圖5所示,至此,第1個卷的NTFS_DBR已經恢復完成。

圖5 恢復第1個卷的NTFS_DBR

步驟14:將同一版本NTFS_DBR復制到987 264號扇區,修改第2個NTFS_DBR中的BPB參數;將同一版本NTFS_DBR復制到1 785 984號扇區,并修改第3個NTFS_DBR中的BPB參數;將同一版本NTFS_DBR復制到3 076 224號扇區,并修改第4個NTFS_DBR中的BPB參數[14]。

至此,第2~4個卷的NTFS_DBR已經恢復完成。

步驟15:通過NTFS_DBR恢復NTFS_DBR備份。由于NTFS_DBR備份位于每個NTFS卷的最后一個扇區[15],4個NTFS_DBR備份依次分別位于987 263、1 785 983、3 076 223和4 120 703號扇區,分別將65 664號扇區復制到987 263號扇區,將987 264號扇區復制到1 785 983號扇區,將1 785 984號扇區復制到3 076 223號扇區,將3 076 224號扇區復制到4 120 703號扇區。

注:由于NTFS文件系統對NTFS_DBR備份是否存在并不進行校驗,步驟15也可以省略。

6 結束語

由于計算機病毒的破壞、用戶使用Ghost軟件對GPT磁盤誤操作、誤將GPT磁盤轉換為MBR磁盤、突然掉電等因素等,導致GPT分區、NTFS_DBR和NTFS_DBR備份同時被破壞的現象時有發生。通過實驗的方式,依據NTFS文件系統元文件$MFT的0號記錄、1號記錄和6號記錄的80H屬性相關參數,提出重建GPT分區、NTFS_DBR和NTFS_DBR備份的基本思路、方法與步驟。作者在該實驗中過程中,只使用了15分鐘的時間,就恢復了GPT磁盤中的4個邏輯盤中的全部文件夾和文件。實踐證明:該方法具有方便、快捷、簡單實用的特點。

猜你喜歡
扇區磁盤字節
No.11 字節跳動計劃自研芯片:僅供內部使用
MBR磁盤轉換為GPT磁盤的研究與實現
分階段調整增加扇區通行能力策略
No.8 字節跳動將推出獨立出口電商APP
它的好 它的壞 詳解動態磁盤
解決Windows磁盤簽名沖突
淺述“4K對齊”及其發展前景
U盤故障排除經驗談
Windows系統下動態磁盤卷的分析與研究
克隆硬盤很簡單
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合