斗破苍穹什么时候更新:手工修复NTFS受损DBR(备份DBR也被破坏的情况)

来源:百度文库 编辑:中财网 时间:2024/04/28 17:18:58
手工修复NTFS受损DBR(备份DBR也被破坏的情况)
 

这个是DBR没有被破坏前的H盘里面的内容。。H盘是NTFS格式的。。。。

我们用winhex打开看看H盘。

这就是H盘的没有被破坏前的正常的DBR。我们看到每簇扇区数为 1个,扇区总数是305171$MFT起始簇号为101724,这里换算成扇区数也就是101724号扇区,$MFTMirr起始簇号为152585,这里换算成扇区也就是152585号扇区。好的,我们重建DBR的时候也就是去找这三个参数。我们都知道,NTFS格式下,分区的最后一个扇区都是DBR的备份。我们这里的情况是那个备份也被破坏掉了。当然正常情况下,备份也被破坏掉的情况不多。好的。我就人为地破坏掉它的两个DBR

这是用7E填充后的DBR所在扇区,0号扇区。

这个是最后一个扇区,但是大家注意到没有,这里的最后一个扇区是305170 of 305171

而且不是备份DBR而全部是零。这里我们是直接用winhex打开的逻辑磁盘H盘,我们

winhex打开H盘所在物理磁盘在访问这个逻辑磁盘看看会是什么情况。

 

 

 

 

 

我们看到最后一个扇区就是正常的DBR备份,而显示的扇区数是305171 of 305172比直接访问H盘多出一个扇区,直接访问H盘看不到备份DBR,而且扇区数少了一个。但是我们在DBR中算出来的扇区总数却是305171个扇区。那到底扇区总数是305172还是305171呢?通过在物理磁盘中查找,我发现如果按扇区总数为305171算,那么分区的最后一个扇区就是备份DBR,这个备份DBR后面的一个扇区就是一个EBR。如果按305172来算,那么就算错了。就算到EBR去了。如果是卷大一些。那么误差很更大。我的c盘有20G 如果通过直接访问C盘,显示的扇区总数是40965680.  通过物理磁盘访问却是显示的40965687,差了7个扇区,通过DBR计算出的扇区总数是40965686.所以在这里我想说的在计算中一定要看清楚。对于NTFS中。那个备份DBR到底属不属于该卷。我认为应该属于。在进行分区表重建的时候就按DBR中所计算出的扇区总数来指向,应该就没问题了。。

呵呵。。上面说了一些题外话。。好的。我们进入正题,手工重建DBR

我们的DBR和备份DBR都被破坏了。。

我们可以把一个正常的NTFS分区的正常DBR拷贝到0号扇区,然后在对其中的参数进行修改。我们需要修改的参数也就是。每簇扇区数,扇区总数,$MFT起始簇号,$MFTMirr起始簇号。好的我们分别来找这几个参数。

搜索$MFTMirr的起始扇区,因为$MFTMirr一般处于卷的中间位置。所以找起来比较方便。我们先转到卷的中间偏上一些位置。这里就是305172/2=152586.又因为我是在物理磁盘中访问的H盘,它是该物理磁盘的第一个分区,隐含扇区数是63.所以我们就转到

152586+63=152649号扇区的前面几个扇区看看。我们就转到152640扇区吧。。

这里全是零。好的我们下面开始搜索$MFTMirr的开始标志46494C45

 

很快在152648号扇区找到了$MFTMirr。在查找$MFTMirr是。你可以在卷的中间位置上下查找。。。好的我们已经找到了$MFTMirr。下面我们就来分析它。我们都知道$MFTMirr$MFT的前几个记录项的备份。第一个备份当然就是备份的$MFT本身了。。要重构DBR我们需要在$MFT中找到一个非常驻属性。呵呵。。$MFT本身的80属性就是非常驻的。看到划线的部分了吗。就是$MFT的数据属性。具体的分析我在前面的教程都讲过了。我们看到它的起始VCN00 00 00 00 00 00 00 00 结束VCN 5F 00 00 00 00 00 00 00 那么所占的簇数就是两个数的差。为95个簇。我们有看到分配给它的空间是 00 C0 00 00 00 00 00 00 也就是49152个字节。它的运行处也表明了它占用96个簇。好的分给它96个簇,分给它49152个字节。那么一个簇有多少个字节。我想小学生都知道了吧。呵呵。就是512个字节。也就是1个扇区啊。。。这里我们的一个参数已经出来了。就是每簇扇区数为1个。

还有$MFTMirr起始扇区数是152648号扇区,但是这里我们是在物理磁盘中计算的。所以还要减去隐含扇区数,也就是152648-63=152585号扇区。换算成簇也就是152585号簇。

好的。现在我们已经知道了$MFTMirr起始簇号,每簇扇区数,扇区总数又可以很容易找到,下面就只需要知道$MFT的起始簇号就OK了。。。。

怎么找呢。呵呵。很简单。。上面就有了。。看到运行处。。31 60 5C 8D 01 说明$MFT的起始簇号就是 5C 8D 01 也就是101724号簇。。呵呵。大功告成了。。。。下面的工作就是把这些参数填回去了。。这个就很easy   

完全恢复成功。。。呵呵。。

我的QQ 415090719 有兴趣的朋友可以加我。一起交流。。。