UP | HOME

恢复一次严重的系统故障 (Windows 7)

上周五,我在 Dell N4110 笔记本上犯了一个严重的错误。我在 cygwin 下使用 rsync 与 Linux 机器同步数据时,误删除了一些本地更新的文件 (该死的 --delete 参数,一定要慎用!)。 然后我试图使用 TeskDisk 来恢复数据时,被告之文件分区表没有对齐,问我是否修复。一时大意,同意并写入磁盘,然后 TeskDisk 告诉我要重新启动系统。结果悲剧产生了,重新启动系统时,回到了 Dell 工具的 DOS 界面下,无法启动 Win7 系统了。

我的 N4110 硬盘默认的是出厂的 4 个分区:

当时正在做的工作被迫打断,我试图修复启动,结果在忙乱之下,连续犯了一系列错误:

  1. 用 Win7 安装 U 盘启动,修复启动分区。重启,仍回到 DOS 下。
  2. 用 GRML Linux U 盘启动,删除了分区 1 (DellUtility)。用 Win7 U 盘启动,修复启动分区。重启,出现错误如下:

    BOOTMGR is missing
    Press Ctrl Alt Del to restart
    
  3. 用 Win7 安装 U 盘启动,无法修复分区表,出现“无法兼容”的错误。重启,错误如前。
  4. 用 GRML U 盘启动,删除了分区 2 (RECOVERY). 再用 Win7 U 盘启动,仍无法修复启动分区。重启,错误如前: BOOTMGR is missing
  5. 用 GRML 启动盘启动,用 testdisk 检查分区,使用 EFI GPT 选项,找回了删除的分区。用 Win7 U 盘启动,仍因“兼容”问题,无法修复启动分区。此时用硬盘启动,出现的错误为:

    Operation System not found
    

到目前为止,用 GRML Linux U 盘启动系统,检查一下,硬盘上所有数据都在,意味着系统仍然可以修复。只是我对 Windows 7 不太熟悉,不知道如何去做。针对我的情况,系统原来的问题可能只是 BCD 损坏。后来我试图修复过程中错误地删除了分区。再后来,又将分区表转换成了 GPT 格式 (好在找回了全部的数据),从而由 BOOTMGR 错误转变成了 Operation System not found 错误。

冷静下来,仔细分析问题,首要任务是保证数据不丢失。那么要解决的问题就是:

  1. 将在 Linux TeskDisk 找回的 GPT 分区数据转换成 Windows 7 启动可识别的 MBR 分区格式。
  2. 修复 Windows 启动配置数据 (Boot Configuration Data, BCD)。

要解决的第一个问题是针对错误 Operation System not found (因为原来安装的 Windows 7 不是针对 GPT 分区,并且 N4110 不支持 EFI), 第二个则是针对 BOOTMGR 错误。

将 GPT 转换为 Windows 7 兼容的 MBR 分区表,检索了一下,参考如下:

  1. http://msdn.microsoft.com/en-us/library/windows/hardware/gg463525.aspx
  2. http://www.rodsbooks.com/gdisk/booting.html
  3. http://www.wilderssecurity.com/showthread.php?t=332544
  4. http://www.sevenforums.com/tutorials/26203-convert-gpt-disk-mbr-disk.html
  5. http://ljmichael.hubpages.com/hub/Convert-MBR-to-GPT-or-convert-GPT-to-MBR
  6. http://www.firewing1.com/node/610
  7. http://www.rodsbooks.com/gdisk/mbr2gpt.html

按照上述参考中的 (6), (7) 恢复了 MBR 分区表,重新启动后仍然回到了 DOS 界面。

修复 BCD, 可参考:

但此时修复 BCD 一直出现如下错误:

此版本的系统恢复选项与您试图修复的 Windows 版本不兼
容。请尝试使用与此版本的 Windows 兼容的恢复光盘。

经检查,属于 NTFS 文件系统故障。用 Win7 U 盘启动机器,进行命令行下,用 diskpart 检查,发现原来的 RECOVERY 和 DATA 分区的文件系统全部变成了 RAW. 我不知道如何在 Windows 下修复这个问题,就启动到 GRML 下,使用 ntfsfix 修复了文件系统。

然后继续使用 Win7 U 盘启动,可以修复启动了。但出现一个问题:使用硬盘启动,则进入 DOS; 使用 Win7 U 盘启动,则正常进入系统了。仔细检查后发现,原来 DELL N4110 默认出厂的设置是将启动放置在隐藏的 RECOVERY 分区上,将该分区标志为“活动”即可。具体的操作如下:

  1. 用 Win7 U 盘启动,进行命令行,执行 diskpart
  2. 去掉 DellUtility 及 RECOVERY 分配的盘符

    select volume=1
    remove
    select volume=2
    remove
    
  3. 标识 RECOVERY 为活动:

    select volume=2
    active
    
  4. 重新分配盘符 CWIN7SYS 分区:

    select volume=3
    remove
    assign letter=C
    
  5. 退出 diskpart, 使用如下命令修复 BCD:

    bcdboot C:\Windows
    bootrec /FixMBR
    bootrec /FixBoot
    bootrec /RebuildBCD
    bootrec /ScanOS
    

这样看来,原来第一次 TestDisk 所导致的问题只不过是把 DellUtility 变成了活动分区了。害得我折腾了那么久!

版权所有 ©2015: 心蛛 | Date: [2013-01-28 一 05:03] | Generated by Emacs 24.4.1 (Org mode 8.3.2), Validate, 88x31.png

comments powered by Disqus