一种Windows系统磁盘分区的修复方法

文档序号:6374507阅读:200来源:国知局
专利名称:一种Windows系统磁盘分区的修复方法
技术领域
本发明涉及计算机安全领域,尤其涉及一种Windows系统磁盘分区的修复方法。
背景技术
随着信息时代的高速发展,政府、企业以及个人越来越多地关注信息的安全。信息安全的核心是数据的安全,而病毒感染、误操作、意外事件等众多因素都在威胁着数据的安全,一旦重要数据被破坏和丢失,其损失往往相当严重,甚至难以弥补。然而,在实际应用中,又很难避免出现数据损坏与丢失的现象。因此,对那些遭受破坏的重要数据进行有效地恢复是相当必要的。

目前,对于数据恢复的软件及其方法有很多,其中,分区修复类软件是一种间接地恢复数据方式,即通过修复分区来找回丢失的数据。这种分区修复方式的优点是恢复速度极快,而且一旦分区修复成功其中丢失的文件也就都能随之而恢复。但是,当前的分区修复 软件针对误GHOST、误格式化等造成的分区丢失,只能扫描出部分分区信息,甚至有些扫描出的信息是错误的,当利用这些错误的信息来恢复分区信息,将导致对磁盘的二次损坏;而且传统的分区修复软件无法修复对于误GHOST后再次分区或者其他方式的再次破坏的磁盘。因此,目前急需一种在分区信息被严重破坏的情况下仍能修复磁盘分区的方法。

发明内容
本发明提供一种Windows系统磁盘分区的修复方法,用于解决现有的分区修复技术无法修复Windows系统广泛使用的FAT32和NTFS文件系统的分区信息被严重破坏的磁盘分区的问题,本发明提供的磁盘分区的修复方法能够对FAT32/NTFS分区信息被严重破坏的磁盘进行准确的修复,修复速度快,适用性广。本发明提供的一种Windows磁盘分区修复方法,该方法包括以下步骤SI :判断是否有未扫描的磁盘扇区?若否,则执行S4 ;若是则依次向后扫描磁盘的未扫描扇区,寻找主引导记录MBR、扩展分区记录EBR或操作系统引导记录DBR,若当前扫描到的是DBR,则执行S2,若当前扫描到的是MBR或EBR,则执行S3 ;S2 :判断当前DBR是否是不正确的MBR/EBR所匹配的DBR 若是则丢弃当前DBR ;否则接着判断当前DBR是否是备份DBR,如果是则丢弃,否则根据当前DBR中所记录的该分区的大小、分区类型等信息判断该分区描述信息是否正确?是则根据当前DBR重构与其匹配的MBR/EBR并保存该正确的分区信息,返回执行SI,否则直接返回执行SI ;S3 :根据MBR/EBR中的分区表信息构成分区链,如果构成的分区链正确则保存该分区链信息,否则判断当前MBR/EBR中的第一条分区表项所记录的该分区描述信息是否正确,是则保存该正确的分区信息并返回执行SI,否则直接返回执行SI ;S4 :将已保存的所有正确的分区信息写入磁盘。优选地,上述Windows磁盘分区修复方法中,所述SI之前还包括步骤打开磁盘,获取所述磁盘的扇区总数SUM,并令前一分区的结束扇区号为O ;
所述SI具体包括以下步骤步骤Al :判断当前已扫描的磁盘扇区数N是否大于或等于所述SUM 是则跳转到
S4;否则跳转到步骤A2 ;其中N的初始值设为O ;步骤A2 :令OFFSET = 0FFSET+1,继续执行步骤A5 ;其中,OFFSET是当前扫描的扇区距离与其最近的前一个错误的MBR/EBR的扇区数,所述OFFSET的初始值为O ;步骤A3 :读取所 述磁盘的第N个扇区最后两字节的信息,并判断其是否为“55AA”?是则执行步骤A5 ;否则执行步骤A4 ;步骤A4 :令N = N+1,并返回执行步骤Al ;步骤A5 :判断所述磁盘的第N个扇区是否是MBR或EBR 是则执行S3,否则执行步骤A6 ;步骤A6 :判断所述磁盘的第N个扇区是否是DBR 是则继续执行S2,否则跳转到步骤A4。优选地,上述Windows磁盘分区修复方法中,所述S2具体包括步骤BI :判断当前OFFSET是否小于70,是则执行步骤B2,否则执行步骤B3 ;步骤B2 :读取不正确的MBR/EBR记录,判断是否有不正确的MBR/EBR与当前DBR匹配,如果有不正确的MBR/EBR与当前DBR匹配则跳转到步骤A4 ;否则跳转到步骤B4 ;步骤B3 :判断当前DBR是否是NTFS分区的DBR,是则执行步骤B5,否则执行步骤B4 ;步骤B4 :判断当前DBR中“该分区的扇区总数”字段值是否正确,是则跳转到步骤B6;否则跳转到步骤A4;步骤B5 :读取不正确的MBR/EBR记录,判断当前DBR是否能作为NTFS分区的备份DBR与不正确的MBR/EBR匹配,是则执行步骤A4 ;否则执行步骤B4 ;步骤B6 :根据当前DBR重构与其匹配的MBR/EBR,继续执行步骤B7 ;步骤B7 :判断与当前DBR匹配的MBR/EBR是否重构成功?若是则将重构成功的MBR/EBR所记录的分区信息视作正确的分区信息,并跳转到步骤B8 ;否则跳转到步骤A4 ;步骤B8 :保存该正确的分区信息,并继续执行步骤B9 ;步骤B9 :令N = N+该正确的分区信息中记录的该分区的扇区总数+1,继续执行步骤 BlO ;步骤BlO :记录该正确的分区信息所对应的分区的结束扇区号,跳转到步骤Al。优选地,上述Windows磁盘分区修复方法中,所述步骤B2的详细判断方法为步骤B201 :输入当前N和前一个分区的结束扇区号;步骤B202 :设置备份DBR的标记Flag为flase,并计算与当前DBR匹配的MBR/EBR所在扇区号SSN SSN = N-当前DBR中隐藏扇区数字段的值;步骤B203 :判断SSN是否等于O 是则跳转到步骤B204,否则跳转到步骤B207 ;步骤B204 :判断是否有不正确的MBR记录?若是,则跳转到步骤B205 ;若否,则跳转到步骤B215 ;步骤B205 :读取所述不正确的MBR中的第一条分区表项的“本分区之前使用的扇区数”字段值,并判断是否等于N 是则跳转到步骤B206,否则跳转到步骤B215 ;步骤B206 :判断所述不正确的MBR中的第一条分区表项中和当前DBR中描述的本分区类型和扇区总数是否相同?是则跳转到步骤B214,否则跳转到步骤B215 ;步骤B207 :判断SSN是否小于或等于前一个分区的结束扇区号?是则跳转到步骤B214 ;否则执行步骤B208 ;步骤B208 :查询不正确的EBR记录,判断是否有编号为SSN的不正确的EBR,有则执行步骤B209 ;否则执行步骤B210 ;步骤B209 :判断当前查询到的不正确的EBR和当前DBR中描述的分区类型是否相同?是则跳转到步骤B213,否则跳转到步骤B211 ;步骤B210 :判断所述备份DBR的标记Flag是否为True 是则跳转到步骤B215 ;否则执行步骤B211 ;步骤B211 :判断当前DBR是否是FAT32分区的DBR 是则执行步骤B212 ;否则跳 转到步骤B215 ;步骤B212 =^SSN = N-当前DBR中隐藏扇区数字段的值-当前DBR中备份扇区号,令备份DBR的标记Flag为True,并返回执行步骤B207 ;步骤B213 :判断所述当前查询到的不正确的EBR中记录的自身所处分区的扇区总数和当前DBR中记录的自身所处分区的扇区总数是否相同,是则跳转到步骤B214,否则跳转到步骤B211 ;步骤B214 :返回“有不正确的MBR/EBR与当前DBR匹配”的判断结果,并跳转执行步骤A4 ;步骤B215 :返回“没有不正确的MBR/EBR与当前DBR匹配”的判断结果,并跳转执行步骤B4。优选地,上述Windows磁盘分区修复方法中,所述步骤B5的详细判断方法为步骤B501 :输入当前N和前一个分区的结束扇区号;步骤B502 :计算当前DBR所处分区的EBR所在的扇区号SSN :SSN = N-(当前DBR所处分区的扇区总数+当前DBR中隐藏扇区数字段的值+1);步骤B503 :判断SSN是否小于前一个分区的结束扇区号?是则跳转到步骤B507 ;否则跳转到步骤B504 ;步骤B504 :查询不正确的MBR/EBR记录,判断是否有编号为SSN的不正确MBR/EBR记录;是则跳转到步骤B505 ;否则跳转到步骤B508 ;步骤B505 :判断当前查询到的不正确的MBR/EBR和当前DBR中描述的分区类型是否相同,是则跳转到步骤B506 ;否则跳转到步骤B508 ;步骤B506 :判断当前查询到的不正确的MBR/EBR中记录的自身所处分区的扇区总数是否比当前DBR中记录的自身所处分区的扇区总数大1,是则跳转到步骤B507 ;否则跳转到步骤B508 ;步骤B507 :返回“有不正确的MBR/EBR与当前DBR匹配”的判断结果,并跳转执行步骤A4 ;步骤B508 :返回“没有不正确的MBR/EBR与当前DBR匹配”的判断结果,并跳转执行步骤B4。优选地,上述Windows磁盘分区修复方法中,所述步骤B6-步骤B7包括步骤B601 :根据当前DBR和当前N计算待重构的与当前DBR匹配的MBR/EBR所在的扇区号SSN : SSN = N-当前DBR中隐藏扇区数字段的值;步骤B602 :判断SSN是否等于O 是则跳转到步骤B603,否则跳转到步骤B607 ;步骤B603 :将待重构的与当前DBR匹配的MBR中本分区的分区表项的“本分区之前使用的扇区数”的值改为N;步骤B604 :判断当前DBR是否是FAT32分区的DBR 是则跳转到步骤B605,否则跳转到步骤B606 ;步骤B605 :将所述待重构的与当前DBR匹配的MBR的分区表项中本分区的扇区总数字段值改为当前DBR中记录的自身所处 分区的扇区总数,并跳转到步骤B613 ;步骤B606 :将所述待重构的与当前DBR匹配的MBR的分区表项中本分区的扇区总数字段值改为当前DBR中记录的自身所处分区的扇区总数+1,并跳转到步骤B613 ;步骤B607 :判断当前DBR是否是FAT32分区的DBR,是则跳转到步骤B608 ;否则跳转到步骤B610 ;步骤B608 :将待重构的与当前DBR匹配的EBR中本分区的扇区总数值设置为当前DBR中记录的自身所处分区的扇区总数,并执行步骤B609 ;步骤B609 :将所述待重构的与当前DBR匹配的EBR中本分区的结束扇区号设置为N+当前DBR中记录的自身所处分区的扇区总数,并跳转到步骤B613 步骤B610 :判断当前DBR是否是NTFS分区的DBR 是则跳转到步骤B611 ;否则跳转到步骤B614 ;步骤B611 :将待重构的与当前DBR匹配的EBR中本分区的扇区总数值设置为当前DBR中记录的自身所处分区的扇区总数+1 ;步骤B612 :将待重构的与当前DBR匹配的EBR中本分区的结束扇区号设置为N+当前DBR中记录的自身所处分区的扇区总数+1 ;步骤B613 :返回“重构MBR/EBR成功”的信息,将重构成功的MBR/EBR所记录的分区信息视作正确的分区信息,并跳转到步骤B8 ;步骤B614 :返回“重构MBR/EBR失败”的信息,并跳转到步骤A4。优选地,上述的任一种Windows磁盘分区修复方法中,所述S3包括步骤Cl :读取MBR/EBR中的分区表信息,并判断是否能构成分区链,是则跳转到步骤C2 ;否则跳转到步骤C5 ;步骤C2 :判断构成的分区链是否正确,是则执行步骤C3,否则执行步骤C5 ;步骤C3 :保存所述分区链的信息,并使N = N+所述分区链跨过的扇区数+1,并继续执行步骤C4 ;步骤C4 :记录所述分区链最后一个分区的结束扇区号,并跳转到步骤Al ;步骤C5 :判断当前MBR/EBR中的第一条分区表项所记录的分区信息是否正确,是则执行步骤C6,否则跳转执行步骤C9 ;步骤C6 :保存该正确的分区信息,并继续执行步骤C7 ;步骤C7 :令N = N+该正确的分区信息中记录的该分区的扇区总数+1,继续执行步骤C8 ;步骤CS :记录该正确的分区信息所对应的分区的结束扇区号,跳转到步骤Al ;步骤C9 :记录该不正确的MBR/EBR并将之编号为N,并执行步骤ClO ;
步骤CIO :使N = N+1, OFFSET = 0,并返回执行步骤Al。优选地,上述Windows磁盘分区修复方法中,所述步骤A5的详细判断方法为首先判断当前N是否为O 是则所述磁盘的第N个扇区为MBR;否则再判断所述磁盘的第N个扇区的前两个字节信息是否为“00 00”,若是则所述磁盘的第N个扇区为EBR,否则所述磁盘的第N个扇区既不是MBR也不是EBR。优选地,上述Windows磁盘分区修复方法中,所述步骤A6的判断方法为读取所述磁盘的第N个扇区的前三个字节,若所述磁盘的第N个扇区的前三个字节是“EB 52 90”或“EB 58 90”,则所述磁盘的第N个扇区为DBR ;否则所述磁盘的第N个扇区不是DBR。本发明的有益效果是综合利用了 Windows系统磁盘分区的MBR/EBR和DBR信息,根据这些信息不同,采用不同的修复方式对Windows磁盘分区进行修复,在分区信息MBR/EBR和DBR被严重破坏的情况下,也能较准确的修复磁盘分区,具有修复准确和快速的优 点,在数据恢复领域具有广泛的适用性。


图I是本发明实施例提供的一种Windows磁盘分区修复方法的详细流程图;图2是图I中SllO的详细判断方法流程图;图3是图I中SI 13的详细判断方法流程图;图4为图I中S114-S115的具体实施方法流程图。
具体实施例方式以下结合附图,具体说明本发明实施例。本发明实施例提供的一种Windows磁盘分区修复方法,该方法包括以下步骤SI :判断是否有未扫描的磁盘扇区?若否,则执行S4 ;若是则依次向后扫描磁盘未扫描扇区,寻找主引导记录MBR、扩展分区记录EBR或操作系统引导记录DBR,若当前扫描到的是DBR,则执行S2,若当前扫描到的是MBR或EBR,则执行S3。此步骤是针对Windows下常见的FAT32和NTFS文件系统分区的磁盘进行的扫描。S2 :判断当前DBR是否是不正确的MBR/EBR所匹配的DBR 若是则丢弃当前DBR ;否则接着判断该DBR是否是备份DBR,如果是则丢弃,否则根据当前DBR中所记录的该分区的大小、分区类型信息判断该分区描述信息是否正确?是则根据当前DBR重构与其匹配的MBR/EBR并保存该正确的分区信息,返回执行SI,否则直接返回执行SI。S3 :根据MBR/EBR中的分区表(Disk Partition Table, DPT)信息构成分区链,判断构成的分区链是否正确,如果正确则保存该分区链信息,否则判断当前MBR/EBR中的第一条分区表项所记录的该分区描述信息是否正确,是则保存该正确的分区信息并返回执行SI,否则直接返回执行SI。S4 :将已保存的所有正确的分区信息写入磁盘。图I为本发明实施例提供的一种Windows磁盘分区修复方法的详细流程图,图I中S103-S108为本发明提供的上述方法中SI的详细流程;S109-S115以及S121-S123所组成的流程为本发明提供的上述方法中的S2的详细实施方法;S116-S125所组成的流程为本发明提供的上述方法中的S3的详细实施方法。具体地,图I所示方法包括以下步骤
SlOl :打开磁盘。S102 :获取磁盘的扇区总数SUM,并令前一分区的结束扇区号ESN = O。S103 :判断当前已扫描的磁盘扇区数N是否大于或等于磁盘的扇区总数SUM,是则跳转到S4 ;否则跳转到S104。其中N的初始值设为O ;此步骤相当于步骤SI中的“判断是否有未扫描的磁盘扇区”。S104 :令OFFSET = 0FFSET+1,其中OFFSET是当前扫描的扇区距离与其最近的前一个错误的MBR/EBR的扇区数,初始值为O。S105 :读取磁盘的第N个扇区最后两字节的信息,并判断其是否为“55AA”?是则执行S107 ;否则执行S106。此步骤中,由于MBR/EBR/DBR信息的结束标 志均为“55AA”,因此采用这两字节进行判断。S106 :令N = N+1,并返回执行S103。此步骤使已扫描扇区数N加1,即继续扫描磁盘的下一个扇区。S107 :判断磁盘的第N个扇区是否是MBR或EBR,是则跳转到S116,否则跳转到SlOS0此步骤的具体判断的过程是首先判断当前的N是否为0,是O则磁盘的第N个扇区为MBR ;否则再判断磁盘的第N个扇区的前两个字节信息是否为“00 00”,是则磁盘的第N个扇区为EBR,否则磁盘的第N个扇区既不是MBR也不是EBR。S108 :判断磁盘的第N个扇区是否是DBR,是则继续执行S109,否则跳转到S106。其中,DBR的判断方法为读取磁盘的第N个扇区的前三个字节信息,如果是“EB 52 90”或“EB 58 90”,则为DBR;如果不是,则不是DBR。S109 :判断当前OFFSET是否小于70,是则跳转到S110,否则跳转到Slll0其中,由于同一分区DBR —般会偏移该分区MBR/EBR的扇区数小于/等于63,从而FAT32的备份DBR —般偏移分区的EBR的扇区数应小于/等于69,因为FAT32备份DBR偏移DBR的扇区数一般为6,故此处采用OFFSET小于70作为当前DBR有可能是属于前面某个不正确的MBR/EBR的DBR/备份DBR的判定依据。而当OFFSET不小于70时则当前DBR有可能是NTFS文件系统的备份DBR。SllO :读取不正确的MBR/EBR记录,判断是否有不正确的MBR/EBR与当前DBR匹配,如果有不正确的MBR/EBR与当前DBR匹配则跳转到S106 ;否则跳转到S112。其中,当目前没有不正确的MBR/EBR记录时,认为没有不正确的MBR/EBR与当前DBR匹配。此步骤的具体实施过程见图2所示,后面再进行详细说明。S111 :判断当前DBR是否是NTFS分区的DBR,是则执行S113,否则执行S112。S112 :判断当前DBR中“该分区的扇区总数”字段值是否正确,是则跳转到S114 ;否则跳转到S106。S113 :读取不正确的MBR/EBR记录,判断当前DBR是否能作为NTFS分区的备份DBR与不正确的MBR/EBR匹配,是则跳转到S106 ;否则跳转到S112。其中,当目前没有不正确的MBR/EBR记录时,认为当前DBR不能作为NTFS分区的备份DBR与不正确的MBR/EBR匹配,跳转执行步骤S112。此步骤的具体实施过程见图3所示,后面再进行详细说明。SI 14 :根据当前DBR重构与其匹配的MBR/EBR。S115 :判断与当前DBR匹配的MBR/EBR是否重构成功,是则将重构成功的MBR/EBR所记录的分区信息视作正确的分区信息,并跳转到S121 ;否则跳转到S106。其中重构过程如图5所示。S116:读取MBR/EBR中的分区表信息,并判断是否能构成分区链,是则跳转到S117 ;否则跳转到S120。S117 :判断构成的分区链是否正确,是则执行S118,否则执行S120。S118 :保存所述分区链信息,并使N = N+此分区链跨过的扇区数+1,并继续执行S119。S119 :记录所述分区链 最后一个分区的结束扇区号ESN,并跳转到S103。S120 :判断当前MBR/EBR中的第一条分区表项(该条分区表项描述了该分区的分区信息)所记录的分区信息是否正确,是则执行si2i,否则跳转执行Sm。S121 :保存该正确的分区信息,并继续执行S122。S122:令N = N+该正确的分区信息中记录的该分区的扇区总数+1,继续执行S123。S123 :记录该正确的分区信息所对应的分区的结束扇区号ESN,跳转到S103。S124 :记录该不正确的MBR/EBR并将之编号为N,并执行S125。S125 :使 N = N+1, OFFSET = 0,并返回执行 S103。图2为图I中SllO的详细判断方法流程图,即判断当前DBR是否与不正确的MBR/EBR匹配的流程图,包括以下步骤S201 :输入当前已扫描的扇区总数N和前一个分区的结束扇区号ESN;S202 :设置备份DBR的标记Flag = flase,并计算与当前DBR匹配的MBR/EBR所在扇区号SSN :SSN = N-当前DBR中隐藏扇区数字段的值;S203 :判断SSN是否等于O 是则跳转到S204,否则跳转到S207 ;S204 :判断是否有不正确的MBR记录 若否,则跳转到S215 ;若是,则跳转到S205 ;S205 :读取不正确的MBR中的第一条分区表项的“本分区之前使用的扇区数”字段值,并判断是否等于N 是则跳转到S206,否则跳转到S215 ;S206 :读取不正确的MBR中的第一条分区表项,判断此分区表项和当前DBR中描述的本分区类型和扇区总数是否相同?是则跳转到S214,否则跳转到S215 ;S207 :判断SSN是否小于或等于ESN,是则跳转到S214 ;否则跳转到S208。S208 :查询不正确的EBR记录,判断是否有编号为SSN的不正确的EBR,若是则执行S209 ;否则执行S210 ;S209 :判断当前查询到的不正确的EBR和当前DBR中描述的分区类型是否相同,是则跳转到S213,否则跳转到S211。S210 :判断备份DBR的标记Flag是否为True,是则跳转到S215 ;否则跳转到S211。S211 :判断当前DBR是否是FAT32分区的DBR,是则跳转到S212 ;否则跳转到S215。S212 :计算可能与当前DBR匹配的EBR的扇区号SSN SSN = N-当前DBR中隐藏扇区数字段的值-当前DBR中备份扇区号,并令备份DBR的标记Flag = True,跳转到S207。此步骤中的SSN为与当前DBR匹配的EBR可能所在的扇区位置。S213 :判断当前查询到的不正确的EBR中记录的自身所处分区的扇区总数和当前DBR中记录的自身所处分区的扇区总数是否相同,是则跳转到S214,否则跳转到S211。其中,如果是NTFS文件系统,分区的扇区总数为当前DBR中描述的自身所处分区的扇区总数值+1,因为分区的最后一个扇区留给备份DBR使用了。S214 :返回“有不正确的MBR/EBR与当前DBR匹配”的判断结果,并跳转执行S106。S215 :返回“没有不正确的MBR/EBR与当前DBR匹配”的判断结果,并跳转执行S112。图3为图I中S113的详细判断方法流程图,即判断当前DBR是否是不正确的NTFS的MBR/EBR的备份DBR的流程图,具体包括以下步骤S301 :输入当前已扫描的扇区总数N和前一个分区的结束扇区号ESN。S302 :计算与当前DBR所匹配的EBR所在的扇区号SSN SSN = N-(当前DBR所处分区的扇区总数+当前DBR中隐藏扇区数字段的值+1); S303 :判断SSN是否小于前一个分区的结束扇区号ESN,是则跳转到S307 ;否则跳转到S304 ;S304 :查询不正确的MBR/EBR记录,判断是否有编号为SSN的不正确的MBR/EBR记录;是则跳转到S305 ;否则跳转到S308 ;S305 :判断当前查询到的不正确的MBR/EBR和当前DBR中描述的分区类型是否相同,是则跳转到S306 ;否则跳转到S308 ;S306 :判断所述当前查询到的不正确的MBR/EBR中记录的自身所处分区的扇区总数是否比当前DBR中记录的自身所处分区的扇区总数大1,是则跳转到S307 ;否则跳转到S308 ;S307 :返回“有不正确的MBR/EBR与当前DBR匹配”的判断结果,并跳转执行S106 ;S308 :返回“没有不正确的MBR/EBR与当前DBR匹配”的判断结果,并跳转执行S112。图4为图I中S114-S115的具体实施方法流程图,即依据当前DBR信息重构与其匹配的MBR/EBR的流程图,包括以下步骤S401 :根据当前DBR和当前已扫描的扇区总数N计算待重构的与当前DBR匹配的MBR/EBR所在的扇区号SSN : SSN = N-当前DBR中隐藏扇区数字段的值;S402 :判断SSN是否等于0,是则跳转到S403,否则跳转到S407 ;S403 :将待重构的与当前DBR匹配的MBR中本分区的分区表项的“本分区之前使用的扇区数”的值改为N;S404 :判断当前DBR是否是FAT32分区的DBR,是则跳转到S405,否则跳转到S406 ;S405 :将待重构的与当前DBR匹配的MBR的分区表项中本分区的扇区总数字段值改为当前DBR中记录的自身所处分区的扇区总数,并跳转到S413 ;S406 :将待重构的与当前DBR匹配的MBR的分区表项中本分区的扇区总数字段值改为当前DBR中记录的自身所处分区的扇区总数+1,并跳转到S413 ;S407 :判断当前DBR是否是FAT32分区的DBR,是则跳转到S408 ;否则跳转到S410 ;S408 :将待重构的与当前DBR匹配的EBR中本分区的扇区总数值设置为当前DBR中记录的自身所处分区的扇区总数;
S409 :将待重构的与当前DBR匹配的EBR中本分区的结束扇区号ESN设置为ESN=N+当前DBR中记录的自身所处分区的扇区总数,并跳转到S413 ;S410 :判断当前DBR是否是NTFS分区的DBR 是则跳转到S411 ;否则跳转到S414 ;S411 :将待重构的与当前DBR匹配的EBR中本分区的扇区总数值设置为当前DBR中记录的自身所处分区的扇区总数+1 ;S412 :将待重构的与 当前DBR匹配的EBR中本分区的结束扇区号ESN设置为ESN=N+当前DBR中记录的自身所处分区的扇区总数+1 ;S413 :返回“重构MBR/EBR成功”的信息,将重构成功的MBR/EBR所记录的分区信息视作正确的分区信息,并跳转到S121 ;S414 :返回“重构MBR/EBR失败”的信息,并跳转到S106。本发明提供的上述Windows磁盘分区修复方法综合利用了 Windows系统磁盘分区的MBR/EBR和DBR信息,根据这些信息不同,采用不同的修复方式对Windows磁盘分区进行修复,在分区信息MBR/EBR和DBR被严重破坏的情况下,也能较准确的修复磁盘分区,具有修复准确和快速的优点,在数据恢复领域具有广泛的适用性。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
权利要求
1.一种Windows磁盘分区修复方法,其特征在于,该方法包括以下步骤 51:判断是否有未扫描的磁盘扇区?若否,则执行S4 ;若是则依次向后扫描磁盘的未扫描扇区,寻找主引导记录MBR、扩展分区记录EBR或操作系统引导记录DBR,若当前扫描到的是DBR,则执行S2,若当前扫描到的是MBR或EBR,则执行S3 ; 52:判断当前DBR是否是不正确的MBR/EBR所匹配的DBR 若是则丢弃当前DBR ;否则接着判断当前DBR是否是备份DBR,如 果是则丢弃,否则根据当前DBR中所记录的该分区的大小、分区类型等信息判断该分区描述信息是否正确?是则根据当前DBR重构与其匹配的MBR/EBR并保存该正确的分区信息,返回执行SI,否则直接返回执行SI ; 53:根据MBR/EBR中的分区表信息构成分区链,如果构成的分区链正确则保存该分区链信息,否则判断当前MBR/EBR中的第一条分区表项所记录的该分区描述信息是否正确,是则保存该正确的分区信息并返回执行SI,否则直接返回执行SI ; 54:将已保存的所有正确的分区信息写入磁盘。
2.如权利要求I所述的一种Windows磁盘分区修复方法,其特征在于,所述SI之前还包括步骤打开磁盘,获取所述磁盘的扇区总数SUM,并令前一分区的结束扇区号为O ; 所述SI包括以下步骤 步骤Al :判断当前已扫描的磁盘扇区数N是否大于或等于所述SUM 是则跳转到S4 ;否则跳转到步骤A2 ;其中N的初始值设为O ; 步骤A2 :令OFFSET = 0FFSET+1,继续执行步骤A5 ;其中,OFFSET是当前扫描的扇区距离与其最近的前一个错误的MBR/EBR的扇区数,所述OFFSET的初始值为O ; 步骤A3 :读取所述磁盘的第N个扇区最后两字节的信息,并判断其是否为“55AA”?是则执行步骤A5 ;否则执行步骤A4 ; 步骤A4 :令N = N+1,并返回执行步骤Al ; 步骤A5 :判断所述磁盘的第N个扇区是否是MBR或EBR 是则执行S3,否则执行步骤A6 ; 步骤A6 :判断所述磁盘的第N个扇区是否是DBR 是则继续执行S2,否则跳转到步骤A4。
3.如权利要求2所述的一种Windows磁盘分区修复方法,其特征在于,所述S2包括 步骤BI :判断当前OFFSET是否小于70,是则执行步骤B2,否则执行步骤B3 ; 步骤B2 :读取不正确的MBR/EBR记录,判断是否有不正确的MBR/EBR与当前DBR匹配,如果有不正确的MBR/EBR与当前DBR匹配则跳转到步骤A4 ;否则跳转到步骤B4 ; 步骤B3 :判断当前DBR是否是NTFS分区的DBR,是则执行步骤B5,否则执行步骤B4 ;步骤B4 :判断当前DBR中“该分区的扇区总数”字段值是否正确,是则跳转到步骤B6 ;否则跳转到步骤A4; 步骤B5 :读取不正确的MBR/EBR记录,判断当前DBR是否能作为NTFS分区的备份DBR与不正确的MBR/EBR匹配,是则执行步骤A4 ;否则执行步骤B4 ; 步骤B6 :根据当前DBR重构与其匹配的MBR/EBR,继续执行步骤B7 ; 步骤B7 :判断与当前DBR匹配的MBR/EBR是否重构成功?若是则将重构成功的MBR/EBR所记录的分区信息视作正确的分区信息,并跳转到步骤B8 ;否则跳转到步骤A4 ; 步骤B8 :保存该正确的分区信息,并继续执行步骤B9 ;步骤B9 :令N = N+该正确的分区信息中记录的该分区的扇区总数+1,继续执行步骤BlO ; 步骤BlO :记录该正确的分区信息所对应的分区的结束扇区号,跳转到步骤Al。
4.如权利要求3所述的一种Windows磁盘分区修复方法,其特征在于,所述步骤B2的详细判断方法为 步骤B201 :输入当前N和前一个分区的结束扇区号; 步骤B202 :设置备份DBR的标记Flag为flase,并计算与当前DBR匹配的MBR/EBR所在扇区号SSN SSN = N-当前DBR中隐藏扇区数字段的值; 步骤B203 :判断SSN是否等于O 是则跳转到步骤B204,否则跳转到步骤B207 ; 步骤B204 :判断是否有不正确的MBR记录?若是,则跳转到步骤B205 ;若否,则跳转到步骤B215 ; 步骤B205:读取所述不正确的MBR中的第一条分区表项的“本分区之前使用的扇区数”字段值,并判断是否等于N 是则跳转到步骤B206,否则跳转到步骤B215 ; 步骤B206 :判断所述不正确的MBR中的第一条分区表项中和当前DBR中描述的本分区类型和扇区总数是否相同?是则跳转到步骤B214,否则跳转到步骤B215 ; 步骤B207:判断SSN是否小于或等于前一个分区的结束扇区号?是则跳转到步骤B214 ;否则执行步骤B208 ; 步骤B208 :查询不正确的EBR记录,判断是否有编号为SSN的不正确的EBR,有则执行步骤B209 ;否则执行步骤B210 ; 步骤B209 :判断当前查询到的不正确的EBR和当前DBR中描述的分区类型是否相同?是则跳转到步骤B213,否则跳转到步骤B211 ; 步骤B210 :判断所述备份DBR的标记Flag是否为True 是则跳转到步骤B215 ;否则执行步骤B211 ; 步骤B211 :判断当前DBR是否是FAT32分区的DBR 是则执行步骤B212 ;否则跳转到步骤B215 ; 步骤B212 :令SSN = N-当前DBR中隐藏扇区数字段的值-当前DBR中备份扇区号,令备份DBR的标记Flag为True,并返回执行步骤B207 ; 步骤B213 :判断所述当前查询到的不正确的EBR中记录的自身所处分区的扇区总数和当前DBR中记录的自身所处分区的扇区总数是否相同,是则跳转到步骤B214,否则跳转到步骤B211 ; 步骤B214 :返回“有不正确的MBR/EBR与当前DBR匹配”的判断结果,并跳转执行步骤A4 ; 步骤B215 :返回“没有不正确的MBR/EBR与当前DBR匹配”的判断结果,并跳转执行步骤B4。
5.如权利要求4所述的一种Windows磁盘分区修复方法,其特征在于,所述步骤B5的详细判断方法为 步骤B501 :输入当前N和前一个分区的结束扇区号; 步骤B502 :计算当前DBR所处分区的EBR所在的扇区号SSN SSN = N-(当前DBR所处分区的扇区总数+当前DBR中隐藏扇区数字段的值+1);步骤B503 :判断SSN是否小于前一个分区的结束扇区号?是则跳转到步骤B507 ;否则跳转到步骤B504 ; 步骤B504 :查询不正确的MBR/EBR记录,判断是否有编号为SSN的不正确MBR/EBR记录;是则跳转到步骤B505 ;否则跳转到步骤B508 ; 步骤B505 :判断当前查询到的不正确的MBR/EBR和当前DBR中描述的分区类型是否相同,是则跳转到步骤B506 ;否则跳转到步骤B508 ; 步骤B506 :判断当前查询到的不正确的MBR/EBR中记录的自身所处分区的扇区总数是否比当前DBR中记录的自身所处分区的扇区总数大1,是则跳转到步骤B507;否则跳转到步骤 B508 ; 步骤B507 :返回“有不正确的MBR/EBR与当前DBR匹配”的判断结果,并跳转执行步骤A4 ; 步骤B508 :返回“没有不正确的MBR/EBR与当前DBR匹配”的判断结果,并跳转执行步骤B4。
6.如权利要求5所述的一种Windows磁盘分区修复方法,其特征在于,所述步骤B6-步骤B7包括 步骤B601 :根据当前DBR和当前N计算待重构的与当前DBR匹配的MBR/EBR所在的扇区号SSN :SSN = N-当前DBR中隐藏扇区数字段的值; 步骤B602 :判断SSN是否等于O 是则跳转到步骤B603,否则跳转到步骤B607 ; 步骤B603 :将待重构的与当前DBR匹配的MBR中本分区的分区表项的“本分区之前使用的扇区数”的值改为N; 步骤B604 :判断当前DBR是否是FAT32分区的DBR 是则跳转到步骤B605,否则跳转到步骤B606 ; 步骤B605 :将所述待重构的与当前DBR匹配的MBR的分区表项中本分区的扇区总数字段值改为当前DBR中记录的自身所处分区的扇区总数,并跳转到步骤B613 ; 步骤B606 :将所述待重构的与当前DBR匹配的MBR的分区表项中本分区的扇区总数字段值改为当前DBR中记录的自身所处分区的扇区总数+1,并跳转到步骤B613 ; 步骤B607 :判断当前DBR是否是FAT32分区的DBR,是则跳转到步骤B608 ;否则跳转到步骤B610 ; 步骤B608 :将待重构的与当前DBR匹配的EBR中本分区的扇区总数值设置为当前DBR中记录的自身所处分区的扇区总数,并执行步骤B609 ; 步骤B609 :将所述待重构的与当前DBR匹配的EBR中本分区的结束扇区号设置为N+当前DBR中记录的自身所处分区的扇区总数,并跳转到步骤B613 ; 步骤B610 :判断当前DBR是否是NTFS分区的DBR 是则跳转到步骤B611 ;否则跳转到步骤B614 ; 步骤B611 :将待重构的与当前DBR匹配的EBR中本分区的扇区总数值设置为当前DBR中记录的自身所处分区的扇区总数+1 ; 步骤B612 :将待重构的与当前DBR匹配的EBR中本分区的结束扇区号设置为N+当前DBR中记录的自身所处分区的扇区总数+1 ; 步骤B613 :返回“重构MBR/EBR成功”的信息,将重构成功的MBR/EBR所记录的分区信息视作正确的分区信息,并跳转到步骤B8 ; 步骤B614 :返回“重构MBR/EBR失败”的信息,并跳转到步骤A4。
7.如权利要求2至6任一项所述的一种Windows磁盘分区修复方法,其特征在于,所述S3包括 步骤Cl :读取MBR/EBR中的分区表信息,并判断是否能构成分区链,是则跳转到步骤C2 ;否则跳转到步骤C5 ; 步骤C2 :判断构成的分区链是否正确,是则执行步骤C3,否则执行步骤C5 ; 步骤C3 :保存所述分区链的信息,并使N = N+所述分区链跨过的扇区数+1,并继续执行步骤C4 ; 步骤C4 :记录所述分区链最后一个分区的结束扇区号,并跳转到步骤Al ; 步骤C5 :判断当前MBR/EBR中的第一条分区表项所记录的分区信息是否正确,是则执行步骤C6,否则跳转执行步骤C9 ; 步骤C6 :保存该正确的分区信息,并继续执行步骤C7 ; 步骤C7 :令N = N+该正确的分区信息中记录的该分区的扇区总数+1,继续执行步骤C8 ; 步骤CS :记录该正确的分区信息所对应的分区的结束扇区号,跳转到步骤Al ; 步骤C9 :记录该不正确的MBR/EBR并将之编号为N,并执行步骤ClO ; 步骤ClO :使N = N+1, OFFSET = 0,并返回执行步骤Al。
8.如权利要求7所述的一种Windows磁盘分区修复方法,其特征在于,所述步骤A5的详细判断方法为首先判断当前N是否为O 是则所述磁盘的第N个扇区为MBR;否则再判断所述磁盘的第N个扇区的前两个字节信息是否为“ 00 00 ”,若是则所述磁盘的第N个扇区为EBR,否则所述磁盘的第N个扇区既不是MBR也不是EBR。
9.如权利要求8所述的一种Windows磁盘分区修复方法,其特征在于,所述步骤A6的判断方法为读取所述磁盘的第N个扇区的前三个字节,若所述磁盘的第N个扇区的前三个字节是“EB 52 90”或“EB 58 90”,则所述磁盘的第N个扇区为DBR ;否则所述磁盘的第N个扇区不是DBR。
全文摘要
本发明提供一种Windows磁盘分区修复方法,该方法依次向后扫描磁盘的未扫描扇区,查找其中的MBR、EBR或DBR信息;若当前扫描到的是DBR则判断其是否是不正确MBR/EBR匹配的DBR?是则丢弃;否则判断该DBR是否是备份DBR,是则丢弃,否则判断该DBR所记录的该分区信息是否正确?是则根据该DBR重构与其匹配的MBR/EBR并保存该正确的分区信息;若扫描到的是MBR/EBR,则首先构成分区链,如果该分区链正确则保存该分区链信息,否则判断并保存该MBR/EBR记录的正确的本分区信息;最后在所有扇区扫描完后将已保存的所有正确的分区信息写入磁盘。本发明能快速准确修复分区信息被严重破坏的磁盘。
文档编号G06F11/00GK102819462SQ20121027714
公开日2012年12月12日 申请日期2012年8月6日 优先权日2012年8月6日
发明者王大彬, 徐吉兵 申请人:厦门市美亚柏科信息股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1