?

MBR磁盤轉換為GPT磁盤的研究與實現

2022-08-02 01:40陳培德吳建平劉宏杰白雪松景文超
計算機技術與發展 2022年7期
關鍵詞:扇區磁盤校驗

陳培德,吳建平,劉宏杰,白雪松,景文超

(云南大學 信息學院,云南 昆明 650223)

0 引 言

MBR的全稱是Master Boot Record(主引導記錄)[1],MBR早在1983年IBM PC DOS 2.0中就已經提出。之所以叫“主引導記錄(MBR)[2]”,是因為它是存在于驅動器開始部分的一個特殊的啟動扇區[3]。這個扇區包含了已安裝的操作系統的啟動加載器和驅動器的邏輯分區信息。它最大支持2.2 TB的硬盤[4],和32位操作系統無法支持4 GB以上內存一樣,超過此限制的硬盤容量MBR也是無法正確識別的。此外它只能分出4個主分區[5],再多的分區只能創建擴展邏輯分區,別無它法。

GPT是Globally Unique Identifier Partition Table的縮寫,其含義是“全局唯一標識磁盤分區表”[5]。GPT的出現是為了替代舊式的MBR(Master Boot Record)[6],主要解決了MBR分區表不支持容量大于2.2 TB的分區[7]問題。

如果要將MBR磁盤轉換為GPT磁盤,通常做法是:在計算機管理中的磁盤管理中,先將MBR磁盤中的所有分區刪除后,才能將MBR磁盤轉換為GPT磁盤或者在DOS下通過CONVERT命令來完成,再重新建立GPT分區,這樣做的結果是原來MBR分區中存儲的數據難以得到恢復。

針對這一這情況,對MBR磁盤轉換為GPT磁盤進行了大量的實驗,結果發現將MBR磁盤轉換為GPT磁盤后,通過重新計算GPT頭中的CRC32校驗和,通過重建GPT分區的形式就可以恢復GPT分區表,最后通過DBR備份恢復DBR。

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

(1)實驗環境。

(i)操作系統:Windows 10;

(ii硬盤:虛擬硬盤;

(iii)數據分析及恢復工具:WinHex 15.08。

(2)制作實驗素材。

(i)制作MBR磁盤。

制作MBR磁盤的操作步驟如下:

步驟1:在Windows 10操作系統下,使用Windows 10的虛擬磁盤管理功能在D盤的根目錄上建立一個名為abcd1.vhd的文件,文件大小為1 GB。

步驟2:將abcd1.vhd文件附加為虛擬磁盤1,初始為MBR磁盤;在磁盤1上依次建立4個分區,并分別對4個分區進行(快速)格式化操作,文件系統選擇NTFS,磁盤1中4個MBR分區依次對應4個邏輯盤情況如下:

H盤,文件系統:NTFS,容量:100 MB;

I盤,文件系統:NTFS,容量:200 MB;

J盤,文件系統:NTFS,容量:300 MB;

K盤,文件系統:NTFS,容量:422 MB。

步驟3:分別復制一定數量的文件夾和文件到這4個邏輯盤中。

至此,MBR磁盤素材文件制作完成。0號扇區4個MBR分區表的存儲形式如圖1所示。

圖1 0號扇區存儲的4個MBR分區表

步驟4:在計算機管理的磁盤管理中將4個MBR分區刪除,4個MBR分區刪除后,0號扇區偏移地址0X1BE~0X1FE處存儲的4個MBR分區表的值已經變為64個“00”。

(ii)制作GPT頭、GPT頭備份與GPT分區表模板。

制作GPT頭、GPT頭備份與GPT分區表模板操作步驟如下:

步驟1:在Windows 10操作系統下,使用Windows 10的虛擬磁盤管理功能在D盤的根目錄上建立一個名為abcd2.vhd的文件,文件大小為500 MB。

步驟2:將abcd2.vhd文件附加為虛擬磁盤2,初始為GPT磁盤;在磁盤2上依次建立4個分區,并分別對4個分區進行(快速)格式化操作,文件系統選擇NTFS,磁盤1中4個分區依次對應4個邏輯盤情況如下:

L盤,文件系統:NTFS,容量:100 MB;

M盤,文件系統:NTFS,容量:100 MB;

N盤,文件系統:NTFS,容量:100 MB;

O盤,文件系統:NTFS,容量:100 MB。

步驟3:將該磁盤的0號扇區以文件的形式存儲,文件名為0_sector.vhd;即保護的MBR模板已制作完成。

步驟4:將該磁盤的1號扇區以文件的形式存儲,文件名為GPT_Head.vhd;即GPT頭模板已制作完成。

步驟5:將該磁盤的2號和3號扇區以文件的形式存儲,文件名為GPT_Partition.vhd;即GPT分區表模板已制作完成。

步驟6:將該磁盤的倒數1號扇區以文件的形式存儲,文件名為GPT_Head_back.vhd;即GPT頭備份模板已制作完成。

至此,GPT頭、GPT頭備份與GPT分區表素材文件制作完成。

2 MBR磁盤整體布局

由于4個MBR分區表均存儲在磁盤1的0號扇區,分區表中的相對扇區也就是分區的開始扇區號,從磁盤1的0號扇區可以知道,4個分區的開始扇區和總扇區數,從而可以計算出4個分區的結束扇區號,如下所示:

分區開始扇區號結束扇區號總扇區數容量分區1128204927204800100 MB分區2204928614527409600200 MB分區36145281228927614400300 MB分區412289282093183864256422 MB

根據4個分區的基本情況,可以畫出4個分區對應4個邏輯盤在整個硬盤的分布結構,如圖2所示。

圖2 4個邏輯盤在整個硬盤中的分布

3 GPT磁盤整體結構

從整體來看,GPT磁盤主要由6大部分組成,即保護MBR、GPT頭、GPT分區表、GPT分區區域(即文件系統所在區域)、GPT分區表備份和GPT頭備份[8]。大致結構如圖3所示(注:假設GPT磁盤的扇區號范圍為0 ~n-1,其中n為GPT磁盤的總扇區數)。

圖3 GPT磁盤整體結構

(1)保護MBR。

保護MBR位于GPT磁盤的0號扇區,也是由主引導記錄、磁盤簽名、MBR分區表和結束標志4個部分組成[7]。MBR分區表必須位于0號扇區偏移0X01BE~0X01CD處,分區標志為0XEE。主要是用于與MBR磁盤的區別,即該磁盤為GPT磁盤。

(2)GPT頭。

GPT頭位于GPT磁盤的1號扇區[9],該扇區是在轉換成GPT磁盤后自動生成的,GPT頭定義了GPT分區各參數的基本信息,GPT頭中定義的各參數如下:

字節偏移長度(字節)內 容0X008 簽名,固定為“EFI PART”0X084版本號0X0C4GPT頭總字節數0X104GPT頭CRC32校驗和0X144保留,必須是000X18 8GPT頭所在扇區號0X208 GPT頭備份所在扇區號0X288GPT分區區域開始扇區號0X308GPT分區區域結束扇區號0X3816硬盤GUID0X488 GPT分區表開始扇區號0X504最多容納GPT分區表的數量0X544每個GPT分區表項字節數0X584分區表CRC32校驗和0X5C420保留,一般為00

說明:

(i)GPT頭總字節數:GPT頭位于GPT磁盤的1號扇區,指GPT頭在1號扇區所占字節總數,一般為92字節,即;

(ii)GPT頭CRC32校驗和:也就是將該處的值填為“00 00 00 00”后,GPT頭扇區偏移0X00~0X5B這92個字節的CRC32校驗和;

(iii)分區表CRC32校驗和:一般情況下,GPT分區表所占扇區號范圍為2~33,即2~33號扇區的CRC32校驗和。

注:計算GPT分區表所占扇區數方法如下:

GPT分區表所占字節數=最多容納GPT分區表的數量×每個GPT分區表項字節數

GPT分區表所占扇區數=

GPT分區表所占字節數÷512

(3)GPT分區表。

在GPT分區中,一般情況下,最多容納GPT分區表的數量為128,而每個GPT分區表占128個字節。

GPT分區表所占字節數=最多容納GPT分區表的數量×每個GPT分區表項字節數

=128×128

=16 384

GPT分區表所占扇區數=

GPT分區表所占字節數÷512

=16 384÷512

=32

GPT分區表的開始扇區號為2,共占用32個扇區[10],所以GPT分區表位于GPT磁盤的2 ~ 33號扇區,每個分區表占為128字節,最多可以容納128個分區表,由于第1個分區表為系統保留,所以用戶在GPT磁盤上最多可以建立127個分區,每個分區表管理一個分區[11]。GPT分區表各參數如下所示:

字節偏移長度(字節)內 容0X0016分區類型GUID0X1016分區GUID0X208該分區開始扇區號0X288該分區結束扇區號0X308屬性標簽0X3872分區名(Unicode碼)

(4)分區區域。

GPT分區區域是整個GPT磁盤中最大的區域,位于GPT磁盤的中間位置[12],GPT分區區域的開始扇區和結束扇區由GPT頭定義,由于GPT分區表的結束扇區號為33,一般情況下,GPT分區區域開始扇區號為34,而結束扇區號為GPT磁盤總扇區數減去35。該區域由多個具體的分區組成,如:微軟保留分區、EFI系統分區、LDM元數據分區、LDM數據分區、OEM分區和主分區等。各分區的開始扇區和結束扇區在各分區表中均有定義。

(5)分區表備份。

GPT分區區域結束后的下一個扇區為GPT分區表備份的開始扇區[13],一般情況下,GPT分區表備份位于GPT磁盤的倒數33號扇區~倒數2號扇區,也是占用32個扇區,是GPT分區表位于GPT磁盤2~33號扇區的備份。

(6)GPT頭備份。

GPT頭備份位于GPT磁盤的倒數1號扇區,該扇區也是在轉換成GPT磁盤后自動生成的,GPT頭備份也是定義了GPT分區各參數的基本信息[14],但該扇區不是GPT頭的簡單備份,GPT頭備份對GPT分區各參數基本信息的定義與GPT頭對GPT分區各參數基本信息的定義稍有不同,GPT頭備份對分區各參數基本信息的定義如下:

字節偏移長度(字節)內 容0X008簽名,固定為“EFI PART”0X084版本號0X0C4GPT頭備份總字節數0X104GPT頭備份CRC32校驗和0X144保留,必須是000X188GPT頭備份所在扇區號0X208GPT頭所在扇區號0X288GPT分區區域開始扇區號0X308GPT分區區域結束扇區號0X3816硬盤GUID0X488GPT分區表備份開始扇區號0X504最多容納分區表的數量0X544每個分區表項字節數0X584分區表備份CRC32校驗和0X5C420保留,一般為00

說明:

(i)GPT頭備份總字節數:指GPT頭備份所占字節總數,一般為92字節,即扇區偏移為0X00~0X5B;

(ii)GPT頭備份CRC32校驗和:也就是將該處的值填為“00 00 00 00”后,GPT頭備份扇區偏移0X00~0X5B這92個字節的CRC32校驗和;

(iii)分區表備份CRC32校驗和:GPT分區表備份所占扇區號范圍為n-34~n-3,即n-34~n-3號扇區的CRC32校驗和。與GPT分區表CRC32校驗和相同。

4 MBR磁盤轉換為GPT磁盤的基本思路

從GPT磁盤的整體結構可知,要將MBR磁盤轉換為GPT磁盤,基本思路如下:

(1)將0號扇區轉變為保護MBR;

(2)將1號扇區轉變為GPT頭;

(3)將GPT分區表存儲在2~33號扇區;

(4)將GPT分區表備份存儲在n-34~n-3號扇區;

(5)將GPT頭備份存儲在n-2號扇區。

5 MBR磁盤轉換為GPT磁盤的基本方法

將MBR磁盤轉換為GPT磁盤的基本方法如下:

(1)將0號扇區偏移0X01BE~0X01CD的MBR分區表用“00 00 02 00 EE FF FF FF 01 00 00 00 FF FF FF FF”來填充,將0號扇區偏移0X01CE~0X01FD存儲的3個MBR分區表的位置用48個“00”來填充,將0號扇區偏移0X01FE~0X01FF的用“55 AA”(存儲形式)來填充;即可將0號扇區轉變為保護的MBR[15];

(2)計算GPT分區表中各分區的開始扇區號和結束扇區號,將GPT分區表模板復制到GPT分區所在扇區號,并修改各GPT分區表的開始扇區號和結束扇區號;

(3)計算GPT頭中的GPT頭備份所在扇區號、GPT分區區域結束扇區號、GPT分區表CRC32校驗和和GPT頭CRC32校驗和這4個參數;將GPT頭模板復制到GPT頭所在扇區號,并修改這4個參數;

(4)將GPT分區表復制到GPT分區表備份所在扇區號;

(5)計算GPT頭備份中GPT頭備份所在扇區號、GPT頭備份CRC32校驗和、GPT分區區域結束扇區號、GPT分區表備份開始扇區號和GPT分區表備份CRC32校驗和這5個參數。將GPT頭備份模板復制到GPT頭備份所在扇區號,并修改這5個參數。

6 MBR磁盤轉換為GPT磁盤的操作步驟

MBR磁盤轉換為GPT磁盤的操作步驟如下:

步驟1:在Windows 10操作系統下,使用Windows 10的虛擬磁盤管理功能附加D盤根目錄的abcd1.vhd文件;成為磁盤1。

步驟2:啟動WinHex,工具-->打開磁盤,在Edit Disk窗口的Physical Media下選擇“ HD1:Msft Virtual Disk(1.0 GB)”。

步驟3:工具-->磁盤工具-->掃描丟失分區后,如圖4所示。

圖4 4個分區的基本情況

從圖4可以得到,4個分區的開始扇區號,由于4個MBR分區的劃分是尾首相連,可以計算出前3個GPT分區的結束扇區號分別是204927、614527和1228927,最后1個分區(即第4個分區)的結束扇區號,可以通過容量計算總扇區數,再通過開始扇區號和總扇區數獲得:

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

422×1 024×1 024 ÷512=

864 256

結束扇區號=開始扇區號+總扇區數-1=

1 228 928+864 256-1=

2 093 183

也可以依據NTFS_DBR備份的特征值,通過查找的方式獲得第4個GPT分區的結束扇區號為2093183。

4個GPT分區的開始扇區號和結束扇區號如下所示:

分區開始扇區號結束扇區號分區1128204927分區2204928614527分區36145281228927分區412289282093183

根據磁盤1的總扇區數,可以計算出GPT分區表存儲在2~33號扇區,而GPT分區表備份存儲在2097119 ~ 2097150號扇區。

步驟4:打開GPT_Partition.vhd文件,并選中第2個至第5個GPT分區表,單擊“復制”按鈕,將光標移動到磁盤1的2號扇區的開始位置處,單擊“粘貼”按鈕。

步驟5:將光標移動到2號扇區,視圖—>模板管理器,在模板管理器窗口中依次輸入4個分區表的開始扇區號和結束扇區號。如圖5所示:單擊保存按鈕。至此,GPT分區表已成功恢復。

圖5 依次輸入4個分區的開始扇區號和結束扇區號

步驟6:將2號扇區復制到2097119號扇區,至此,GPT分區表備份已經成功恢復。

步驟7:將0號扇區偏移0X01BE~0X01CD的MBR分區表用“00 00 02 00 EE FF FF FF 01 00 00 00 FF FF FF FF”來填充,單擊“保存”按鈕。至此,保護的MBR已恢復。

步驟8:打開GPT_Head.vhd文件,全選,單擊“復制”按鈕,將光標移動到磁盤1的1號扇區開始位置,單擊“粘貼”按鈕,單擊“保存”按鈕。

通過計算得到GPT頭中參數如下:

GPT頭備份所在扇區號為2097151;在GPT頭中的存儲形式為“FF FF 1F 00”;

GPT分區區域結束扇區號在2097118;在GPT頭中的存儲形式為“DE FF 1F 00”;

GPT分區表CRC32校驗和為348F57C2;在GPT頭中的存儲形式為“C2 57 8F 34”。

步驟9:修改GPT頭中的GPT頭備份所在扇區號、GPT分區區域結束扇區和GPT分區表CRC32校驗和這三個參數;然后存盤。

步驟10:將GPT頭中的GPT頭CRC32校驗和存儲形式填充為“00 00 00 00”,然后選中扇區偏移地址0X00~0X05B處重新計算GPT頭的CRC32校驗和。結果為“4EEFA08A”,存儲形式為“8A A0 EF 4E”。將GPT頭中的GPT頭CRC32校驗和的存儲形式修改為“8A A0 EF 4E”;然后存盤;至此,GPT頭已轉換完成。

步驟11:打開GPT_Head_backup.vhd文件,全選,單擊“復制”按鈕,將光標移動到磁盤1的2097151號扇區開始位置,單擊“粘貼”按鈕,單擊“保存”按鈕。

通過計算得到GPT頭備份中參數如下:

GPT頭備份所在扇區號為2097151;在GPT頭備份中的存儲形式為“FF FF 1F 00”;

GPT分區區域結束扇區號在2097118;在GPT頭備份中的存儲形式為“DE FF 1F 00”;

GPT分區表備份CRC32校驗和為348F57C2;在GPT頭備份中的存儲形式為“C2 57 8F 34”;注:GPT分區表備份與GPT分區表相同,所以,CRC32校驗和也相同;

GPT分區表備份開始扇區號為2097119,在GPT頭備份中的存儲形式為“DF FF 1F 00”。

步驟12:修改GPT頭備份中的GPT頭備份所在扇區號、GPT分區區域結束扇區、GPT分區表備分CRC32校驗和與GPT頭備份所在扇區號這三個參數;然后存盤。

步驟13:將GPT頭備份中的GPT頭備份CRC32校驗和存儲形式填充為“00 00 00 00”,然后選中扇區偏移地址0X00~0X05B處重新計算GPT頭備份的CRC32校驗和。結果為“D615D156”,存儲形式為“56 D1 15 D6”。將GPT頭中的GPT頭CRC32校驗和的存儲形式修改為“56 D1 15 C6”;然后存盤;至此,GPT頭備份已轉換完成。

7 結束語

將0號轉換為保護的MBR;將GPT分區模板復制到GPT分區表所在扇區號,并修改各分區的開始扇區號和結束扇區號,完成GPT分區表的恢復;將GPT分區表復制到GPT分區表備份所在扇區;重新計算GPT頭中的GPT頭CRC32校驗和、GPT頭備份所在扇區號、GPT分區區域結束扇區號、GPT分區表CRC32校驗和這4個參數;重新計算GPT頭備份中的GPT頭備份CRC32校驗和、GPT頭備份所在扇區號、GPT分區區域結束扇區號、GPT分區表備份開始扇區號和GPT分區表備份CRC32校驗和這5個參數。通過這種方法成功實現MBR磁盤轉換為GPT磁盤。

猜你喜歡
扇區磁盤校驗
復雜多耦合仿真模型校驗工具研究
分階段調整增加扇區通行能力策略
使用Excel朗讀功能校驗工作表中的數據
電能表在線不停電校驗技術
它的好 它的壞 詳解動態磁盤
解決Windows磁盤簽名沖突
手工修復MBR
淺述“4K對齊”及其發展前景
U盤故障排除經驗談
精通文件校驗的“門道”
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合