Windows VM 上的休眠故障排除

休眠虚拟机让你可将 VM 状态持久保存到 OS 磁盘。 本文介绍如何排查 Windows 中休眠功能的问题、创建已启用休眠的 Windows VM 的问题以及 Windows VM 休眠问题。

若要查看休眠的常规故障排除指南,请查看 Azure 中的休眠疑难解答

无法休眠 Windows 虚拟机

如果无法休眠 VM,请先 检查是否在 VM 上启用休眠

如果在 VM 上启用了休眠,请检查是否在来宾 OS 中成功启用了休眠。 可以检查休眠扩展的状态,以查看该扩展是否能够成功配置来宾 OS 进行休眠。

Windows VM 预配成功的状态和状态消息报告的屏幕截图。

VM 实例视图将具有扩展的最终输出:

"extensions": [
    {
      "name": "AzureHibernateExtension",
      "type": "Microsoft.CPlat.Core.WindowsHibernateExtension",
      "typeHandlerVersion": "1.0.2",
      "statuses": [
        {
          "code": "ProvisioningState/succeeded",
          "level": "Info",
          "displayStatus": "Provisioning succeeded",
          "message": "Enabling hibernate succeeded. Response from the powercfg command: \tThe hiberfile size has been set to: 17178693632 bytes.\r\n"
        }
      ]
    },

此外,确认在客户端中启用休眠作为可用的睡眠状态。 来宾的期望结果应如下所示。

C:\Users\vmadmin>powercfg /a
    The following sleep states are available on this system:
        Hibernate
        Fast Startup

    The following sleep states are not available on this system:
        Standby (S1)
            The system firmware does not support this standby state.

        Standby (S2)
            The system firmware does not support this standby state.

        Standby (S3)
            The system firmware does not support this standby state.

        Standby (S0 Low Power Idle)
            The system firmware does not support this standby state.

        Hybrid Sleep
            Standby (S3) isn't available.


如果休眠未被列为受支持的睡眠状态,则应有一个与之相关的原因,这将帮助确定为什么不支持休眠。 如果未为 VM 配置来宾休眠,则会发生这种情况。

C:\Users\vmadmin>powercfg /a
    The following sleep states are not available on this system:
        Standby (S1)
            The system firmware does not support this standby state.

        Standby (S2)
            The system firmware does not support this standby state.

        Standby (S3)
            The system firmware does not support this standby state.

        Hibernate
            Hibernation hasn't been enabled.

        Standby (S0 Low Power Idle)
            The system firmware does not support this standby state.

        Hybrid Sleep
        Standby (S3) is not available.
            Hibernation is not available.

        Fast Startup
            Hibernation is not available.

如果扩展或来宾睡眠状态报告错误,则需要根据错误说明更新来宾配置,以解决该问题。 修复所有问题后,可以通过运行“powercfg /a”命令来验证是否已在来宾中成功启用休眠,该命令应将休眠状态返回为睡眠状态之一。 此外,验证 AzureHibernateExtension 是否返回成功状态。 如果扩展仍处于失败状态,则通过触发重新应用 VM API 来更新扩展状态

注释

如果扩展程序保持失败状态,则无法休眠 VM。

扩展失败的常见问题。

問题 行动
页面文件位于临时磁盘中。 将其移动到 OS 磁盘以启用休眠。 将页面文件移动到 C: 驱动器,并在 VM 上触发重新应用以重新运行扩展
由于休眠文件空间不足,Windows 无法配置休眠 确保 C: 驱动器有足够的空间。 可以尝试扩展 OS 磁盘、C: 分区大小以解决此问题。 在有足够空间后,触发 Reapply 操作,以便扩展可以重试在虚拟机中启用休眠并成功。
扩展错误消息:“附加到系统的设备无法正常工作” 确保 C: 驱动器有足够的空间。 可以尝试扩展 OS 磁盘、C: 分区大小以解决此问题。 一旦有足够的空间,触发重新应用操作,从而使扩展可以在虚拟机中重试启用休眠并成功。
在虚拟机中启用基于虚拟化的安全性(VBS)后,不再支持休眠。 为了获取 VBS 功能和特性并使来宾系统能够休眠,请在来宾系统中启用虚拟化技术。 在来宾 OS 中启用虚拟化。
启用休眠失败。 powercfg 命令的响应。 退出代码:1。 错误消息:休眠失败,出现以下错误:该请求不受支持。 以下项目正在阻止此系统进入休眠状态。 当前的 Device Guard 配置将禁用休眠。 内部系统组件已禁用休眠。 虚拟机监控程序 启用虚拟化以便在虚拟机中获得 VBS 功能,同时支持虚拟机休眠功能。 若要在来宾中启用虚拟化,请参阅 本文档

虚拟机中的来宾 Windows 无法进入休眠状态

如果休眠操作成功,将在虚拟机中看到以下事件:

Guest responds to the hibernate operation (note that the following event is logged on the guest on resume)

    Log Name:      System
    Source:        Kernel-Power
    Event ID:      42
    Level:         Information
    Description:
    The system is entering sleep

如果来宾无法休眠,则缺少所有这些事件或部分事件。 常见问题:

問题 行动
由于 Hyper-V 来宾关闭服务已禁用,来宾无法进入休眠状态。 可以通过运行 sc 查询 vmicshutdown 来检查此问题。 确保 Hyper-V 来宾关闭服务未被禁用。 启用此服务应解决此问题。
来宾无法休眠,因为 Power Service 已禁用。 可以通过运行 sc query power 来检查。 确保 Power Service 未被禁用。 启用此服务应解决此问题
来宾无法休眠,因为已启用 HVCI(内存完整性)。 如果在客户机中启用了内存完整性,并且您尝试让虚拟机休眠,请确保您的客户机正在运行支持内存完整性休眠所需的最低操作系统版本。

Win 11 22H2 - 最低 OS 版本 - 22621.2134
Win 11 21H1 - 最低系统版本 - 22000.2295
Win 10 22H2 - 最低 OS 内部版本 - 19045.3324

故障排除所需的日志:

如果在这些已知方案之外遇到问题,以下日志可帮助 Azure 排查该问题:

  • 来宾上的相关事件日志:Microsoft-Windows-Kernel-Power、Microsoft-Windows-Kernel-General、Microsoft-Windows-Kernel-Boot。
  • 在 bug 检查期间,虚拟机崩溃转储非常有用。

无法恢复 Windows VM

从休眠状态启动 VM 时,可以使用 VM 实例状态视图获取有关虚拟机来宾操作系统是否成功从其以前的休眠状态恢复,或是否未能恢复从而执行冷启动的更多详细信息。

来宾成功恢复时,VM 实例查看输出:

{
  "computerName": "myVM",
  "osName": "Windows 11 Enterprise",
  "osVersion": "10.0.22000.1817",
  "vmAgent": {
    "vmAgentVersion": "2.7.41491.1083",
    "statuses": [
      {
        "code": "ProvisioningState/succeeded",
        "level": "Info",
        "displayStatus": "Ready",
        "message": "GuestAgent is running and processing the extensions.",
        "time": "2023-04-25T04:41:17.296+00:00"
      }
    ],
    "extensionHandlers": [
      {
        "type": "Microsoft.CPlat.Core.RunCommandWindows",
        "typeHandlerVersion": "1.1.15",
        "status": {
          "code": "ProvisioningState/succeeded",
          "level": "Info",
          "displayStatus": "Ready"
        }
      },
      {
        "type": "Microsoft.CPlat.Core.WindowsHibernateExtension",
        "typeHandlerVersion": "1.0.3",
        "status": {
          "code": "ProvisioningState/succeeded",
          "level": "Info",
          "displayStatus": "Ready"
        }
      }
    ]
  },  
  "extensions": [
    {
      "name": "AzureHibernateExtension",
      "type": "Microsoft.CPlat.Core.WindowsHibernateExtension",
      "typeHandlerVersion": "1.0.3",
      "substatuses": [
        {
          "code": "ComponentStatus/VMBootState/Resume/succeeded",
          "level": "Info",
          "displayStatus": "Provisioning succeeded",
          "message": "Last guest resume was successful."
        }
      ],
      "statuses": [
        {
          "code": "ProvisioningState/succeeded",
          "level": "Info",
          "displayStatus": "Provisioning succeeded",
          "message": "Enabling hibernate succeeded. Response from the powercfg command: \tThe hiberfile size has been set to: XX bytes.\r\n"
        }
      ]
    }
  ],
  "statuses": [
    {
      "code": "ProvisioningState/succeeded",
      "level": "Info",
      "displayStatus": "Provisioning succeeded",
      "time": "2023-04-25T04:41:17.8996086+00:00"
    },
    {
      "code": "PowerState/running",
      "level": "Info",
      "displayStatus": "VM running"
    }
  ]
}


如果 Windows 来宾无法从以前的状态恢复并冷启动,则 VM 实例视图响应为:

  "extensions": [
    {
      "name": "AzureHibernateExtension",
      "type": "Microsoft.CPlat.Core.WindowsHibernateExtension",
      "typeHandlerVersion": "1.0.3",
      "substatuses": [
        {
          "code": "ComponentStatus/VMBootState/Start/succeeded",
          "level": "Info",
          "displayStatus": "Provisioning succeeded",
          "message": "VM booted."
        }
      ],
      "statuses": [
        {
          "code": "ProvisioningState/succeeded",
          "level": "Info",
          "displayStatus": "Provisioning succeeded",
          "message": "Enabling hibernate succeeded. Response from the powercfg command: \tThe hiberfile size has been set to: XX bytes.\r\n"
        }
      ]
    }
  ],
  "statuses": [
    {
      "code": "ProvisioningState/succeeded",
      "level": "Info",
      "displayStatus": "Provisioning succeeded",
      "time": "2023-04-19T17:18:18.7774088+00:00"
    },
    {
      "code": "PowerState/running",
      "level": "Info",
      "displayStatus": "VM running"
    }
  ]
}

恢复时的 Windows 来宾事件

如果来宾成功恢复,则提供以下来宾事件:

Log Name:      System
    Source:        Kernel-Power
    Event ID:      107
    Level:         Information
    Description:
    The system has resumed from sleep. 

如果来宾无法恢复,则缺少所有这些事件或部分事件。 若要排查来宾无法恢复的原因,需要以下日志:

  • 来宾上的事件日志:Microsoft-Windows-Kernel-Power、Microsoft-Windows-Kernel-General、Microsoft-Windows-Kernel-Boot。
  • 在错误检查时,需要虚拟机崩溃转储文件。