首页 > Windows > 用WinHex软件手工恢复RAID 1的NTFS主分区

用WinHex软件手工恢复RAID 1的NTFS主分区

2013年8月1日 LTNS     访问次数 277 发表评论 阅读评论

今天对N40L的 RAID 1硬盘热插拔后系统提示出错,其中的一块 1T硬盘变成了单盘,于是在重启时进入RAID管理界面重新设置了一下 RAID 1,但在提示 “是否确认覆盖 MBR” 时点了yes,结果重启进入 Windows 2008 R2操作系统后在磁盘管理器中 RAID 1硬盘显示为未分区硬盘,估计是 MBR(主引导记录)里的分区表丢失了的缘故。当时又手贱点了一下新建简单卷,一直到提示要格式化时发觉不对,点了取消,但这时仍生成了一个默认的 fat16的未格式化分区。

本以为问题不大,按网上的教程用 PTDD和 DiskGenius等软件恢复丢失的分区,但折腾了一下午仍没找到丢失的分区。这下子就头大了,硬盘上可有重要的数据,后悔不该在重设 RAID 1之前偷懒没有备份一下硬盘中的数据。 :(

经Google搜索,初步学习了一下硬盘的知识,了解到 MBR位于整个硬盘的 0柱面 0磁道 1扇区,共占用了 64个扇区(现在的新硬盘似乎是2048个扇区),实际只使用了第一个扇区共512字节,包括 446字节的引导代码、64字节的硬盘分区表DPT(最多四个主分区,每个分区的参数占用16个字节)和结束标志0xAA55,借用一张网上的图片。
MBR

紧接着MBR之后的第一个扇区(第65个,或第2049个扇区)就是第一个主分区的 DBR扇区,而我丢失的分区是硬盘上唯一的主分区(并占用了整个 1T硬盘的空间),而新建简单卷只是修改 MBR的内容(格式化才会修改 DBR扇区的内容),按理只要能找回第一个主分区的DBR扇区内容就行了,借用一张网上的图片。
hard disk

经搜索找到一个 讨论贴,里面提及 NTFS分区会在该分区的最后一个扇区备份 DBR扇区的内容,如果没有丢失的话可以用 WinHex搜索到,具体的方法就是从硬盘的末尾倒序搜索 “000055AA” 的16进制数值,找到该扇区后用菜单中的 NTFS的模板解读一下。

为保险起见,我把 RAID 1硬盘的其中一个硬盘挂到另一个台机上(这样万一恢复失败,还有另一个硬盘),然后按照如上方法果然找到一个备份的 DBR扇区,可以看到其中的隐藏扇区数、总扇区数等参数,经对照这就是我丢失的硬盘主分区(隐藏扇区数,即,该分区之前的扇区数为2048,说明这是第一个主分区;而总扇区数亦和计算值 [1953120255 = 1953122303-2048] 相符合),分区总容量为 1953120255*512/(1024^3) = 931.3GB。
backuped-NTFS-DBR-sector

接下来就是用这个备份的 DBR扇区内容覆盖掉第2049个扇区(因WinHex是从第0个扇区开始计数的,所以在软件中覆盖的就是第2048 of xxxxx个扇区),这样就恢复了第一个主分区的 DBR扇区了。

最后就是修改 MBR中的分区表参数了,因为我在 Win2008R2 操作系统的磁盘管理器中对硬盘新建过一个简单卷,且占用的是整个硬盘的容量(跟之前丢失的分区一样),所以根据在 WinHex软件中看到的第一个主分区的参数,唯一需要修改的地方就是把分区类型从 0x06改成 0x07,即,fat16改成ntfs,然后保存退出,这时丢失的分区立刻就出现了,其中的数据也完好无损。 :)
fixed-MBR

同样的方法把另一块硬盘也直接修改了一下扇区,两块硬盘放回N40L,开机后就恢复为正常的raid 1硬盘了。

顺便提一下,这里有篇 教程 可以在连备份的 DBR扇区都被破坏的情形下用 WinHex手工修复 NTFS的 DBR扇区,有兴趣折腾的可以尝试一下。

 
补充说明:
DPT中第一个主分区的总扇区数,比第一个主分区 DBR中的总扇区数多1个(1953120256-1953120255,是因为后者不包括备份的 DBR扇区的缘故),如果是活动分区的话可能相差更多。

顺便补充一张新建分区时不勾选格式化的截图,这样可以在不破坏分区数据文件(包括备份的 DBR扇区)的前提下生成 DPT中对应该分区的参数,然后在此基础上进行折腾。
new volume without format

 
 

参考文章
http://bbs.wuyou.com/forum.php?mod=viewthread&tid=187859&extra=&page=1

 

分类: Windows 标签: , , , , , ,
  1. wang
    2013年8月3日12:53 | #1

    博主学习能力好强,佩服。

  1. 本文目前尚无任何 trackbacks 和 pingbacks.
16 / 4 = (必填)