專利名稱:一種Windows系統(tǒng)磁盤分區(qū)的修復方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計算機安全領(lǐng)域,尤其涉及一種Windows系統(tǒng)磁盤分區(qū)的修復方法。
背景技術(shù):
隨著信息時代的高速發(fā)展,政府、企業(yè)以及個人越來越多地關(guān)注信息的安全。信息安全的核心是數(shù)據(jù)的安全,而病毒感染、誤操作、意外事件等眾多因素都在威脅著數(shù)據(jù)的安全,一旦重要數(shù)據(jù)被破壞和丟失,其損失往往相當嚴重,甚至難以彌補。然而,在實際應(yīng)用中,又很難避免出現(xiàn)數(shù)據(jù)損壞與丟失的現(xiàn)象。因此,對那些遭受破壞的重要數(shù)據(jù)進行有效地恢復是相當必要的。
目前,對于數(shù)據(jù)恢復的軟件及其方法有很多,其中,分區(qū)修復類軟件是一種間接地恢復數(shù)據(jù)方式,即通過修復分區(qū)來找回丟失的數(shù)據(jù)。這種分區(qū)修復方式的優(yōu)點是恢復速度極快,而且一旦分區(qū)修復成功其中丟失的文件也就都能隨之而恢復。但是,當前的分區(qū)修復 軟件針對誤GHOST、誤格式化等造成的分區(qū)丟失,只能掃描出部分分區(qū)信息,甚至有些掃描出的信息是錯誤的,當利用這些錯誤的信息來恢復分區(qū)信息,將導致對磁盤的二次損壞;而且傳統(tǒng)的分區(qū)修復軟件無法修復對于誤GHOST后再次分區(qū)或者其他方式的再次破壞的磁盤。因此,目前急需一種在分區(qū)信息被嚴重破壞的情況下仍能修復磁盤分區(qū)的方法。
發(fā)明內(nèi)容
本發(fā)明提供一種Windows系統(tǒng)磁盤分區(qū)的修復方法,用于解決現(xiàn)有的分區(qū)修復技術(shù)無法修復Windows系統(tǒng)廣泛使用的FAT32和NTFS文件系統(tǒng)的分區(qū)信息被嚴重破壞的磁盤分區(qū)的問題,本發(fā)明提供的磁盤分區(qū)的修復方法能夠?qū)AT32/NTFS分區(qū)信息被嚴重破壞的磁盤進行準確的修復,修復速度快,適用性廣。本發(fā)明提供的一種Windows磁盤分區(qū)修復方法,該方法包括以下步驟SI :判斷是否有未掃描的磁盤扇區(qū)?若否,則執(zhí)行S4 ;若是則依次向后掃描磁盤的未掃描扇區(qū),尋找主引導記錄MBR、擴展分區(qū)記錄EBR或操作系統(tǒng)引導記錄DBR,若當前掃描到的是DBR,則執(zhí)行S2,若當前掃描到的是MBR或EBR,則執(zhí)行S3 ;S2 :判斷當前DBR是否是不正確的MBR/EBR所匹配的DBR 若是則丟棄當前DBR ;否則接著判斷當前DBR是否是備份DBR,如果是則丟棄,否則根據(jù)當前DBR中所記錄的該分區(qū)的大小、分區(qū)類型等信息判斷該分區(qū)描述信息是否正確?是則根據(jù)當前DBR重構(gòu)與其匹配的MBR/EBR并保存該正確的分區(qū)信息,返回執(zhí)行SI,否則直接返回執(zhí)行SI ;S3 :根據(jù)MBR/EBR中的分區(qū)表信息構(gòu)成分區(qū)鏈,如果構(gòu)成的分區(qū)鏈正確則保存該分區(qū)鏈信息,否則判斷當前MBR/EBR中的第一條分區(qū)表項所記錄的該分區(qū)描述信息是否正確,是則保存該正確的分區(qū)信息并返回執(zhí)行SI,否則直接返回執(zhí)行SI ;S4 :將已保存的所有正確的分區(qū)信息寫入磁盤。優(yōu)選地,上述Windows磁盤分區(qū)修復方法中,所述SI之前還包括步驟打開磁盤,獲取所述磁盤的扇區(qū)總數(shù)SUM,并令前一分區(qū)的結(jié)束扇區(qū)號為O ;
所述SI具體包括以下步驟步驟Al :判斷當前已掃描的磁盤扇區(qū)數(shù)N是否大于或等于所述SUM 是則跳轉(zhuǎn)到
S4;否則跳轉(zhuǎn)到步驟A2 ;其中N的初始值設(shè)為O ;步驟A2 :令OFFSET = 0FFSET+1,繼續(xù)執(zhí)行步驟A5 ;其中,OFFSET是當前掃描的扇區(qū)距離與其最近的前一個錯誤的MBR/EBR的扇區(qū)數(shù),所述OFFSET的初始值為O ;步驟A3 :讀取所 述磁盤的第N個扇區(qū)最后兩字節(jié)的信息,并判斷其是否為“55AA”?是則執(zhí)行步驟A5 ;否則執(zhí)行步驟A4 ;步驟A4 :令N = N+1,并返回執(zhí)行步驟Al ;步驟A5 :判斷所述磁盤的第N個扇區(qū)是否是MBR或EBR 是則執(zhí)行S3,否則執(zhí)行步驟A6 ;步驟A6 :判斷所述磁盤的第N個扇區(qū)是否是DBR 是則繼續(xù)執(zhí)行S2,否則跳轉(zhuǎn)到步驟A4。優(yōu)選地,上述Windows磁盤分區(qū)修復方法中,所述S2具體包括步驟BI :判斷當前OFFSET是否小于70,是則執(zhí)行步驟B2,否則執(zhí)行步驟B3 ;步驟B2 :讀取不正確的MBR/EBR記錄,判斷是否有不正確的MBR/EBR與當前DBR匹配,如果有不正確的MBR/EBR與當前DBR匹配則跳轉(zhuǎn)到步驟A4 ;否則跳轉(zhuǎn)到步驟B4 ;步驟B3 :判斷當前DBR是否是NTFS分區(qū)的DBR,是則執(zhí)行步驟B5,否則執(zhí)行步驟B4 ;步驟B4 :判斷當前DBR中“該分區(qū)的扇區(qū)總數(shù)”字段值是否正確,是則跳轉(zhuǎn)到步驟B6;否則跳轉(zhuǎn)到步驟A4;步驟B5 :讀取不正確的MBR/EBR記錄,判斷當前DBR是否能作為NTFS分區(qū)的備份DBR與不正確的MBR/EBR匹配,是則執(zhí)行步驟A4 ;否則執(zhí)行步驟B4 ;步驟B6 :根據(jù)當前DBR重構(gòu)與其匹配的MBR/EBR,繼續(xù)執(zhí)行步驟B7 ;步驟B7 :判斷與當前DBR匹配的MBR/EBR是否重構(gòu)成功?若是則將重構(gòu)成功的MBR/EBR所記錄的分區(qū)信息視作正確的分區(qū)信息,并跳轉(zhuǎn)到步驟B8 ;否則跳轉(zhuǎn)到步驟A4 ;步驟B8 :保存該正確的分區(qū)信息,并繼續(xù)執(zhí)行步驟B9 ;步驟B9 :令N = N+該正確的分區(qū)信息中記錄的該分區(qū)的扇區(qū)總數(shù)+1,繼續(xù)執(zhí)行步驟 BlO ;步驟BlO :記錄該正確的分區(qū)信息所對應(yīng)的分區(qū)的結(jié)束扇區(qū)號,跳轉(zhuǎn)到步驟Al。優(yōu)選地,上述Windows磁盤分區(qū)修復方法中,所述步驟B2的詳細判斷方法為步驟B201 :輸入當前N和前一個分區(qū)的結(jié)束扇區(qū)號;步驟B202 :設(shè)置備份DBR的標記Flag為flase,并計算與當前DBR匹配的MBR/EBR所在扇區(qū)號SSN SSN = N-當前DBR中隱藏扇區(qū)數(shù)字段的值;步驟B203 :判斷SSN是否等于O 是則跳轉(zhuǎn)到步驟B204,否則跳轉(zhuǎn)到步驟B207 ;步驟B204 :判斷是否有不正確的MBR記錄?若是,則跳轉(zhuǎn)到步驟B205 ;若否,則跳轉(zhuǎn)到步驟B215 ;步驟B205 :讀取所述不正確的MBR中的第一條分區(qū)表項的“本分區(qū)之前使用的扇區(qū)數(shù)”字段值,并判斷是否等于N 是則跳轉(zhuǎn)到步驟B206,否則跳轉(zhuǎn)到步驟B215 ;步驟B206 :判斷所述不正確的MBR中的第一條分區(qū)表項中和當前DBR中描述的本分區(qū)類型和扇區(qū)總數(shù)是否相同?是則跳轉(zhuǎn)到步驟B214,否則跳轉(zhuǎn)到步驟B215 ;步驟B207 :判斷SSN是否小于或等于前一個分區(qū)的結(jié)束扇區(qū)號?是則跳轉(zhuǎn)到步驟B214 ;否則執(zhí)行步驟B208 ;步驟B208 :查詢不正確的EBR記錄,判斷是否有編號為SSN的不正確的EBR,有則執(zhí)行步驟B209 ;否則執(zhí)行步驟B210 ;步驟B209 :判斷當前查詢到的不正確的EBR和當前DBR中描述的分區(qū)類型是否相同?是則跳轉(zhuǎn)到步驟B213,否則跳轉(zhuǎn)到步驟B211 ;步驟B210 :判斷所述備份DBR的標記Flag是否為True 是則跳轉(zhuǎn)到步驟B215 ;否則執(zhí)行步驟B211 ;步驟B211 :判斷當前DBR是否是FAT32分區(qū)的DBR 是則執(zhí)行步驟B212 ;否則跳 轉(zhuǎn)到步驟B215 ;步驟B212 =^SSN = N-當前DBR中隱藏扇區(qū)數(shù)字段的值-當前DBR中備份扇區(qū)號,令備份DBR的標記Flag為True,并返回執(zhí)行步驟B207 ;步驟B213 :判斷所述當前查詢到的不正確的EBR中記錄的自身所處分區(qū)的扇區(qū)總數(shù)和當前DBR中記錄的自身所處分區(qū)的扇區(qū)總數(shù)是否相同,是則跳轉(zhuǎn)到步驟B214,否則跳轉(zhuǎn)到步驟B211 ;步驟B214 :返回“有不正確的MBR/EBR與當前DBR匹配”的判斷結(jié)果,并跳轉(zhuǎn)執(zhí)行步驟A4 ;步驟B215 :返回“沒有不正確的MBR/EBR與當前DBR匹配”的判斷結(jié)果,并跳轉(zhuǎn)執(zhí)行步驟B4。優(yōu)選地,上述Windows磁盤分區(qū)修復方法中,所述步驟B5的詳細判斷方法為步驟B501 :輸入當前N和前一個分區(qū)的結(jié)束扇區(qū)號;步驟B502 :計算當前DBR所處分區(qū)的EBR所在的扇區(qū)號SSN :SSN = N-(當前DBR所處分區(qū)的扇區(qū)總數(shù)+當前DBR中隱藏扇區(qū)數(shù)字段的值+1);步驟B503 :判斷SSN是否小于前一個分區(qū)的結(jié)束扇區(qū)號?是則跳轉(zhuǎn)到步驟B507 ;否則跳轉(zhuǎn)到步驟B504 ;步驟B504 :查詢不正確的MBR/EBR記錄,判斷是否有編號為SSN的不正確MBR/EBR記錄;是則跳轉(zhuǎn)到步驟B505 ;否則跳轉(zhuǎn)到步驟B508 ;步驟B505 :判斷當前查詢到的不正確的MBR/EBR和當前DBR中描述的分區(qū)類型是否相同,是則跳轉(zhuǎn)到步驟B506 ;否則跳轉(zhuǎn)到步驟B508 ;步驟B506 :判斷當前查詢到的不正確的MBR/EBR中記錄的自身所處分區(qū)的扇區(qū)總數(shù)是否比當前DBR中記錄的自身所處分區(qū)的扇區(qū)總數(shù)大1,是則跳轉(zhuǎn)到步驟B507 ;否則跳轉(zhuǎn)到步驟B508 ;步驟B507 :返回“有不正確的MBR/EBR與當前DBR匹配”的判斷結(jié)果,并跳轉(zhuǎn)執(zhí)行步驟A4 ;步驟B508 :返回“沒有不正確的MBR/EBR與當前DBR匹配”的判斷結(jié)果,并跳轉(zhuǎn)執(zhí)行步驟B4。優(yōu)選地,上述Windows磁盤分區(qū)修復方法中,所述步驟B6-步驟B7包括步驟B601 :根據(jù)當前DBR和當前N計算待重構(gòu)的與當前DBR匹配的MBR/EBR所在的扇區(qū)號SSN : SSN = N-當前DBR中隱藏扇區(qū)數(shù)字段的值;步驟B602 :判斷SSN是否等于O 是則跳轉(zhuǎn)到步驟B603,否則跳轉(zhuǎn)到步驟B607 ;步驟B603 :將待重構(gòu)的與當前DBR匹配的MBR中本分區(qū)的分區(qū)表項的“本分區(qū)之前使用的扇區(qū)數(shù)”的值改為N;步驟B604 :判斷當前DBR是否是FAT32分區(qū)的DBR 是則跳轉(zhuǎn)到步驟B605,否則跳轉(zhuǎn)到步驟B606 ;步驟B605 :將所述待重構(gòu)的與當前DBR匹配的MBR的分區(qū)表項中本分區(qū)的扇區(qū)總數(shù)字段值改為當前DBR中記錄的自身所處 分區(qū)的扇區(qū)總數(shù),并跳轉(zhuǎn)到步驟B613 ;步驟B606 :將所述待重構(gòu)的與當前DBR匹配的MBR的分區(qū)表項中本分區(qū)的扇區(qū)總數(shù)字段值改為當前DBR中記錄的自身所處分區(qū)的扇區(qū)總數(shù)+1,并跳轉(zhuǎn)到步驟B613 ;步驟B607 :判斷當前DBR是否是FAT32分區(qū)的DBR,是則跳轉(zhuǎn)到步驟B608 ;否則跳轉(zhuǎn)到步驟B610 ;步驟B608 :將待重構(gòu)的與當前DBR匹配的EBR中本分區(qū)的扇區(qū)總數(shù)值設(shè)置為當前DBR中記錄的自身所處分區(qū)的扇區(qū)總數(shù),并執(zhí)行步驟B609 ;步驟B609 :將所述待重構(gòu)的與當前DBR匹配的EBR中本分區(qū)的結(jié)束扇區(qū)號設(shè)置為N+當前DBR中記錄的自身所處分區(qū)的扇區(qū)總數(shù),并跳轉(zhuǎn)到步驟B613 步驟B610 :判斷當前DBR是否是NTFS分區(qū)的DBR 是則跳轉(zhuǎn)到步驟B611 ;否則跳轉(zhuǎn)到步驟B614 ;步驟B611 :將待重構(gòu)的與當前DBR匹配的EBR中本分區(qū)的扇區(qū)總數(shù)值設(shè)置為當前DBR中記錄的自身所處分區(qū)的扇區(qū)總數(shù)+1 ;步驟B612 :將待重構(gòu)的與當前DBR匹配的EBR中本分區(qū)的結(jié)束扇區(qū)號設(shè)置為N+當前DBR中記錄的自身所處分區(qū)的扇區(qū)總數(shù)+1 ;步驟B613 :返回“重構(gòu)MBR/EBR成功”的信息,將重構(gòu)成功的MBR/EBR所記錄的分區(qū)信息視作正確的分區(qū)信息,并跳轉(zhuǎn)到步驟B8 ;步驟B614 :返回“重構(gòu)MBR/EBR失敗”的信息,并跳轉(zhuǎn)到步驟A4。優(yōu)選地,上述的任一種Windows磁盤分區(qū)修復方法中,所述S3包括步驟Cl :讀取MBR/EBR中的分區(qū)表信息,并判斷是否能構(gòu)成分區(qū)鏈,是則跳轉(zhuǎn)到步驟C2 ;否則跳轉(zhuǎn)到步驟C5 ;步驟C2 :判斷構(gòu)成的分區(qū)鏈是否正確,是則執(zhí)行步驟C3,否則執(zhí)行步驟C5 ;步驟C3 :保存所述分區(qū)鏈的信息,并使N = N+所述分區(qū)鏈跨過的扇區(qū)數(shù)+1,并繼續(xù)執(zhí)行步驟C4 ;步驟C4 :記錄所述分區(qū)鏈最后一個分區(qū)的結(jié)束扇區(qū)號,并跳轉(zhuǎn)到步驟Al ;步驟C5 :判斷當前MBR/EBR中的第一條分區(qū)表項所記錄的分區(qū)信息是否正確,是則執(zhí)行步驟C6,否則跳轉(zhuǎn)執(zhí)行步驟C9 ;步驟C6 :保存該正確的分區(qū)信息,并繼續(xù)執(zhí)行步驟C7 ;步驟C7 :令N = N+該正確的分區(qū)信息中記錄的該分區(qū)的扇區(qū)總數(shù)+1,繼續(xù)執(zhí)行步驟C8 ;步驟CS :記錄該正確的分區(qū)信息所對應(yīng)的分區(qū)的結(jié)束扇區(qū)號,跳轉(zhuǎn)到步驟Al ;步驟C9 :記錄該不正確的MBR/EBR并將之編號為N,并執(zhí)行步驟ClO ;
步驟CIO :使N = N+1, OFFSET = 0,并返回執(zhí)行步驟Al。優(yōu)選地,上述Windows磁盤分區(qū)修復方法中,所述步驟A5的詳細判斷方法為首先判斷當前N是否為O 是則所述磁盤的第N個扇區(qū)為MBR;否則再判斷所述磁盤的第N個扇區(qū)的前兩個字節(jié)信息是否為“00 00”,若是則所述磁盤的第N個扇區(qū)為EBR,否則所述磁盤的第N個扇區(qū)既不是MBR也不是EBR。優(yōu)選地,上述Windows磁盤分區(qū)修復方法中,所述步驟A6的判斷方法為讀取所述磁盤的第N個扇區(qū)的前三個字節(jié),若所述磁盤的第N個扇區(qū)的前三個字節(jié)是“EB 52 90”或“EB 58 90”,則所述磁盤的第N個扇區(qū)為DBR ;否則所述磁盤的第N個扇區(qū)不是DBR。本發(fā)明的有益效果是綜合利用了 Windows系統(tǒng)磁盤分區(qū)的MBR/EBR和DBR信息,根據(jù)這些信息不同,采用不同的修復方式對Windows磁盤分區(qū)進行修復,在分區(qū)信息MBR/EBR和DBR被嚴重破壞的情況下,也能較準確的修復磁盤分區(qū),具有修復準確和快速的優(yōu) 點,在數(shù)據(jù)恢復領(lǐng)域具有廣泛的適用性。
圖I是本發(fā)明實施例提供的一種Windows磁盤分區(qū)修復方法的詳細流程圖;圖2是圖I中SllO的詳細判斷方法流程圖;圖3是圖I中SI 13的詳細判斷方法流程圖;圖4為圖I中S114-S115的具體實施方法流程圖。
具體實施例方式以下結(jié)合附圖,具體說明本發(fā)明實施例。本發(fā)明實施例提供的一種Windows磁盤分區(qū)修復方法,該方法包括以下步驟SI :判斷是否有未掃描的磁盤扇區(qū)?若否,則執(zhí)行S4 ;若是則依次向后掃描磁盤未掃描扇區(qū),尋找主引導記錄MBR、擴展分區(qū)記錄EBR或操作系統(tǒng)引導記錄DBR,若當前掃描到的是DBR,則執(zhí)行S2,若當前掃描到的是MBR或EBR,則執(zhí)行S3。此步驟是針對Windows下常見的FAT32和NTFS文件系統(tǒng)分區(qū)的磁盤進行的掃描。S2 :判斷當前DBR是否是不正確的MBR/EBR所匹配的DBR 若是則丟棄當前DBR ;否則接著判斷該DBR是否是備份DBR,如果是則丟棄,否則根據(jù)當前DBR中所記錄的該分區(qū)的大小、分區(qū)類型信息判斷該分區(qū)描述信息是否正確?是則根據(jù)當前DBR重構(gòu)與其匹配的MBR/EBR并保存該正確的分區(qū)信息,返回執(zhí)行SI,否則直接返回執(zhí)行SI。S3 :根據(jù)MBR/EBR中的分區(qū)表(Disk Partition Table, DPT)信息構(gòu)成分區(qū)鏈,判斷構(gòu)成的分區(qū)鏈是否正確,如果正確則保存該分區(qū)鏈信息,否則判斷當前MBR/EBR中的第一條分區(qū)表項所記錄的該分區(qū)描述信息是否正確,是則保存該正確的分區(qū)信息并返回執(zhí)行SI,否則直接返回執(zhí)行SI。S4 :將已保存的所有正確的分區(qū)信息寫入磁盤。圖I為本發(fā)明實施例提供的一種Windows磁盤分區(qū)修復方法的詳細流程圖,圖I中S103-S108為本發(fā)明提供的上述方法中SI的詳細流程;S109-S115以及S121-S123所組成的流程為本發(fā)明提供的上述方法中的S2的詳細實施方法;S116-S125所組成的流程為本發(fā)明提供的上述方法中的S3的詳細實施方法。具體地,圖I所示方法包括以下步驟
SlOl :打開磁盤。S102 :獲取磁盤的扇區(qū)總數(shù)SUM,并令前一分區(qū)的結(jié)束扇區(qū)號ESN = O。S103 :判斷當前已掃描的磁盤扇區(qū)數(shù)N是否大于或等于磁盤的扇區(qū)總數(shù)SUM,是則跳轉(zhuǎn)到S4 ;否則跳轉(zhuǎn)到S104。其中N的初始值設(shè)為O ;此步驟相當于步驟SI中的“判斷是否有未掃描的磁盤扇區(qū)”。S104 :令OFFSET = 0FFSET+1,其中OFFSET是當前掃描的扇區(qū)距離與其最近的前一個錯誤的MBR/EBR的扇區(qū)數(shù),初始值為O。S105 :讀取磁盤的第N個扇區(qū)最后兩字節(jié)的信息,并判斷其是否為“55AA”?是則執(zhí)行S107 ;否則執(zhí)行S106。此步驟中,由于MBR/EBR/DBR信息的結(jié)束標 志均為“55AA”,因此采用這兩字節(jié)進行判斷。S106 :令N = N+1,并返回執(zhí)行S103。此步驟使已掃描扇區(qū)數(shù)N加1,即繼續(xù)掃描磁盤的下一個扇區(qū)。S107 :判斷磁盤的第N個扇區(qū)是否是MBR或EBR,是則跳轉(zhuǎn)到S116,否則跳轉(zhuǎn)到SlOS0此步驟的具體判斷的過程是首先判斷當前的N是否為0,是O則磁盤的第N個扇區(qū)為MBR ;否則再判斷磁盤的第N個扇區(qū)的前兩個字節(jié)信息是否為“00 00”,是則磁盤的第N個扇區(qū)為EBR,否則磁盤的第N個扇區(qū)既不是MBR也不是EBR。S108 :判斷磁盤的第N個扇區(qū)是否是DBR,是則繼續(xù)執(zhí)行S109,否則跳轉(zhuǎn)到S106。其中,DBR的判斷方法為讀取磁盤的第N個扇區(qū)的前三個字節(jié)信息,如果是“EB 52 90”或“EB 58 90”,則為DBR;如果不是,則不是DBR。S109 :判斷當前OFFSET是否小于70,是則跳轉(zhuǎn)到S110,否則跳轉(zhuǎn)到Slll0其中,由于同一分區(qū)DBR —般會偏移該分區(qū)MBR/EBR的扇區(qū)數(shù)小于/等于63,從而FAT32的備份DBR —般偏移分區(qū)的EBR的扇區(qū)數(shù)應(yīng)小于/等于69,因為FAT32備份DBR偏移DBR的扇區(qū)數(shù)一般為6,故此處采用OFFSET小于70作為當前DBR有可能是屬于前面某個不正確的MBR/EBR的DBR/備份DBR的判定依據(jù)。而當OFFSET不小于70時則當前DBR有可能是NTFS文件系統(tǒng)的備份DBR。SllO :讀取不正確的MBR/EBR記錄,判斷是否有不正確的MBR/EBR與當前DBR匹配,如果有不正確的MBR/EBR與當前DBR匹配則跳轉(zhuǎn)到S106 ;否則跳轉(zhuǎn)到S112。其中,當目前沒有不正確的MBR/EBR記錄時,認為沒有不正確的MBR/EBR與當前DBR匹配。此步驟的具體實施過程見圖2所示,后面再進行詳細說明。S111 :判斷當前DBR是否是NTFS分區(qū)的DBR,是則執(zhí)行S113,否則執(zhí)行S112。S112 :判斷當前DBR中“該分區(qū)的扇區(qū)總數(shù)”字段值是否正確,是則跳轉(zhuǎn)到S114 ;否則跳轉(zhuǎn)到S106。S113 :讀取不正確的MBR/EBR記錄,判斷當前DBR是否能作為NTFS分區(qū)的備份DBR與不正確的MBR/EBR匹配,是則跳轉(zhuǎn)到S106 ;否則跳轉(zhuǎn)到S112。其中,當目前沒有不正確的MBR/EBR記錄時,認為當前DBR不能作為NTFS分區(qū)的備份DBR與不正確的MBR/EBR匹配,跳轉(zhuǎn)執(zhí)行步驟S112。此步驟的具體實施過程見圖3所示,后面再進行詳細說明。SI 14 :根據(jù)當前DBR重構(gòu)與其匹配的MBR/EBR。S115 :判斷與當前DBR匹配的MBR/EBR是否重構(gòu)成功,是則將重構(gòu)成功的MBR/EBR所記錄的分區(qū)信息視作正確的分區(qū)信息,并跳轉(zhuǎn)到S121 ;否則跳轉(zhuǎn)到S106。其中重構(gòu)過程如圖5所示。S116:讀取MBR/EBR中的分區(qū)表信息,并判斷是否能構(gòu)成分區(qū)鏈,是則跳轉(zhuǎn)到S117 ;否則跳轉(zhuǎn)到S120。S117 :判斷構(gòu)成的分區(qū)鏈是否正確,是則執(zhí)行S118,否則執(zhí)行S120。S118 :保存所述分區(qū)鏈信息,并使N = N+此分區(qū)鏈跨過的扇區(qū)數(shù)+1,并繼續(xù)執(zhí)行S119。S119 :記錄所述分區(qū)鏈 最后一個分區(qū)的結(jié)束扇區(qū)號ESN,并跳轉(zhuǎn)到S103。S120 :判斷當前MBR/EBR中的第一條分區(qū)表項(該條分區(qū)表項描述了該分區(qū)的分區(qū)信息)所記錄的分區(qū)信息是否正確,是則執(zhí)行si2i,否則跳轉(zhuǎn)執(zhí)行Sm。S121 :保存該正確的分區(qū)信息,并繼續(xù)執(zhí)行S122。S122:令N = N+該正確的分區(qū)信息中記錄的該分區(qū)的扇區(qū)總數(shù)+1,繼續(xù)執(zhí)行S123。S123 :記錄該正確的分區(qū)信息所對應(yīng)的分區(qū)的結(jié)束扇區(qū)號ESN,跳轉(zhuǎn)到S103。S124 :記錄該不正確的MBR/EBR并將之編號為N,并執(zhí)行S125。S125 :使 N = N+1, OFFSET = 0,并返回執(zhí)行 S103。圖2為圖I中SllO的詳細判斷方法流程圖,即判斷當前DBR是否與不正確的MBR/EBR匹配的流程圖,包括以下步驟S201 :輸入當前已掃描的扇區(qū)總數(shù)N和前一個分區(qū)的結(jié)束扇區(qū)號ESN;S202 :設(shè)置備份DBR的標記Flag = flase,并計算與當前DBR匹配的MBR/EBR所在扇區(qū)號SSN :SSN = N-當前DBR中隱藏扇區(qū)數(shù)字段的值;S203 :判斷SSN是否等于O 是則跳轉(zhuǎn)到S204,否則跳轉(zhuǎn)到S207 ;S204 :判斷是否有不正確的MBR記錄 若否,則跳轉(zhuǎn)到S215 ;若是,則跳轉(zhuǎn)到S205 ;S205 :讀取不正確的MBR中的第一條分區(qū)表項的“本分區(qū)之前使用的扇區(qū)數(shù)”字段值,并判斷是否等于N 是則跳轉(zhuǎn)到S206,否則跳轉(zhuǎn)到S215 ;S206 :讀取不正確的MBR中的第一條分區(qū)表項,判斷此分區(qū)表項和當前DBR中描述的本分區(qū)類型和扇區(qū)總數(shù)是否相同?是則跳轉(zhuǎn)到S214,否則跳轉(zhuǎn)到S215 ;S207 :判斷SSN是否小于或等于ESN,是則跳轉(zhuǎn)到S214 ;否則跳轉(zhuǎn)到S208。S208 :查詢不正確的EBR記錄,判斷是否有編號為SSN的不正確的EBR,若是則執(zhí)行S209 ;否則執(zhí)行S210 ;S209 :判斷當前查詢到的不正確的EBR和當前DBR中描述的分區(qū)類型是否相同,是則跳轉(zhuǎn)到S213,否則跳轉(zhuǎn)到S211。S210 :判斷備份DBR的標記Flag是否為True,是則跳轉(zhuǎn)到S215 ;否則跳轉(zhuǎn)到S211。S211 :判斷當前DBR是否是FAT32分區(qū)的DBR,是則跳轉(zhuǎn)到S212 ;否則跳轉(zhuǎn)到S215。S212 :計算可能與當前DBR匹配的EBR的扇區(qū)號SSN SSN = N-當前DBR中隱藏扇區(qū)數(shù)字段的值-當前DBR中備份扇區(qū)號,并令備份DBR的標記Flag = True,跳轉(zhuǎn)到S207。此步驟中的SSN為與當前DBR匹配的EBR可能所在的扇區(qū)位置。S213 :判斷當前查詢到的不正確的EBR中記錄的自身所處分區(qū)的扇區(qū)總數(shù)和當前DBR中記錄的自身所處分區(qū)的扇區(qū)總數(shù)是否相同,是則跳轉(zhuǎn)到S214,否則跳轉(zhuǎn)到S211。其中,如果是NTFS文件系統(tǒng),分區(qū)的扇區(qū)總數(shù)為當前DBR中描述的自身所處分區(qū)的扇區(qū)總數(shù)值+1,因為分區(qū)的最后一個扇區(qū)留給備份DBR使用了。S214 :返回“有不正確的MBR/EBR與當前DBR匹配”的判斷結(jié)果,并跳轉(zhuǎn)執(zhí)行S106。S215 :返回“沒有不正確的MBR/EBR與當前DBR匹配”的判斷結(jié)果,并跳轉(zhuǎn)執(zhí)行S112。圖3為圖I中S113的詳細判斷方法流程圖,即判斷當前DBR是否是不正確的NTFS的MBR/EBR的備份DBR的流程圖,具體包括以下步驟S301 :輸入當前已掃描的扇區(qū)總數(shù)N和前一個分區(qū)的結(jié)束扇區(qū)號ESN。S302 :計算與當前DBR所匹配的EBR所在的扇區(qū)號SSN SSN = N-(當前DBR所處分區(qū)的扇區(qū)總數(shù)+當前DBR中隱藏扇區(qū)數(shù)字段的值+1); S303 :判斷SSN是否小于前一個分區(qū)的結(jié)束扇區(qū)號ESN,是則跳轉(zhuǎn)到S307 ;否則跳轉(zhuǎn)到S304 ;S304 :查詢不正確的MBR/EBR記錄,判斷是否有編號為SSN的不正確的MBR/EBR記錄;是則跳轉(zhuǎn)到S305 ;否則跳轉(zhuǎn)到S308 ;S305 :判斷當前查詢到的不正確的MBR/EBR和當前DBR中描述的分區(qū)類型是否相同,是則跳轉(zhuǎn)到S306 ;否則跳轉(zhuǎn)到S308 ;S306 :判斷所述當前查詢到的不正確的MBR/EBR中記錄的自身所處分區(qū)的扇區(qū)總數(shù)是否比當前DBR中記錄的自身所處分區(qū)的扇區(qū)總數(shù)大1,是則跳轉(zhuǎn)到S307 ;否則跳轉(zhuǎn)到S308 ;S307 :返回“有不正確的MBR/EBR與當前DBR匹配”的判斷結(jié)果,并跳轉(zhuǎn)執(zhí)行S106 ;S308 :返回“沒有不正確的MBR/EBR與當前DBR匹配”的判斷結(jié)果,并跳轉(zhuǎn)執(zhí)行S112。圖4為圖I中S114-S115的具體實施方法流程圖,即依據(jù)當前DBR信息重構(gòu)與其匹配的MBR/EBR的流程圖,包括以下步驟S401 :根據(jù)當前DBR和當前已掃描的扇區(qū)總數(shù)N計算待重構(gòu)的與當前DBR匹配的MBR/EBR所在的扇區(qū)號SSN : SSN = N-當前DBR中隱藏扇區(qū)數(shù)字段的值;S402 :判斷SSN是否等于0,是則跳轉(zhuǎn)到S403,否則跳轉(zhuǎn)到S407 ;S403 :將待重構(gòu)的與當前DBR匹配的MBR中本分區(qū)的分區(qū)表項的“本分區(qū)之前使用的扇區(qū)數(shù)”的值改為N;S404 :判斷當前DBR是否是FAT32分區(qū)的DBR,是則跳轉(zhuǎn)到S405,否則跳轉(zhuǎn)到S406 ;S405 :將待重構(gòu)的與當前DBR匹配的MBR的分區(qū)表項中本分區(qū)的扇區(qū)總數(shù)字段值改為當前DBR中記錄的自身所處分區(qū)的扇區(qū)總數(shù),并跳轉(zhuǎn)到S413 ;S406 :將待重構(gòu)的與當前DBR匹配的MBR的分區(qū)表項中本分區(qū)的扇區(qū)總數(shù)字段值改為當前DBR中記錄的自身所處分區(qū)的扇區(qū)總數(shù)+1,并跳轉(zhuǎn)到S413 ;S407 :判斷當前DBR是否是FAT32分區(qū)的DBR,是則跳轉(zhuǎn)到S408 ;否則跳轉(zhuǎn)到S410 ;S408 :將待重構(gòu)的與當前DBR匹配的EBR中本分區(qū)的扇區(qū)總數(shù)值設(shè)置為當前DBR中記錄的自身所處分區(qū)的扇區(qū)總數(shù);
S409 :將待重構(gòu)的與當前DBR匹配的EBR中本分區(qū)的結(jié)束扇區(qū)號ESN設(shè)置為ESN=N+當前DBR中記錄的自身所處分區(qū)的扇區(qū)總數(shù),并跳轉(zhuǎn)到S413 ;S410 :判斷當前DBR是否是NTFS分區(qū)的DBR 是則跳轉(zhuǎn)到S411 ;否則跳轉(zhuǎn)到S414 ;S411 :將待重構(gòu)的與當前DBR匹配的EBR中本分區(qū)的扇區(qū)總數(shù)值設(shè)置為當前DBR中記錄的自身所處分區(qū)的扇區(qū)總數(shù)+1 ;S412 :將待重構(gòu)的與 當前DBR匹配的EBR中本分區(qū)的結(jié)束扇區(qū)號ESN設(shè)置為ESN=N+當前DBR中記錄的自身所處分區(qū)的扇區(qū)總數(shù)+1 ;S413 :返回“重構(gòu)MBR/EBR成功”的信息,將重構(gòu)成功的MBR/EBR所記錄的分區(qū)信息視作正確的分區(qū)信息,并跳轉(zhuǎn)到S121 ;S414 :返回“重構(gòu)MBR/EBR失敗”的信息,并跳轉(zhuǎn)到S106。本發(fā)明提供的上述Windows磁盤分區(qū)修復方法綜合利用了 Windows系統(tǒng)磁盤分區(qū)的MBR/EBR和DBR信息,根據(jù)這些信息不同,采用不同的修復方式對Windows磁盤分區(qū)進行修復,在分區(qū)信息MBR/EBR和DBR被嚴重破壞的情況下,也能較準確的修復磁盤分區(qū),具有修復準確和快速的優(yōu)點,在數(shù)據(jù)恢復領(lǐng)域具有廣泛的適用性。顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。
權(quán)利要求
1.一種Windows磁盤分區(qū)修復方法,其特征在于,該方法包括以下步驟 51:判斷是否有未掃描的磁盤扇區(qū)?若否,則執(zhí)行S4 ;若是則依次向后掃描磁盤的未掃描扇區(qū),尋找主引導記錄MBR、擴展分區(qū)記錄EBR或操作系統(tǒng)引導記錄DBR,若當前掃描到的是DBR,則執(zhí)行S2,若當前掃描到的是MBR或EBR,則執(zhí)行S3 ; 52:判斷當前DBR是否是不正確的MBR/EBR所匹配的DBR 若是則丟棄當前DBR ;否則接著判斷當前DBR是否是備份DBR,如 果是則丟棄,否則根據(jù)當前DBR中所記錄的該分區(qū)的大小、分區(qū)類型等信息判斷該分區(qū)描述信息是否正確?是則根據(jù)當前DBR重構(gòu)與其匹配的MBR/EBR并保存該正確的分區(qū)信息,返回執(zhí)行SI,否則直接返回執(zhí)行SI ; 53:根據(jù)MBR/EBR中的分區(qū)表信息構(gòu)成分區(qū)鏈,如果構(gòu)成的分區(qū)鏈正確則保存該分區(qū)鏈信息,否則判斷當前MBR/EBR中的第一條分區(qū)表項所記錄的該分區(qū)描述信息是否正確,是則保存該正確的分區(qū)信息并返回執(zhí)行SI,否則直接返回執(zhí)行SI ; 54:將已保存的所有正確的分區(qū)信息寫入磁盤。
2.如權(quán)利要求I所述的一種Windows磁盤分區(qū)修復方法,其特征在于,所述SI之前還包括步驟打開磁盤,獲取所述磁盤的扇區(qū)總數(shù)SUM,并令前一分區(qū)的結(jié)束扇區(qū)號為O ; 所述SI包括以下步驟 步驟Al :判斷當前已掃描的磁盤扇區(qū)數(shù)N是否大于或等于所述SUM 是則跳轉(zhuǎn)到S4 ;否則跳轉(zhuǎn)到步驟A2 ;其中N的初始值設(shè)為O ; 步驟A2 :令OFFSET = 0FFSET+1,繼續(xù)執(zhí)行步驟A5 ;其中,OFFSET是當前掃描的扇區(qū)距離與其最近的前一個錯誤的MBR/EBR的扇區(qū)數(shù),所述OFFSET的初始值為O ; 步驟A3 :讀取所述磁盤的第N個扇區(qū)最后兩字節(jié)的信息,并判斷其是否為“55AA”?是則執(zhí)行步驟A5 ;否則執(zhí)行步驟A4 ; 步驟A4 :令N = N+1,并返回執(zhí)行步驟Al ; 步驟A5 :判斷所述磁盤的第N個扇區(qū)是否是MBR或EBR 是則執(zhí)行S3,否則執(zhí)行步驟A6 ; 步驟A6 :判斷所述磁盤的第N個扇區(qū)是否是DBR 是則繼續(xù)執(zhí)行S2,否則跳轉(zhuǎn)到步驟A4。
3.如權(quán)利要求2所述的一種Windows磁盤分區(qū)修復方法,其特征在于,所述S2包括 步驟BI :判斷當前OFFSET是否小于70,是則執(zhí)行步驟B2,否則執(zhí)行步驟B3 ; 步驟B2 :讀取不正確的MBR/EBR記錄,判斷是否有不正確的MBR/EBR與當前DBR匹配,如果有不正確的MBR/EBR與當前DBR匹配則跳轉(zhuǎn)到步驟A4 ;否則跳轉(zhuǎn)到步驟B4 ; 步驟B3 :判斷當前DBR是否是NTFS分區(qū)的DBR,是則執(zhí)行步驟B5,否則執(zhí)行步驟B4 ;步驟B4 :判斷當前DBR中“該分區(qū)的扇區(qū)總數(shù)”字段值是否正確,是則跳轉(zhuǎn)到步驟B6 ;否則跳轉(zhuǎn)到步驟A4; 步驟B5 :讀取不正確的MBR/EBR記錄,判斷當前DBR是否能作為NTFS分區(qū)的備份DBR與不正確的MBR/EBR匹配,是則執(zhí)行步驟A4 ;否則執(zhí)行步驟B4 ; 步驟B6 :根據(jù)當前DBR重構(gòu)與其匹配的MBR/EBR,繼續(xù)執(zhí)行步驟B7 ; 步驟B7 :判斷與當前DBR匹配的MBR/EBR是否重構(gòu)成功?若是則將重構(gòu)成功的MBR/EBR所記錄的分區(qū)信息視作正確的分區(qū)信息,并跳轉(zhuǎn)到步驟B8 ;否則跳轉(zhuǎn)到步驟A4 ; 步驟B8 :保存該正確的分區(qū)信息,并繼續(xù)執(zhí)行步驟B9 ;步驟B9 :令N = N+該正確的分區(qū)信息中記錄的該分區(qū)的扇區(qū)總數(shù)+1,繼續(xù)執(zhí)行步驟BlO ; 步驟BlO :記錄該正確的分區(qū)信息所對應(yīng)的分區(qū)的結(jié)束扇區(qū)號,跳轉(zhuǎn)到步驟Al。
4.如權(quán)利要求3所述的一種Windows磁盤分區(qū)修復方法,其特征在于,所述步驟B2的詳細判斷方法為 步驟B201 :輸入當前N和前一個分區(qū)的結(jié)束扇區(qū)號; 步驟B202 :設(shè)置備份DBR的標記Flag為flase,并計算與當前DBR匹配的MBR/EBR所在扇區(qū)號SSN SSN = N-當前DBR中隱藏扇區(qū)數(shù)字段的值; 步驟B203 :判斷SSN是否等于O 是則跳轉(zhuǎn)到步驟B204,否則跳轉(zhuǎn)到步驟B207 ; 步驟B204 :判斷是否有不正確的MBR記錄?若是,則跳轉(zhuǎn)到步驟B205 ;若否,則跳轉(zhuǎn)到步驟B215 ; 步驟B205:讀取所述不正確的MBR中的第一條分區(qū)表項的“本分區(qū)之前使用的扇區(qū)數(shù)”字段值,并判斷是否等于N 是則跳轉(zhuǎn)到步驟B206,否則跳轉(zhuǎn)到步驟B215 ; 步驟B206 :判斷所述不正確的MBR中的第一條分區(qū)表項中和當前DBR中描述的本分區(qū)類型和扇區(qū)總數(shù)是否相同?是則跳轉(zhuǎn)到步驟B214,否則跳轉(zhuǎn)到步驟B215 ; 步驟B207:判斷SSN是否小于或等于前一個分區(qū)的結(jié)束扇區(qū)號?是則跳轉(zhuǎn)到步驟B214 ;否則執(zhí)行步驟B208 ; 步驟B208 :查詢不正確的EBR記錄,判斷是否有編號為SSN的不正確的EBR,有則執(zhí)行步驟B209 ;否則執(zhí)行步驟B210 ; 步驟B209 :判斷當前查詢到的不正確的EBR和當前DBR中描述的分區(qū)類型是否相同?是則跳轉(zhuǎn)到步驟B213,否則跳轉(zhuǎn)到步驟B211 ; 步驟B210 :判斷所述備份DBR的標記Flag是否為True 是則跳轉(zhuǎn)到步驟B215 ;否則執(zhí)行步驟B211 ; 步驟B211 :判斷當前DBR是否是FAT32分區(qū)的DBR 是則執(zhí)行步驟B212 ;否則跳轉(zhuǎn)到步驟B215 ; 步驟B212 :令SSN = N-當前DBR中隱藏扇區(qū)數(shù)字段的值-當前DBR中備份扇區(qū)號,令備份DBR的標記Flag為True,并返回執(zhí)行步驟B207 ; 步驟B213 :判斷所述當前查詢到的不正確的EBR中記錄的自身所處分區(qū)的扇區(qū)總數(shù)和當前DBR中記錄的自身所處分區(qū)的扇區(qū)總數(shù)是否相同,是則跳轉(zhuǎn)到步驟B214,否則跳轉(zhuǎn)到步驟B211 ; 步驟B214 :返回“有不正確的MBR/EBR與當前DBR匹配”的判斷結(jié)果,并跳轉(zhuǎn)執(zhí)行步驟A4 ; 步驟B215 :返回“沒有不正確的MBR/EBR與當前DBR匹配”的判斷結(jié)果,并跳轉(zhuǎn)執(zhí)行步驟B4。
5.如權(quán)利要求4所述的一種Windows磁盤分區(qū)修復方法,其特征在于,所述步驟B5的詳細判斷方法為 步驟B501 :輸入當前N和前一個分區(qū)的結(jié)束扇區(qū)號; 步驟B502 :計算當前DBR所處分區(qū)的EBR所在的扇區(qū)號SSN SSN = N-(當前DBR所處分區(qū)的扇區(qū)總數(shù)+當前DBR中隱藏扇區(qū)數(shù)字段的值+1);步驟B503 :判斷SSN是否小于前一個分區(qū)的結(jié)束扇區(qū)號?是則跳轉(zhuǎn)到步驟B507 ;否則跳轉(zhuǎn)到步驟B504 ; 步驟B504 :查詢不正確的MBR/EBR記錄,判斷是否有編號為SSN的不正確MBR/EBR記錄;是則跳轉(zhuǎn)到步驟B505 ;否則跳轉(zhuǎn)到步驟B508 ; 步驟B505 :判斷當前查詢到的不正確的MBR/EBR和當前DBR中描述的分區(qū)類型是否相同,是則跳轉(zhuǎn)到步驟B506 ;否則跳轉(zhuǎn)到步驟B508 ; 步驟B506 :判斷當前查詢到的不正確的MBR/EBR中記錄的自身所處分區(qū)的扇區(qū)總數(shù)是否比當前DBR中記錄的自身所處分區(qū)的扇區(qū)總數(shù)大1,是則跳轉(zhuǎn)到步驟B507;否則跳轉(zhuǎn)到步驟 B508 ; 步驟B507 :返回“有不正確的MBR/EBR與當前DBR匹配”的判斷結(jié)果,并跳轉(zhuǎn)執(zhí)行步驟A4 ; 步驟B508 :返回“沒有不正確的MBR/EBR與當前DBR匹配”的判斷結(jié)果,并跳轉(zhuǎn)執(zhí)行步驟B4。
6.如權(quán)利要求5所述的一種Windows磁盤分區(qū)修復方法,其特征在于,所述步驟B6-步驟B7包括 步驟B601 :根據(jù)當前DBR和當前N計算待重構(gòu)的與當前DBR匹配的MBR/EBR所在的扇區(qū)號SSN :SSN = N-當前DBR中隱藏扇區(qū)數(shù)字段的值; 步驟B602 :判斷SSN是否等于O 是則跳轉(zhuǎn)到步驟B603,否則跳轉(zhuǎn)到步驟B607 ; 步驟B603 :將待重構(gòu)的與當前DBR匹配的MBR中本分區(qū)的分區(qū)表項的“本分區(qū)之前使用的扇區(qū)數(shù)”的值改為N; 步驟B604 :判斷當前DBR是否是FAT32分區(qū)的DBR 是則跳轉(zhuǎn)到步驟B605,否則跳轉(zhuǎn)到步驟B606 ; 步驟B605 :將所述待重構(gòu)的與當前DBR匹配的MBR的分區(qū)表項中本分區(qū)的扇區(qū)總數(shù)字段值改為當前DBR中記錄的自身所處分區(qū)的扇區(qū)總數(shù),并跳轉(zhuǎn)到步驟B613 ; 步驟B606 :將所述待重構(gòu)的與當前DBR匹配的MBR的分區(qū)表項中本分區(qū)的扇區(qū)總數(shù)字段值改為當前DBR中記錄的自身所處分區(qū)的扇區(qū)總數(shù)+1,并跳轉(zhuǎn)到步驟B613 ; 步驟B607 :判斷當前DBR是否是FAT32分區(qū)的DBR,是則跳轉(zhuǎn)到步驟B608 ;否則跳轉(zhuǎn)到步驟B610 ; 步驟B608 :將待重構(gòu)的與當前DBR匹配的EBR中本分區(qū)的扇區(qū)總數(shù)值設(shè)置為當前DBR中記錄的自身所處分區(qū)的扇區(qū)總數(shù),并執(zhí)行步驟B609 ; 步驟B609 :將所述待重構(gòu)的與當前DBR匹配的EBR中本分區(qū)的結(jié)束扇區(qū)號設(shè)置為N+當前DBR中記錄的自身所處分區(qū)的扇區(qū)總數(shù),并跳轉(zhuǎn)到步驟B613 ; 步驟B610 :判斷當前DBR是否是NTFS分區(qū)的DBR 是則跳轉(zhuǎn)到步驟B611 ;否則跳轉(zhuǎn)到步驟B614 ; 步驟B611 :將待重構(gòu)的與當前DBR匹配的EBR中本分區(qū)的扇區(qū)總數(shù)值設(shè)置為當前DBR中記錄的自身所處分區(qū)的扇區(qū)總數(shù)+1 ; 步驟B612 :將待重構(gòu)的與當前DBR匹配的EBR中本分區(qū)的結(jié)束扇區(qū)號設(shè)置為N+當前DBR中記錄的自身所處分區(qū)的扇區(qū)總數(shù)+1 ; 步驟B613 :返回“重構(gòu)MBR/EBR成功”的信息,將重構(gòu)成功的MBR/EBR所記錄的分區(qū)信息視作正確的分區(qū)信息,并跳轉(zhuǎn)到步驟B8 ; 步驟B614 :返回“重構(gòu)MBR/EBR失敗”的信息,并跳轉(zhuǎn)到步驟A4。
7.如權(quán)利要求2至6任一項所述的一種Windows磁盤分區(qū)修復方法,其特征在于,所述S3包括 步驟Cl :讀取MBR/EBR中的分區(qū)表信息,并判斷是否能構(gòu)成分區(qū)鏈,是則跳轉(zhuǎn)到步驟C2 ;否則跳轉(zhuǎn)到步驟C5 ; 步驟C2 :判斷構(gòu)成的分區(qū)鏈是否正確,是則執(zhí)行步驟C3,否則執(zhí)行步驟C5 ; 步驟C3 :保存所述分區(qū)鏈的信息,并使N = N+所述分區(qū)鏈跨過的扇區(qū)數(shù)+1,并繼續(xù)執(zhí)行步驟C4 ; 步驟C4 :記錄所述分區(qū)鏈最后一個分區(qū)的結(jié)束扇區(qū)號,并跳轉(zhuǎn)到步驟Al ; 步驟C5 :判斷當前MBR/EBR中的第一條分區(qū)表項所記錄的分區(qū)信息是否正確,是則執(zhí)行步驟C6,否則跳轉(zhuǎn)執(zhí)行步驟C9 ; 步驟C6 :保存該正確的分區(qū)信息,并繼續(xù)執(zhí)行步驟C7 ; 步驟C7 :令N = N+該正確的分區(qū)信息中記錄的該分區(qū)的扇區(qū)總數(shù)+1,繼續(xù)執(zhí)行步驟C8 ; 步驟CS :記錄該正確的分區(qū)信息所對應(yīng)的分區(qū)的結(jié)束扇區(qū)號,跳轉(zhuǎn)到步驟Al ; 步驟C9 :記錄該不正確的MBR/EBR并將之編號為N,并執(zhí)行步驟ClO ; 步驟ClO :使N = N+1, OFFSET = 0,并返回執(zhí)行步驟Al。
8.如權(quán)利要求7所述的一種Windows磁盤分區(qū)修復方法,其特征在于,所述步驟A5的詳細判斷方法為首先判斷當前N是否為O 是則所述磁盤的第N個扇區(qū)為MBR;否則再判斷所述磁盤的第N個扇區(qū)的前兩個字節(jié)信息是否為“ 00 00 ”,若是則所述磁盤的第N個扇區(qū)為EBR,否則所述磁盤的第N個扇區(qū)既不是MBR也不是EBR。
9.如權(quán)利要求8所述的一種Windows磁盤分區(qū)修復方法,其特征在于,所述步驟A6的判斷方法為讀取所述磁盤的第N個扇區(qū)的前三個字節(jié),若所述磁盤的第N個扇區(qū)的前三個字節(jié)是“EB 52 90”或“EB 58 90”,則所述磁盤的第N個扇區(qū)為DBR ;否則所述磁盤的第N個扇區(qū)不是DBR。
全文摘要
本發(fā)明提供一種Windows磁盤分區(qū)修復方法,該方法依次向后掃描磁盤的未掃描扇區(qū),查找其中的MBR、EBR或DBR信息;若當前掃描到的是DBR則判斷其是否是不正確MBR/EBR匹配的DBR?是則丟棄;否則判斷該DBR是否是備份DBR,是則丟棄,否則判斷該DBR所記錄的該分區(qū)信息是否正確?是則根據(jù)該DBR重構(gòu)與其匹配的MBR/EBR并保存該正確的分區(qū)信息;若掃描到的是MBR/EBR,則首先構(gòu)成分區(qū)鏈,如果該分區(qū)鏈正確則保存該分區(qū)鏈信息,否則判斷并保存該MBR/EBR記錄的正確的本分區(qū)信息;最后在所有扇區(qū)掃描完后將已保存的所有正確的分區(qū)信息寫入磁盤。本發(fā)明能快速準確修復分區(qū)信息被嚴重破壞的磁盤。
文檔編號G06F11/00GK102819462SQ20121027714
公開日2012年12月12日 申請日期2012年8月6日 優(yōu)先權(quán)日2012年8月6日
發(fā)明者王大彬, 徐吉兵 申請人:廈門市美亞柏科信息股份有限公司