排查 Windows Compute Engine 实例启动问题

本文档可帮助您找出 Windows Server Compute Engine 实例无法启动的原因并解决常见问题。

无法启动的 Windows 计算实例通常会显示以下症状:

  • 计算实例处于 RUNNING 状态,但您无法使用 RDP 连接到该实例。
  • 串行端口 1 仅显示固件和客机代理行,并且客机代理永远不会报告其已准备就绪。
  • 串行端口 2 显示 Windows 启动管理器错误界面或 STOP 错误。

如果计算实例完成启动,但您无法连接到该实例,请参阅排查 RDP 问题。

准备工作

  • 确保计算实例将输出写入串行端口 1 和 2。 计算实例运行时,串行端口输出可用;如需在计算实例停止后保留串行端口输出,请启用将串行端口输出记录到 Cloud Logging 的功能。如需了解详情,请参阅查看串行端口输出。
  • 如果您尚未设置身份验证,请进行设置。身份验证用于验证您的身份,以便访问 Google Cloud 服务和 API。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:
    1. 安装 Google Cloud CLI,然后 使用联合身份登录 gcloud CLI。 登录后,运行以下命令来初始化 Google Cloud CLI:

      gcloud init
    2. 设置默认区域和可用区。

自动检测原因

运行启动诊断命令。对于 Windows 计算实例,它会读取串行端口 2,报告最可能的原因,并链接到本文档中的匹配部分:

如需使用此命令,请确保您已安装 Alpha 版命令组件。

gcloud alpha compute diagnose boot INSTANCE_NAME --zone=ZONE

替换以下内容:

  • INSTANCE_NAME:计算实例的名称。
  • ZONE:包含计算实例的可用区。

读取串行控制台输出

如需自行读取引导管理器屏幕或 STOP 错误,请读取串行端口 2:

控制台

  1. 在 Google Cloud 控制台中,前往虚拟机实例页面。

    转到“虚拟机实例”页面

  2. 选择要查看串行端口输出的计算实例。

  3. 在日志下,点击串行端口 2(控制台)。

gcloud

gcloud compute instances get-serial-port-output INSTANCE_NAME --zone=ZONE --port=2

替换以下内容:

  • INSTANCE_NAME:计算实例的名称。
  • ZONE:包含计算实例的可用区。

Boot Manager 屏幕包含一个 Status: 行(其中包含 0xc000000e 等代码)和一个 Info: 行(用于描述故障)。STOP 错误包含 STOP 代码及其名称,例如 INACCESSIBLE_BOOT_DEVICE。

如需在下次启动时打开 Windows 启动管理器菜单或“高级启动选项”菜单,请参阅排查 Windows 虚拟机问题。

常见的启动问题

以下部分列出了 Windows 计算实例上的常见启动失败、其串行端口 2 签名以及解决方法。大多数解决方案都需要您将启动磁盘挂接到恢复虚拟机,如离线修复磁盘中所述。

Windows 启动管理器无法启动 Windows

症状:串行端口 2 显示 Windows 启动管理器错误界面:

Windows failed to start. A recent hardware or software change might be the cause.
Status: 0xc000000e
Info: A required device isn't connected or can't be accessed.

状态代码用于标识具体原因:

状态 含义
0xc000000e,0xc0000001 启动配置数据 (BCD) 指向固件无法访问的启动设备。通常在磁盘恢复、磁盘克隆或磁盘配置更改后出现。
0xc0000225,0xc000000f 引导加载程序或其 BCD 条目缺失或无效。
0xc000014c、0xc0000034、0xc0000098、0xc0000102 BCD 存储区缺失、不完整或已损坏。

原因:启动管理器已加载,但 BCD 未描述可启动的 Windows 安装。

解决方法:将磁盘附加到恢复虚拟机,然后使用 Windows 启动修复工具修复启动配置,并按照 Microsoft 的针对 Windows 启动问题的的高级问题排查文档中的说明,针对显示的状态代码进行操作。请参阅修复磁盘离线问题。如果无法重建启动配置,请从快照恢复磁盘。

BOOTMGR is missing

症状:串行端口 2 显示 BOOTMGR is missing. Press Ctrl+Alt+Del to restart。此消息仅显示在使用 BIOS 启动的操作系统映像上。

原因:系统分区中缺少启动管理器文件。

解决方案:将磁盘挂接到恢复虚拟机,然后按照 Microsoft 的高级问题排查 - Windows 启动问题文档,使用 Windows 启动修复工具恢复启动文件。请参阅离线修复磁盘。

STOP 0x7B INACCESSIBLE_BOOT_DEVICE

症状:串行端口 2 显示一个命名为 INACCESSIBLE_BOOT_DEVICE 的 STOP 错误。

原因:Windows 找到了启动卷,但由于磁盘控制器的存储驱动程序缺失或停用,因此无法访问该卷。在更改磁盘接口(例如从 SCSI 更改为 NVMe)、更新存储驱动程序或从其他计算实例恢复后,此错误很常见。

解决方案:重置计算实例一次;暂时性故障通常会清除。如果该错误再次出现,请将磁盘挂接到恢复虚拟机,并在离线安装中为计算实例的磁盘接口启用或重新安装存储驱动程序。如需了解在离线安装中查找和移除或更新驱动程序的步骤,请参阅针对停止代码或蓝屏错误的进阶问题排查。

STOP 0xED UNMOUNTABLE_BOOT_VOLUME

症状:串行端口 2 显示一个命名为 UNMOUNTABLE_BOOT_VOLUME 的 STOP 错误。

原因:启动卷上的 NTFS 元数据损坏,或者无法读取磁盘。

解决方法:将磁盘挂接到恢复虚拟机,然后按照完成离线修复中的说明检查并修复卷。如果无法修复卷,请从快照恢复磁盘。

其他 STOP 错误

症状:串行端口 2 显示 STOP 错误,例如 CRITICAL_PROCESS_DIED、SYSTEM_THREAD_EXCEPTION_NOT_HANDLED 或 STOP 代码(例如 *** STOP: 0x0000007E)。

原因:某个必需的系统进程已结束、驱动程序引发了内核无法处理的异常,或者发生了其他内核错误。STOP 行通常会指明负责的 .sys 驱动程序文件。

解决方法:重置计算实例一次。如果错误再次出现,请按照排查蓝屏错误中的说明读取完整的堆栈轨迹,然后按照完成离线修复中的说明,从恢复虚拟机中修复系统文件或移除 STOP 行中命名的驱动程序或更新。

离线修复磁盘

大多数 Windows 启动问题都可以通过以下方式修复:将启动磁盘作为数据磁盘附加到恢复虚拟机,然后针对该磁盘运行 Windows 修复工具。如需了解相关步骤,请参阅完成离线修复。

本文档中的解决方案假定原始启动磁盘已挂接到恢复虚拟机。在更改磁盘之前,请先创建快照,以便在修复失败时进行恢复。如需了解相关步骤,请参阅创建归档磁盘快照和标准磁盘快照。

如果磁盘无法修复,请恢复计算实例

如果这些解决方法都不起作用,请从快照恢复启动磁盘,或从快照或自定义操作系统映像创建新的计算实例,然后将数据移至其中。

后续步骤