如果您曾使用过 Windows,那么就可能曾经看到过它遭遇失败。尽管 Windows 随着每一版本的发布日益可靠,但有一些事情是您和 Windows 都无法控制的:驱动程序失败、系统受到电力中断的攻击、文件遭到损坏以及磁盘崩溃。发生这些情况时,您担心不得不另找一台新计算机。在本专栏中,我将介绍 Windows 系统中可能会出现错误的地方以及如何对其进行故障排除以使其重新运行。
接着会发生什么?
在近 20 年的 Windows 使用经历中,我的系统也同样出现过无法启动。根据系统所执行的确切操作,通常可以迅速地找出问题所在。让我们对 Windows 系统将出现的一些症状进行分类,并构建一些案例来了解故障排除。
- 系统无法执行 BIOS POST(开机自检;通电后也不发出蜂鸣声)。
- 系统执行 POST,但指示丢失操作系统或找不到操作系统。
- 系统执行 POST 但失败,并显示未找到 NTLDR 或未找到 BOOTMGR。
- 系统开始引导,但在启动过程中挂起。
- 系统开始引导,但在 Windows 桌面出现之前崩溃(并陷在循环中)。
- 系统到达 Windows 桌面,但之后在 Windows 运行时崩溃(并陷入循环中)。
这些情况听起来好像完全不同,但实际上,其中大部分是由几个常见问题导致的,通过一些故障排除,您可以找出存在的问题以及您修复它所需执行的操作。其中一种最困难的情况是系统根本无法执行 POST。
遗憾的是,这几乎总是硬件问题。它所需要的操作可能像更换 CMOS 电池一样简单,也可能像新主板或电源一样复杂。但如果您的系统不执行 POST,您应致电系统 OEM 获取支持,因为靠您自己不太可能解决这种问题。
使用的工具
只要您的系统执行 POST,您就大有希望恢复,因为问题不是硬件出现故障(当然,有时问题可能同时涉及硬件和软件)。根据您的系统进入引导进程的程度,您应该可以逐渐从列表中删除各种“嫌疑”,让系统重新运行起来。
在启动之前,您需要准备一些工具:
- 您最好可以访问另一台运行 Windows 的计算机,将其用于崩溃分析,它应包括 Windows 调试工具。
- 您应有一套 Microsoft 诊断和恢复工具集 (DaRT) 的副本,它是 Microsoft 桌面优化包 (MDOP) 的组件。您可以找到 30 天在线评估副本。也可以使用 Windows PE CD(最好是版本 2.1,尤其在恢复 Windows Vista 或 Windows Server 2008 系统时)。
- 你应拥有足够大的 USB 闪存驱动器来转储问题系统中的可用内容。
- 您应有从问题系统拆除硬件所必需的工具。
丢失操作系统
如果您的错误信息提示丢失操作系统或找不到操作系统(具体文字视您 PC 上使用的 BIOS 而定),那么实际问题是您的系统丢失引导扇区(磁盘上指出引导加载程序位置的扇区)。我仅仅意外遇到过一次这种问题,当时主管的计算机在电源中断期间遭到电涌的攻击,令人惊讶的是,这是唯一马上暴露的问题。
遗憾的是,在进行更深入的调查时,我们发现她的系统似乎丢失了所有分区。搞笑的是,这事发生在 Winternals,之后我们创建了一个 Disk Commander 工具(请参见图 1),它现在是诊断和恢复工具集的组件。
图 1 Disk Commander 恢复工具
Disk Commander 还可用于恢复整个删除的目录。在这一实例中,此工具正适合维修人员使用,因为它可以在磁盘中扫描最近删除的分区并完全恢复它们(请参见图 2)。
图 2 使用 Disk Commander 恢复磁盘分区
恢复分区并不能做到万无一失,但对于最近删除或丢失的分区,使用 Disk Commander 这类工具可能会有一些成功的机会。当然,这种错误可能是由其他问题引发的(通常是硬件)。知识库文章“启动基于 Windows XP 的计算机时出现“找不到操作系统”或“丢失操作系统”错误消息”深入讨论了这一主题。对于 BIOS 问题,如果出现的硬件问题甚至让磁盘无法显示,DaRT 或其他任何工具就没有什么作为了。
丢失引导加载程序
如果您的系统运行 Windows Server 2003 或更早的版本,丢失引导加载程序错误将引用 NTLDR;如果您已进行了升级或使用 Windows Vista 或更高版本进行了双引导,则它将为 BOOTMGR。此消息基本上取决于引导扇区所指向的引导加载程序。
此错误通常并不是无端发生的,据我所知,它与我介绍的丢失分区的发生方式几乎相同。注意:您所要做的就是引导到 Windows PE 并使用 CD 上的 NTLDR 和 NTDetect.com 文件进行替换,或与 Windows 共享这两个文件。您需要确保替换文件是 Windows 版本,并且是新文件或版本高于您所替换文件(使用所提供最新服务包中的最新副本;这些文件向后兼容)。对于 Windows Vista 或 Windows Server 2008,您应复制 BOOTMGR 文件并确保 Boot 目录(默认情况下为隐藏)也在该处。
文章“NTLDR 或 NTDETECT.COM 未找到错误”提供了更多信息。您可能注意到许多 Microsoft 知识库文章建议使用 Windows 恢复控制台,其中一些文章(例如,“如何在 Windows 恢复环境中使用 Bootrec.exe 工具解决和修复 Windows Vista 中的启动问题”)可能非常有用。
但我的建议是在此情况中使用 Windows PE。虽然恢复控制台在几个地方胜过 Windows PE,但 Windows PE 的整体功能和灵活性通常可以使您更方便地完成修复。
我建议您在完成分区或引导加载程序恢复之后运行 chkdsk,以确保您之后不会再遇到任何更大的磁盘损坏。
对于因电源中断或其他问题引发的文件损坏,我还希望事件日志没有记录任何自监控分析与报告技术 (S.M.A.R.T.) 磁盘监视错误。如数据丢失严重到擦除分区或文件,其成因很容易随后引发更大的问题。
系统启动,然后挂起
这一情况有一个许多人都会遇到的症状,但它很少会反映真正原因。您将会经常看到 agp440.sys 被指定为挂起的原因。但该驱动程序只不过是不知情的受害者。它只是载入的最后一个驱动程序,正如您在图 3 中看到的,它显示了一个在 Windows 启动之前引导到 Windows 安全模式的系统。
图 3 Windows 安全模式中加载的驱动程序
我读过的一些文章(包括一些知识库文章)将禁用该驱动程序视为让系统重新运行的最佳方式。其实并非如此。若要让您的系统重新运行,以下是我的建议:
- 首先删除您最近安装的所有新硬件。可以一次删除一个硬件。
- 尝试是否能从 Windows 安全模式正常启动。如果可以,很可能是第三方驱动程序引发的问题(因为第三方驱动程序在安全模式中不启动)。
- 使用 Windows PE 或 ERD Commander(来自 DaRT)来禁用任何新安装的驱动程序。如需更多信息,请参阅“禁用驱动程序或服务”侧栏。
- 尝试使用“最近一次的正确配置”(以下讨论)来查明是否由最近所做的驱动程序更改(并未反映在最近使用的配置集中)引发了问题。
如果这四种方法都无效,您可能需要执行 Windows 修复安装(从与故障 Windows 安装相匹配的服务包 CD 引导),或者您可能需要重新安装 Windows。
Windows 安全模式和还原点
当然,如果您的系统在启动时挂起或崩溃,转用安全模式可能会有帮助,尤其是在您没有现成的 Windows PE 副本且安全模式能起作用时。在 Windows 的客户端版本上,您还可以使用还原点来恢复系统,假设您已启用了它们而且它们已经对您需要还原的文件进行了保护(它们不会保护 Windows XP 上的所有内容)。
要特别注意的是,如果您使用 Windows PE 来恢复您的 Windows Vista 系统,请确保您仅使用 Windows PE 2.0 或更高版本来对其进行引导。使用早期版本进行引导将损坏您的还原点,导致其不可用。(这要归因于 Windows Vista 上的系统还原点监视磁盘写入的方式。与系统进行交互时,Windows PE 1.x 并不知道如何防止写入损坏还原点)。
在 Windows 完成加载之前系统崩溃
通常有两类问题会导致系统 Windows 完成加载之前崩溃。第一类问题是注册表损坏。这在 Windows 的早期版本以及出现过系统突然重新启动的系统中更为常见。通常,如果注册表损坏造成系统无法启动,只是一小部分注册表出现了问题。在 Windows Vista 中,\windows\system32\config\regback 文件夹中有两份注册表副本,大多数情况下,这两份注册表的产生时间均不超过 24 小时。您可以尝试用它们来替换注册表文件。
还可以使用我之前介绍的方法在 Windows PE 下脱机加载注册表有时也可以解决问题。Windows 注册表编辑器中内置的逻辑会尝试在出现损坏时进行修复。这种损坏修复在 Windows XP 中很有效,在 Windows Vista 和 Windows Server 2008 中效果甚至更好。
如果您无法通过 Windows PE 1.6 解决问题,则尝试使用 Windows PE 2.x 或将注册表复制到 Windows Vista 系统,使用前面提到的方法对其进行修复,然后再重新复制回来。如果这不能让系统恢复,那么很遗憾,您基本上就无能为力了。您可以尝试对 Windows 的早期版本进行修复安装,但通常我建议执行重新安装。同样,您应执行 chkdsk 来确认不存在其他问题。
或许,导致系统在 Windows 启动之前崩溃(蓝屏)的最常见问题是驱动程序。我建议准备一张 DaRT CD 并使用故障分析器(请参见图 4)(这样就能很方便地分析 Windows 故障转储,即使是不可引导的系统也同样适用)。
图 4 使用故障分析器分析转储文件
如果您没有 DaRT 或者手边没有,您也可以使用 Windows PE 和 Windows 调试工具检查常见的故障点。请注意,故障转储可能已损坏,也可能没有明确做出定论,但它常常会为您指出正确的方向。下面是需要执行的步骤:
- 通过 Windows PE 从崩溃的系统复制最近的 *.dmp 文件。这些文件位于 %windir%\minidump\ 下。如果您已启用了完全转储,它们将位于 Windows 目录本身,而且至少与系统中的内存一样大(因此它们是相当大的)。
- 通过“File”(文件)|“Open Crash Dump”(打开故障转储)启动 Windows 调试工具,选择刚刚复制的转储文件。
- 设置符号路径,为 Windows 二进制文件提供调试信息以供诊断之用。键入:
- 键入 .reload 并单击 Enter。
- 键入 !analyze –v 并单击 Enter。
- 结果将很可能指出所涉及的一个或多个驱动程序。
请注意,您通常可能会得到误报,指出的驱动程序有误,因此可能需要搜索 Web 查找一些有用的观点。其他人之前很可能也遇到过与该驱动程序有关的问题。您可以使用前面介绍的步骤来禁用驱动程序或使用安全模式查看是否有作用。
最近一次的正确配置
当您的系统出现问题时,“最近一次的正确配置”(如图 5 所示)通常会有帮助。它包含一组已成功启动的最新服务和驱动程序集。但如果注册表出现损坏,它无法提供保障,也不能有所帮助。只有当 Windows 在 Win32 启动之前(在您发现 Windows 桌面启动初始化之前)发生崩溃时,它才能产生影响。否则,这种启动将被视为“正常”,如果 Windows 在该点之后崩溃,它将无法通过这种方式进行恢复。
图 5 选择“最近一次的正确配置”可能会令系统启动
在 Windows 启动之后系统崩溃
如果您的系统在 Windows 启动之后崩溃,原因可能是驱动程序,但也可能就是硬件。要进行诊断,请检索 .dmp 文件(如前所述)并看看您找到了何种线索。
根据 Windbg 的指示,您可以尝试禁用服务或驱动程序,或者检查任何新添加的硬件。内存(特别是新添加的内存)或工作不正常的磁盘经常会导致崩溃。您可能需要联系 OEM 或软件 ISV,了解他们是否遇到同样的问题,或者在 Web 上搜索类似的情况。
如果您怀疑内存是问题的根源,请务必试用 Windows 内存诊断工具(包含在 Windows Vista 和 Windows Server 2008 中)。如果您想调查导致崩溃的问题,内存诊断工具可以帮助全面测试系统的 RAM。
虽然 Windows 不能正常启动的确令人非常沮丧,但其根源只有几种。当发生这种情况时,如能了解在何处及如何查找原因通常可以帮助您恢复 Windows,而无需重新建立完整映像。