VM 启动时停滞,并在 Azure 中显示“正在准备 Windows。 请不要关闭计算机”

适用于:✔️ Windows VM

本文介绍在 azure Microsoft 中启动 Windows 虚拟机(VM)时可能会遇到的“就绪”和“准备 Windows 就绪”屏幕。 本文提供用于收集支持票证数据的步骤。

注意

本文有帮助吗? 你的输入对我们很重要。 请使用此页上的 “反馈 ”按钮告诉我们本文为你工作得有多好,或者我们如何改进它。

现象

Windows VM 不启动。 使用 启动诊断 获取 VM 的屏幕截图时,可能会看到 VM 显示消息“就绪”或“准备好 Windows”。

Windows Server 2012 R2 V M 的屏幕截图,其中显示了消息:准备就绪。

V M 的屏幕截图,其中显示了消息:准备好 Windows。

原因

通常,当服务器在配置更改后执行最终重启时,会出现此问题。 配置更改可能由 Windows 更新或服务器的角色或功能的更改进行初始化。 对于Windows 更新,如果更新很大,操作系统需要更多的时间来重新配置更改。

解决方案 1:从备份还原 VM

如果 VM 有最近的备份,可以尝试 从备份 还原 VM 以修复启动问题。

解决方案 2:收集 OS 内存转储文件

如果无法从备份还原 VM 或无法解决问题,则必须收集内存转储文件,以便分析崩溃。

步骤 1:直接收集转储文件

第 1 部分:将 OS 磁盘附加到恢复 VM
  1. 创建受影响 VM 的 OS 磁盘的快照以创建备份。 有关详细信息,请参阅 创建虚拟硬盘的快照。

  2. 将 OS 磁盘附加到恢复 VM

  3. 使用远程桌面协议(RDP)远程连接到恢复 VM。

  4. 如果受影响的 VM 的 OS 磁盘已加密,请关闭加密,然后再转到下一步。 有关详细信息,请参阅 解密加密的 OS 磁盘

第 2 部分:找到转储文件并提交支持票证
  1. 在恢复 VM 上,转到 附加 OS 磁盘上的 Windows 文件夹。 例如,如果分配给附加 OS 磁盘的驱动器号为 F,请转到 F:\Windows

  2. 找到Memory.dmp文件,然后提交支持票证并附加转储文件。

如果找不到转储文件,请转到后续步骤以启用转储日志和串行控制台,然后触发内存转储进程。

步骤 2:启用转储日志和串行控制台

重要

此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,按以下步骤操作时请务必谨慎。 若要进行保护,请先备份注册表,然后再对其进行修改,以便在出现问题时还原它。 有关如何备份和还原注册表的详细信息,请参阅:如何备份和还原 Windows 中的注册表

若要启用转储日志和串行控制台,请执行以下步骤:

  1. 以管理员身份打开提升的命令提示符会话。

  2. 使用 /ems 和 /emssettings 选项运行以下 BCDEdit 命令:

    启用串行控制台:

    bcdedit /store <volume-letter-containing-the-bcd-folder>:\boot\bcd /ems {<boot-loader-identifier>} ON
    bcdedit /store <volume-letter-containing-the-bcd-folder>:\boot\bcd /emssettings EMSPORT:1 EMSBAUDRATE:115200
    
  3. 验 OS 磁盘上的可用空间是否大于 VM 上的内存大小 (RAM)。

    如果 OS 磁盘上没有足够的空间,请更改创建内存转储文件的位置,并将该位置引用附加到 VM 且有足够的可用空间的任何数据磁盘。 若要更改位置,请替换为 %SystemRoot% 数据磁盘的驱动器号,如 F:以下命令中的驱动器号。

    若要启用 OS 转储文件,请运行以下 加载添加卸载 命令,以使用 reg 工具实现建议的配置:

    从损坏的 OS 磁盘加载注册表配置单元:

    reg load HKLM\<broken-system> <volume-letter-of-broken-os-disk>:\windows\system32\config\SYSTEM
    

    在 ControlSet001 上启用:

    reg add "HKLM\<broken-system>\ControlSet001\Control\CrashControl" /v CrashDumpEnabled /t REG_DWORD /d 1 /f
    reg add "HKLM\<broken-system>\ControlSet001\Control\CrashControl" /v DumpFile /t REG_EXPAND_SZ /d "%SystemRoot%\MEMORY.DMP" /f
    reg add "HKLM\<broken-system>\ControlSet001\Control\CrashControl" /v NMICrashDump /t REG_DWORD /d 1 /f
    

    在 ControlSet002 上启用:

    reg add "HKLM\<broken-system>\ControlSet002\Control\CrashControl" /v CrashDumpEnabled /t REG_DWORD /d 1 /f
    reg add "HKLM\<broken-system>\ControlSet002\Control\CrashControl" /v DumpFile /t REG_EXPAND_SZ /d "%SystemRoot%\MEMORY.DMP" /f
    reg add "HKLM\<broken-system>\ControlSet002\Control\CrashControl" /v NMICrashDump /t REG_DWORD /d 1 /f
    

    卸载损坏的 OS 磁盘:

    reg unload HKLM\<broken-system>
    

确保磁盘上有足够的空间来分配与 RAM 一样多的内存,具体取决于为此 VM 选择的大小。 如果空间不足,或者这是一个大型 VM(G、GS 或 E 系列),可以更改创建此文件的位置,并引用附加到 VM 的任何其他数据磁盘。 为此,必须修改注册表项,如以下代码所示:

reg load HKLM\BROKENSYSTEM F:\windows\system32\config\SYSTEM

REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\CrashControl" /v DumpFile /t REG_EXPAND_SZ /d "<DRIVE LETTER OF YOUR DATA DISK>:\MEMORY.DMP" /f
REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\CrashControl" /v DumpFile /t REG_EXPAND_SZ /d "<DRIVE LETTER OF YOUR DATA DISK>:\MEMORY.DMP" /f

reg unload HKLM\BROKENSYSTEM

步骤 3:触发内存转储进程

  1. 分离 OS 磁盘,然后将 OS 磁盘重新附加到受影响的 VM

  2. 启动 VM 并访问串行控制台。

  3. 选择“ 发送不可屏蔽的中断(NMI”) 以触发内存转储。

    “发送不可屏蔽的中断”项的屏幕截图。

  4. 按照步骤 1 中的 说明操作:再次收集 转储文件。

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 你还可以将产品反馈提交到 Azure 反馈社区