Azure Windows VM 关闭停滞在“正在重启”、“正在关闭”或“正在停止服务”上

适用于:✔️ Windows VM

本文提供了一些步骤来解决在 azure Microsoft 中重新启动 Windows 虚拟机(VM)时可能会遇到的“正在重启”、“关闭”或“正在停止服务”消息的问题。

现象

使用 启动诊断 查看 VM 的屏幕截图时,可能会看到屏幕截图显示消息“正在重启”、“正在关闭”或“正在停止服务”。

重启、关闭和停止服务屏幕的屏幕截图。

原因

Windows 使用关闭过程来执行系统维护操作,并处理更新、角色和功能等更改。 在完成之前,不建议中断此关键过程。 此过程可能需要很长时间,具体取决于更新/更改数和 VM 大小。 如果进程已停止,OS 可能会损坏。 仅当进程花费的时间过长时才会中断进程。

解决方案

收集进程内存转储

  1. 将 Procdump 工具下载到新的或现有的数据磁盘中,该磁盘附加到同一区域中的工作 VM。

  2. 分离包含工作 VM 所需的文件的磁盘,并将磁盘附加到损坏的 VM。 我们将此磁盘 称为实用工具磁盘

使用 串行控制台 完成以下步骤:

  1. 打开管理 PowerShell,检查停止后停止响应的服务。

    Get-Service | Where-Object {$_.Status -eq "STOP_PENDING"}
    
  2. 在管理 CMD 上,获取无响应服务的 PID。

    tasklist /svc | findstr /i <STOPING SERVICE>
    
  3. 从无响应进程 <停止服务>获取内存转储示例。

    procdump.exe -s 5 -n 3 -ma <PID>
    
  4. 现在终止无响应的进程以解锁关闭进程。

    taskkill /PID <PID> /t /f
    

OS 再次启动后,如果它正常启动,只需确保 OS 一致性正常。 如果报告损坏,请运行以下命令,直到磁盘损坏可用:

dism /online /cleanup-image /restorehealth

如果无法收集进程内存转储,或者此问题是递归的,并且需要根本原因分析,请继续收集下面的 OS 内存转储,继续打开支持请求。

收集 OS 内存转储

如果问题在等待更改进行处理后无法解决,则需要收集内存转储文件并联系支持人员。 若要收集转储文件,请执行以下步骤:

将 OS 磁盘附加到恢复 VM

  1. 拍摄受影响的 VM 的 OS 磁盘的快照作为备份。 有关详细信息,请参阅拍摄磁盘快照

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

  3. 通过远程桌面连接到恢复 VM。

  4. 如果 OS 磁盘已加密,则必须关闭加密,然后才能转到下一步。 有关详细信息,请参阅 解密无法启动的 VM 中的加密 OS 磁盘。

找到转储文件并提交支持票证

  1. 在恢复 VM 上,转到附加的 OS 磁盘中的 Windows 文件夹。 如果分配给附加 OS 磁盘的驱动器号为 F,则需转到 F:\Windows。

  2. 找到memory.dmp文件,然后使用 转储文件提交支持票证

如果找不到转储文件,请转到下一步以启用转储日志和串行控制台。

启用转储日志和串行控制台

若要启用转储日志和串行控制台,请运行以下脚本。

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

  2. 运行以下脚本:

    在此脚本中,假定分配给附加 OS 磁盘的驱动器号为 F。将其替换为 VM 中的相应值。

    reg load HKLM\BROKENSYSTEM F:\windows\system32\config\SYSTEM
    
    REM Enable Serial Console
    bcdedit /store F:\boot\bcd /set {bootmgr} displaybootmenu yes
    bcdedit /store F:\boot\bcd /set {bootmgr} timeout 5
    bcdedit /store F:\boot\bcd /set {bootmgr} bootems yes
    bcdedit /store F:\boot\bcd /ems {<BOOT LOADER IDENTIFIER>} ON
    bcdedit /store F:\boot\bcd /emssettings EMSPORT:1 EMSBAUDRATE:115200
    
    REM Suggested configuration to enable OS Dump
    REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\CrashControl" /v CrashDumpEnabled /t REG_DWORD /d 1 /f
    REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\CrashControl" /v DumpFile /t REG_EXPAND_SZ /d "%SystemRoot%\MEMORY.DMP" /f
    REG ADD "HKLM\BROKENSYSTEM\ControlSet001\Control\CrashControl" /v NMICrashDump /t REG_DWORD /d 1 /f
    
    REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\CrashControl" /v CrashDumpEnabled /t REG_DWORD /d 1 /f
    REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\CrashControl" /v DumpFile /t REG_EXPAND_SZ /d "%SystemRoot%\MEMORY.DMP" /f
    REG ADD "HKLM\BROKENSYSTEM\ControlSet002\Control\CrashControl" /v NMICrashDump / t REG_DWORD /d 1 /f
    
    reg unload HKLM\BROKENSYSTEM
    
  3. 验证磁盘上是否有足够的空间来分配与 RAM 一样多的内存,具体取决于要为此 VM 选择的大小。

  4. 如果空间不足或 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
    
  5. 分离 OS 磁盘,然后将 OS 磁盘重新附加到受影响的 VM

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

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

    串行控制台窗口中按钮栏上的“发送不可屏蔽中断(NMI)”按钮的屏幕截图。

  8. 再次将 OS 磁盘附加到恢复 VM,收集转储文件。

收集转储文件后,请联系Microsoft支持部门来确定根本原因。

联系我们寻求帮助

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