在 Microsoft Dev Box 中配置休眠

Microsoft Dev Box 中的休眠有助于高效管理云开发环境,同时降低成本。 通过启用休眠,可以保留打开的应用程序和窗口的状态,从而节省虚拟机(VM)成本,而不会中断工作流。 本文介绍如何在开发框映像和定义级别配置休眠、自动执行休眠计划以及解决兼容性注意事项。

随着 Dev Box 休眠功能的引入,你可以在新的开发盒子上启用此功能,并对其进行休眠和恢复。 此功能提供了一种在维护工作环境的同时管理开发框的便捷方法。

按照以下三个步骤启用休眠:

  1. 在开发框映像上启用休眠
  2. 在开发框定义上启用休眠
  3. 使用自动停止计划实现开发箱池的自动休眠,或在 RDP 断开连接时停止。

已启用休眠的映像的注意事项

在开发箱中启用休眠之前,请查看以下有关已启用休眠的映像的注意事项。

  • 目前,两个 SKU 支持休眠:8 和 16 个 vCPU SKU。 目前,32 个 vCPU SKU 不支持休眠。

  • 只有在使用支持休眠的开发框定义创建的新开发框中,才能启用休眠。 无法在现有开发框中启用休眠。

  • 可以使用Microsoft开发人员门户、Azure CLI、PowerShell、SDK 或 REST API 来休眠开发框。 不支持从 Windows 的开发箱中休眠。

  • 如果使用 Azure 市场映像,建议使用 Visual Studio 进行开发箱映像。

  • Windows 11 企业版 CloudPC + OS 优化映像包含优化的电源设置,它们不能与休眠一起使用。

  • 启用休眠后,无法禁用该开发框中的功能。 但是,可以在开发框 定义 上禁用休眠支持,以便将来创建的开发框没有休眠。

  • 若要启用休眠,需要在 Windows OS 中启用嵌套虚拟化。 如果未在 DevBox 映像中启用“虚拟机平台”功能,则如果选择启用休眠,DevBox 会自动为你启用嵌套虚拟化。

  • 休眠不支持受虚拟机监控程序保护的代码完整性(HVCI)/内存完整性功能。 开发环境会自动禁用此功能。

  • 自动停止计划将使在关联的 Dev Box 定义上启用休眠后创建的 Dev Box 休眠。 在启用 Dev Box 定义中的休眠功能之前创建的 Dev Box 将继续被关闭。

与休眠不兼容的设置

已知以下设置与休眠不兼容,在休眠方案中不受支持:

  • 内存完整性/虚拟机监控程序代码完整性

    要禁用内存完整性/虚拟机监控程序代码完整性:

    1. 在 Windows“开始”菜单中,找到并打开 Windows 安全性
    2. 转到 设备安全性
    3. “核心隔离”下,选择 “核心隔离”详细信息
    4. “内存完整性”下,将开关设置为 “关闭”。

    更改此设置后,需要重新启动计算机。 更改此设置后,重启计算机。

  • 不启用嵌套虚拟化的基于来宾虚拟安全模式的功能

    若要启用嵌套虚拟化,请:

    1. 在“开始”菜单中,搜索 打开或关闭 Windows 功能
    2. 在对话框中,选中 “虚拟机平台 ”复选框。
    3. 选择 “确定 ”保存设置更改。

在开发框映像上启用休眠

如果计划从 Azure 计算库使用自定义映像,则需要在创建新映像时启用休眠功能。 无法为现有映像启用休眠。

注释

Microsoft Dev Box 在 Azure 市场中提供的 Visual Studio 和 Microsoft 365 映像已配置为支持休眠。 无需在这些映像上启用休眠,即可使用这些映像。

若要启用休眠功能,请在创建映像时将 IsHibernateSupported 标志 true 设置为:

az sig image-definition create 
--resource-group <resourceGroupName> --gallery-name <galleryName> --gallery-image-definition <imageName> --___location <___location> 
--publisher <publisherName> --offer <offerName> --sku <skuName> --os-type windows --os-state Generalized 
--features "IsHibernateSupported=true SecurityType=TrustedLaunch" --hyper-v-generation V2 

如果使用 sysprep 和通用 VM 创建自定义映像,请使用 Azure CLI 捕获映像:

az sig image-version create 
--resource-group <resourceGroupName> --gallery-name <galleryName> --gallery-image-definition <imageName> 
--gallery-image-version <versionNumber> --virtual-machine <VMResourceId>

有关创建自定义映像的详细信息,请参阅 使用 Azure VM 映像生成器配置开发框

详细了解 如何使用 Azure VM 映像生成器在“配置开发”框中创建自定义映像

在开发框定义上启用休眠

在 Microsoft Dev Box 中,当定义使用已启用休眠的自定义或 Azure 市场映像时,可以为新的开发箱定义启用休眠。 还可以更新使用已启用休眠的自定义或 Azure 市场映像的现有开发箱定义。

在开发箱池中创建的所有新开发箱(使用已启用休眠的开发箱定义)都可以休眠和关闭。 如果池具有在启用休眠之前创建的开发箱,则这些开发箱将继续支持关闭。

Microsoft Dev Box 验证您的映像是否支持休眠功能。 如果无法使用映像成功启用休眠,开发箱定义可能会验证失败。

可以使用 Azure 门户或 Azure CLI 在开发框定义上启用休眠。

在 Azure 门户中启用休眠

  1. 登录到 Azure 门户

  2. 在搜索框中,输入“开发人员中心”。 在结果列表中,选择“开发人员中心”。

  3. 打开包含你要更新的开发箱定义的开发人员中心,然后选择“开发箱定义”

    显示开发人员中心概述页和开发框定义的菜单选项的屏幕截图。

  4. 选择要更新的开发框定义,然后选择“编辑”(铅笔)按钮。

    现有开发框定义列表和编辑(铅笔)按钮的屏幕截图。

  5. “编辑开发框定义 ”页上,选中“ 启用休眠 ”复选框。

    用于编辑开发框定义的页面的屏幕截图,其中已选中“启用休眠”。

  6. 选择“保存”

使用 Azure CLI 启用休眠

若要从 Azure CLI 为开发框定义启用休眠,请在创建映像时将 hibernateSupport 标志 Enabled 设置为:

az devcenter admin devbox-definition update 
--dev-box-definition-name <devBoxDefinitionName> -–dev-center-name <devCenterName> --resource-group <resourceGroupName> –-hibernateSupport Enabled

故障排除

如果你在 Dev Box 定义上启用了休眠,并且该定义报告休眠未启用:

  • 建议直接使用 Visual Studio for Dev Box 市场映像,或将其用作基本映像以生成自定义映像。
  • Windows + OS 优化映像包含优化的电源设置,并且与休眠不兼容。
  • 如果您使用自定义 Azure Compute Gallery 映像,请先在 Azure Compute Gallery 映像上启用休眠,然后再对 Dev Box 定义启用休眠。
  • 如果在图库图像上启用休眠功能后仍无法在定义上启用休眠功能,那么你的自定义图像可能具有阻止休眠的 Windows 配置。
  • 如果在预配开发箱时遇到问题,请确保映像支持休眠。
  • 如果映像支持休眠,但在预配期间仍失败,请参阅 Windows VM 上的休眠故障排除

有关详细信息,请参阅 “设置与休眠不兼容”。

在开发框定义上禁用休眠

如果在池上启用休眠后预配新 VM 时遇到问题,请在开发框定义上禁用休眠。

如果在池上启用休眠后预配新 VM 时遇到问题,可以在开发框定义上禁用休眠。 如果要将设置还原为仅关闭开发设备,您还可以禁用休眠功能。

可以使用 Azure 门户或 CLI 在开发框定义上禁用休眠。

在 Azure 门户中禁用休眠

  1. 登录到 Azure 门户

  2. 在搜索框中,输入“开发人员中心”。 在结果列表中,选择“开发人员中心”。

  3. 打开包含你要更新的开发箱定义的开发人员中心,然后选择“开发箱定义”

  4. 选择要更新的开发框定义,然后选择“编辑”(铅笔)按钮。

  5. “编辑开发框定义 ”页上,清除 “启用休眠 ”复选框。

  6. 选择“保存”

使用 Azure CLI 禁用休眠

若要从 Azure CLI 中禁用开发框定义的休眠,请在创建映像时将 hibernateSupport 标志 Disabled 设置为:

az devcenter admin devbox-definition update 
--dev-box-definition-name <devBoxDefinitionName> -–dev-center-name <devCenterName> --resource-group <resourceGroupName> –-hibernateSupport Disabled