本文档介绍可用于解决以下 Compute Engine Windows 虚拟机 (VM) 实例启动问题的方法和工具:
如果您在连接到 Windows 虚拟机时遇到问题,请参阅 RDP 问题排查。
如需了解与迁移到第三代虚拟机相关的问题,请参阅 Windows 已知问题。
准备工作
- 请参阅 Windows 启动问题的 Windows 高级问题排查,了解如何排查 Windows 启动进程问题。
-
如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- 为虚拟机启用显示设备(如果尚未启用)。
使用以下方法之一重启虚拟机:
控制台
在 Google Cloud 控制台中,转到虚拟机实例页面。
点击要重启的虚拟机的名称。虚拟机实例详情页面随即打开。
点击重置按钮以重新启动虚拟机。
gcloud
使用
gcloud compute instances reset
命令重置虚拟机:gcloud compute instances reset VM_NAME --zone=ZONE --project=PROJECT_ID
请替换以下内容:
PROJECT_ID
:包含虚拟机的项目 ID。ZONE
:虚拟机所在区域的名称VM_NAME
:虚拟机的名称
命令提示符
在连接到交互式串行控制台时,打开命令提示符会话并运行以下命令。如需详细了解如何打开命令提示符会话,请参阅在 Windows SAC 中打开命令提示符。
shutdown /r /t 0
系统会打开 Windows 启动管理器菜单:
在倒计时结束之前,完成以下步骤:
确保交互式串行控制台是您的活动窗口。
按键盘上的
Esc
键。按键盘上的数字键
8
。
系统会打开“高级启动选项”菜单:
使用键盘上的箭头键选择一个选项,然后按 Enter 键将其打开。
如需在启动时启用 Windows 启动管理器菜单并添加 15 秒超时,请运行以下命令:
bcdedit /set {bootmgr} displaybootmenu yes
bcdedit /set {bootmgr} timeout 15
如需重新启动虚拟机并使用以下命令显示串行控制台中的 Windows 启动管理器菜单,请执行以下操作:
shutdown -r -t 0
如需在启动时启用 Windows 启动管理器菜单并添加 15 秒超时,请运行以下命令:
bcdedit /set '{bootmgr}' displaybootmenu yes
bcdedit /set '{bootmgr}' timeout 15
如需重新启动虚拟机并使用以下命令显示串行控制台中的 Windows 启动管理器菜单,请执行以下操作:
shutdown -r -t 0
为发生故障的虚拟机的启动磁盘创建快照。
使用该快照创建磁盘。
使用新创建的磁盘创建具有附加非启动磁盘的虚拟机。您的恢复虚拟机应满足以下条件:
- 恢复虚拟机必须与创建的磁盘位于同一可用区。
- 恢复虚拟机还应使用 Windows Server 映像。
- 恢复虚拟机的启动磁盘的来源映像应与发生故障的虚拟机启动磁盘的来源映像不同。
您现在可以使用 Windows 工具和实用程序尝试对附加的挂接磁盘进行离线修复。请参阅以下文档,详细了解如何完成虚拟机的离线修复:
如果离线修复成功完成,请将发生故障的虚拟机的启动磁盘更新为新修复的启动磁盘。
可选:删除不再需要的附加资源:
- 删除恢复虚拟机
- 删除已损坏的原始启动磁盘
- 删除已损坏的原始启动磁盘快照
在 Google Cloud 控制台中,前往虚拟机实例页面。
点击要查看其日志的虚拟机的名称。虚拟机实例详情页面随即打开。
在日志下,点击串行端口 1。
类似于以下内容的堆栈轨迹转储确认蓝屏错误:
ntoskrnl.exe [0xFFFFF802C9606000, 0xFFFFF802C9E23000] netbios.sys [0xFFFFF80E98430000, 0xFFFFF80E98442000] volmgr.sys [0xFFFFF80E97E40000, 0xFFFFF80E97E58000] NTFS.sys [0xFFFFF80E98060000, 0xFFFFF80E98293000] crashdmp.sys [0xFFFFF80E986C0000, 0xFFFFF80E986D9000] pvpanic.sys [0xFFFFF80E99030000, 0xFFFFF80E9903C000] myfault.sys [0xFFFFF80E9A570000, 0xFFFFF80E9A578000] Dumping stack trace: 0xFFFFF80E990317C7 (pvpanic.sys+0x17C7) 0xFFFFF80E990316D3 (pvpanic.sys+0x16D3) 0xFFFFF802C97D9681 (ntoskrnl.exe+0x1D3681) 0xFFFFF802C97D8A1F (ntoskrnl.exe+0x1D2A1F) 0xFFFFF802C97633F4 (ntoskrnl.exe+0x15D3F4) 0xFFFFF802C9773329 (ntoskrnl.exe+0x16D329) 0xFFFFF802C976F152 (ntoskrnl.exe+0x169152) 0xFFFFF80E9A572794 (myfault.sys+0x2794) Current Process: notmyfault64.e
在 Google Cloud 控制台中,前往虚拟机实例页面。
点击要查看其日志的虚拟机的名称。虚拟机实例详情页面随即打开。
在日志下,展开更多,然后点击串行端口 2(控制台)。
查看实例的串行端口,并查找如下所示的输出:
!SAC> Your PC ran into a problem and needs to restart. If you call a support person, give them this info: UNEXPECTED_KERNEL_MODE_TRAP myfault.sys 0x0000000000000008 0xFFFFC6812AB94F70 0xFFFFC6812E38EFF0 0xFFFFF80E9A572794 We're just collecting some error info, and then we'll restart for you. 100% complete
如需显示最新的蓝屏事件,请运行以下命令:
wevtutil qe System "/q:*[System [(EventID=1001)]]" /rd:True /c:1 /f:Text
查看输出,如下所示:
Event[0]: Log Name: System Source: Microsoft-Windows-WER-SystemErrorReporting Date: 2021-04-14T08:53:52.933 Event ID: 1001 Task: N/A Level: Error Opcode: N/A Keyword: Classic User: N/A User Name: N/A Computer: WINDOWS Description: The computer has rebooted from a bugcheck. The bugcheck was: 0x1000007f (0x 0000000000000008, 0xffffc6812ab94f70, 0xffffc6812e38eff0, 0xfffff80e9a572794 ). A dump was saved in: C:\Windows\Minidump\041421-12656-01.dmp. Report Id: a5710c98-a577-4b3e-a3c9-2fc0aa4e5d83.
使用该快照创建磁盘。
使用可疑虚拟机的新创建磁盘创建具有附加非启动磁盘的虚拟机。您的恢复虚拟机应满足以下条件:
- 恢复虚拟机必须与创建的磁盘位于同一可用区。
- 恢复虚拟机还应使用 Windows Server 映像。
- 恢复虚拟机的启动磁盘的来源映像应与发生故障的虚拟机启动磁盘的来源映像不同。
浏览附加磁盘并找到以下文件:
%SystemRoot%\Memory.dmp %SystemRoot%\Minidump\DATE-TIME-NUM.dmp
文件的日期和时间可以帮助您确定可疑实例是否遇到蓝屏错误。这些文件也可以用于分析和诊断。
可选:删除不再需要的附加资源:
确认您的 Windows 虚拟机的 VPC 网络已配置为允许与 KMS 通信。
确认 Windows 防火墙允许与 KMS 服务器建立出站连接:
- IP 地址:
35.190.247.13
- 端口:
1688
- 协议:
TCP
如需详细了解如何配置 Windows 高级防火墙规则,请参阅创建出站端口规则。
- IP 地址:
通过运行以下命令,测试与 KMS 服务器的连接成功:
powershell.exe Test-NetConnection 35.190.247.13 -Port 1688
运行以下命令来确认许可的当前状态,设置 KMS 的服务器 IP 地址,然后强制激活:
cscript \windows\system32\slmgr.vbs /dlv
cscript \windows\system32\slmgr.vbs /skms 35.190.247.13:1688
cscript \windows\system32\slmgr.vbs /ato
确保您满足访问串行控制台的要求。
启用紧急管理服务。如果 EMS 已关闭,串行控制台不会接受任何键盘输入,只会显示空白屏幕(闪烁光标)。
命令提示符
使用 RDP 连接到虚拟机,并以管理员身份打开
Command Prompt
。如果您无法使用 RDP,请将后续步骤作为值添加到windows-startup-script-cmd
启动键中。将全局 EMS 重定向设置设为使用 COM2(波特率 115200),并启用 EMS。
bcdedit /emssettings EMSPORT:2 EMSBAUDRATE:115200 bcdedit /ems on
重新启动虚拟机以应用更新后的配置。如果您要使用元数据脚本,请勿添加关停命令。
shutdown -r -t 0
PowerShell
通过 RDP 连接,并以管理员身份打开
Powershell
。如果您无法使用 RDP,请将后续步骤作为值添加到windows-startup-script-ps1
启动键中。将全局 EMS 重定向设置设为使用 COM2(波特率 115200),并启用 EMS。
bcdedit /emssettings EMSPORT:2 EMSBAUDRATE:115200 bcdedit /ems on
重新启动虚拟机以应用更新后的配置。如果您要使用元数据脚本,请勿添加关停命令。
shutdown -r -t 0
了解如何从虚拟机收集诊断信息。
了解如何从虚拟机捕获屏幕截图。
详细了解如何与串行控制台进行交互。
了解如何排查 RDP 连接的问题。
使用“高级启动选项”菜单
如果 Windows 未正确启动,请使用“高级启动选项”菜单访问安全模式或完成操作系统的在线修复。如需了解详情,请参阅高级启动选项。
如需进入 Windows 虚拟机上的“高级启动选项”菜单,请完成以下步骤:
启用 Windows 启动管理器菜单
您可以将 Windows 启动管理器菜单配置为在重新启动 Windows 虚拟机实例时显示。如需启用 Windows 启动管理器菜单,请执行以下操作:
连接到虚拟机,然后使用管理员权限打开命令提示符。 如果您无法连接到虚拟机,请将后续步骤作为值添加到
windows-startup-script-cmd
或windows-startup-script-ps1
启动脚本,而不是直接运行它们命令提示符
PowerShell
完成离线修复
如果您的虚拟机无法正常启动,并且使用高级启动菜单无法解决此问题,请尝试使用正常运行的 Windows 虚拟机实例执行离线修复,并借助发生故障的虚拟机的启动磁盘快照进行恢复。使用快照让您可修改备份副本,而不需要更改原始虚拟机的状态。
排查蓝屏错误
Windows 操作系统可能会遇到停止代码或蓝屏错误,也称为“蓝屏死机”。如果虚拟机遇到蓝屏错误,则虚拟机会停止运行,需要先执行重启,然后才能恢复正常操作。
如果您认为发生了蓝屏错误,请通过以下一种或多种方法识别是否存在错误来进行确认:
串行端口 1
串行端口 2
命令提示符
如需了解如何自定义
wetutil
查询,请参阅wevtutil
。磁盘快照
如果虚拟机不再运行,或者其他方法已失败。您可以使用辅助虚拟机检查可疑蓝屏虚拟机的启动磁盘。使用快照让您可修改备份副本,而不需要更改原始虚拟机的状态。
获得蓝屏错误信息并根据需要获取内存转储文件的访问权限后,请按照 Microsoft 提供的诊断步骤和建议执行操作:
许可问题
Windows 操作系统通过连接到密钥管理服务 (KMS) 服务器,每七天续订一次许可。如果您收到有关许可到期的消息或与 Windows 虚拟机上的许可相关的任何其他问题,请执行以下操作:
排查交互式串行控制台问题
后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-12-18。
-