你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn 。
让 Windows 虚拟机休眠
本文内容
适用于:✔️ Windows VM
休眠让你可以暂停当前未使用的 VM,并节省计算成本。 它是适用于以下方案的有效成本管理功能:
虚拟桌面、开发/测试服务器及其他 VM 无需 24/7 运行的方案。
由内存密集型应用程序导致启动时间较长的系统。 这些应用程序可以在 VM 上初始化并置于休眠状态。 然后,这些“预热的”VM 可以在需要时快速启动,而应用程序已启动并在所需状态下运行。
休眠的工作原理
若要了解休眠的原理,请参阅休眠概述 。
支持的配置
休眠支持仅限于某些 VM 大小和 OS 版本。 在使用休眠之前,请确保你具有受支持的配置。
有关兼容休眠功能的 VM 大小的列表,请参阅休眠概述中的“支持的 VM 大小”部分 。
支持的 Windows 版本
以下 Windows 操作系统支持休眠:
Windows Server 2022
Windows Server 2019
Windows 11 专业版
Windows 11 企业版
Windows 11 企业版多会话
Windows 10 专业版
Windows 10 企业版
Windows 10 企业版多会话
先决条件和配置限制
Windows 页面文件不能位于临时磁盘上。
在来宾 OS 中启用受信任启动和嵌套虚拟化时,需要基于虚拟化的安全性 (VBS) 的应用程序(例如 Device Guard 和 Credential Guard)支持休眠。
有关常规限制、支持 Azure 功能限制的 VM 大小和功能先决条件,请参阅休眠概述中的“支持的配置”部分 。
创建启用了休眠的 Windows VM
要休眠 VM,必须先在 VM 上启用该功能。
要在创建 VM 期间启用休眠,可以使用 Azure 门户、CLI、PowerShell、ARM 模板和 API。
要在 Azure 门户中启用休眠,请在创建 VM 期间选中“启用休眠”框。
要在 Azure CLI 中启用休眠,请运行以下 az vm create 命令并将 --enable-hibernation
设置为 true
来创建 VM。
az vm create --resource-group myRG \
--name myVM \
--image Win2019Datacenter \
--public-ip-sku Standard \
--size Standard_D2s_v5 \
--enable-hibernation true
要在使用 PowerShell 创建 VM 时启用休眠,请运行以下命令:
New-AzVm `
-ResourceGroupName 'myRG' `
-Name 'myVM' `
-Location 'East US' `
-VirtualNetworkName 'myVnet' `
-SubnetName 'mySubnet' `
-SecurityGroupName 'myNetworkSecurityGroup' `
-PublicIpAddressName 'myPublicIpAddress' `
-Size Standard_D2s_v5 `
-Image Win2019Datacenter `
-HibernationEnabled `
-OpenPorts 80,3389
要创建启用了休眠的 VM,请将 hibernationEnabled 设置为 true
。
PUT https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/{vm-name}?api-version=2021-11-01
{
"location": "eastus",
"properties": {
"hardwareProfile": {
"vmSize": "Standard_D2s_v5"
},
"additionalCapabilities": {
"hibernationEnabled": true
}
}
}
要了解有关 REST 的详细信息,请查看 API 示例
创建启用了休眠的 VM 后,需要配置来宾 OS 以便成功休眠 VM。
在现有 Windows VM 上启用休眠
要在现有 VM 上启用休眠,可以使用 Azure CLI、PowerShell 或 REST API。 在继续操作之前,请确保来宾 OS 版本支持 Azure 上的休眠。 有关详细信息,请参阅受支持的 OS 版本 。
注意
确保页面文件位于 C: drive
上。 如有必要,请将页面文件移到 C: drive
,然后再继续。
要使用 Azure CLI 在现有 VM 上启用休眠,请先使用 az vm deallocate 解除分配 VM。 解除分配 VM 后,更新 OS 磁盘和 VM。
更新 OS 磁盘,以将 supportsHibernation 设置为 true
。 如果 supportsHibernation 已设置为 true
,则可以跳过此步骤并继续执行下一步。
az disk update --resource-group myResourceGroup \
--name MyOSDisk \
--set supportsHibernation=true
更新 VM 以启用休眠。
az vm update --resource-group myResourceGroup \
--name myVM \
--enable-hibernation true
启动 VM,然后继续在来宾 OS 中配置休眠。
az vm start --resource-group myResourceGroup \
--name myVM \
要使用 Azure PowerShell 在现有 VM 上启用休眠,请先使用 Stop-Az vm deallocate 来停止 VM。 解除分配 VM 后,更新 OS 磁盘和 VM。
Stop-AzVM `
-ResourceGroupName 'myResourceGroup' `
-Name 'myVM'
停止 VM 后,更新 OS 磁盘,以将 SupportsHibernation 设置为 true
。 如果 SupportsHibernation 已设置为 true
,则可以跳过此步骤并继续执行下一步。
$disk = Get-AzDisk `
-ResourceGroupName "myResourceGroup" `
-DiskName "myOSDisk"
$disk.SupportsHibernation = $True
Update-AzDisk `
-ResourceGroupName ‘myResourceGroup' `
-DiskName 'myOSDisk' `
-Disk $disk
在 VM 上启用休眠。
$vm= Get-AzVM `
-ResourceGroupName "myResourceGroup" `
-Name "myVM"
Update-AzVM `
-ResourceGroupName "myResourceGroup" `
-VM $vm `
-HibernationEnabled
启动 VM,然后继续在来宾 OS 中配置休眠。
Start-AzVM `
-ResourceGroupName 'myResourceGroup' `
-Name 'myVM'
在来宾 OS 中配置休眠
创建 Windows VM 时启用休眠的话,会自动安装“Microsoft.CPlat.Core.WindowsHibernateExtension”VM 扩展。 此扩展会为来宾 OS 配置休眠。 此扩展不需要手动安装或更新,因为它由 Azure 平台管理。
注意
创建启用了休眠的 VM 时,Azure 会自动将页面文件放在 C: drive
上。 如果要在现有 VM 上启用休眠或使用专用映像,则需要执行其他步骤,以确保页面文件位于 C: drive
上。
注意
使用 WindowsHibernateExtension 要求在 VM 上安装 Azure VM Agent。 如果选择不使用 Azure VM Agent,则可以通过在来宾中运行 powercfg /h /type full 来配置 OS 的休眠。 然后,可以使用 powercfg /a 命令验证是否在来宾内部启用了休眠。
使 VM 休眠
创建启用了休眠的 VM 并且来宾 OS 配置了休眠后,可以通过 Azure 门户、Azure CLI、PowerShell 或 REST API 休眠 VM。
要在 Azure 门户中休眠 VM,请单击 VM 概述页面上的“休眠”按钮。
要在 Azure CLI 中休眠 VM,请运行以下命令:
az vm deallocate --resource-group TestRG --name TestVM --hibernate true
要在 PowerShell 中休眠 VM,请运行以下命令:
Stop-AzVM -ResourceGroupName "TestRG" -Name "TestVM" -Hibernate
运行上述命令后,输入“Y”继续:
Virtual machine stopping operation
This cmdlet will stop the specified virtual machine. Do you want to continue?
[Y] Yes [N] No [S] Suspend [?] Help (default is "Y"): Y
要使用 REST API 休眠 VM,请运行以下命令:
POST
https://management.azure.com/subscriptions/.../providers/Microsoft.Compute/virtualMachines/{vmName}/deallocate?hibernate=true&api-version=2021-03-01
查看休眠 VM 的状态
要在门户中查看 VM 的状态,请查看概述页面上的“状态”。 它应报告为“已休眠(已解除分配)”
使用 PowerShell 查看 VM 的状态:
Get-AzVM -ResourceGroupName "testRG" -Name "testVM" -Status
你的输出应类似下面的形式:
ResourceGroupName : testRG
Name : testVM
HyperVGeneration : V1
Disks[0] :
Name : testVM_OsDisk_1_d564d424ff9b40c987b5c6636d8ea655
Statuses[0] :
Code : ProvisioningState/succeeded
Level : Info
DisplayStatus : Provisioning succeeded
Time : 4/17/2022 2:39:51 AM
Statuses[0] :
Code : ProvisioningState/succeeded
Level : Info
DisplayStatus : Provisioning succeeded
Time : 4/17/2022 2:39:51 AM
Statuses[1] :
Code : PowerState/deallocated
Level : Info
DisplayStatus : VM deallocated
Statuses[2] :
Code : HibernationState/Hibernated
Level : Info
DisplayStatus : VM hibernated
使用 Azure CLI 查看 VM 的状态:
az vm get-instance-view -g MyResourceGroup -n myVM
你的输出应类似下面的形式:
{
"additionalCapabilities": {
"hibernationEnabled": true,
"ultraSsdEnabled": null
},
"hardwareProfile": {
"vmSize": "Standard_D2s_v5",
"vmSizeProperties": null
},
"instanceView": {
"assignedHost": null,
"bootDiagnostics": null,
"computerName": null,
"statuses": [
{
"code": "ProvisioningState/succeeded",
"displayStatus": "Provisioning succeeded",
"level": "Info",
"message": null,
"time": "2022-04-17T02:39:51.122866+00:00"
},
{
"code": "PowerState/deallocated",
"displayStatus": "VM deallocated",
"level": "Info",
"message": null,
"time": null
},
{
"code": "HibernationState/Hibernated",
"displayStatus": "VM hibernated",
"level": "Info",
"message": null,
"time": null
}
],
},
要使用 REST API 查看 VM 的状态,请运行以下命令:
GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/instanceView?api-version=2020-12-01
你的输出应类似下面的形式:
"statuses":
[
{
"code": "ProvisioningState/succeeded",
"level": "Info",
"displayStatus": "Provisioning succeeded",
"time": "2019-10-14T21:30:12.8051917+00:00"
},
{
"code": "PowerState/deallocated",
"level": "Info",
"displayStatus": "VM deallocated"
},
{
"code": "HibernationState/Hibernated",
"level": "Info",
"displayStatus": "VM hibernated"
}
]
启动休眠的 VM
可以像启动停止的 VM 一样启动休眠的 VM。 这可以通过 Azure 门户、Azure CLI、PowerShell 或 REST API 来完成。
要使用 Azure 门户启动休眠的 VM,请单击 VM 概述页面上的“开始”按钮。
要使用 Azure CLI 启动休眠的 VM,请运行以下命令:
az vm start -g MyResourceGroup -n MyVm
要使用 PowerShell 启动休眠的 VM,请运行以下命令:
Start-AzVM -ResourceGroupName "ExampleRG" -Name "ExampleName"
要使用 REST API 启动休眠的 VM,请运行以下命令:
POST https://management.azure.com/subscriptions/../providers/Microsoft.Compute/virtualMachines/{vmName}/start?api-version=2020-12-01
通过 Azure Compute Gallery 部署启用了休眠的 VM
还可以为通过 Compute Gallery 映像创建的 VM 启用休眠。 确保与 Gallery 映像关联的 OS 版本支持 Azure 上的休眠。 请参阅支持的 OS 版本列表。
要使用 Gallery 映像创建启用了休眠的 VM,首先需要创建启用了休眠属性的新映像定义。 在 Gallery 映像定义上启用此功能属性后,可以创建映像版本 ,并使用该映像版本创建启用了休眠的 VM。
注意
对于专用 Windows 映像,页面文件位置必须设置为 C: 驱动器,以便 Azure 成功配置来宾 OS 的休眠。
如果要通过现有 VM 创建映像版本,应首先将页面文件移动到 OS 磁盘,然后使用 VM 作为映像版本的源。
要创建启用了休眠属性的映像定义,请选择“启用休眠”的复选标记。
az sig image-definition create --resource-group MyResourceGroup \
--gallery-name MyGallery --gallery-image-definition MyImage \
--publisher GreatPublisher --offer GreatOffer --sku GreatSku \
--os-type linux --os-state Specialized \
--features IsHibernateSupported=true
$rgName = "myResourceGroup"
$galleryName = "myGallery"
$galleryImageDefinitionName = "myImage"
$location = "eastus"
$publisherName = "GreatPublisher"
$offerName = "GreatOffer"
$skuName = "GreatSku"
$description = "My gallery"
$IsHibernateSupported = @{Name='IsHibernateSupported';Value='True'}
$features = @($IsHibernateSupported)
New-AzGalleryImageDefinition -ResourceGroupName $rgName -GalleryName $galleryName -Name $galleryImageDefinitionName -Location $location -Publisher $publisherName -Offer $offerName -Sku $skuName -OsState "Generalized" -OsType "Windows" -Description $description -Feature $features
通过 OS 磁盘部署启用了休眠的 VM
也可以为通过 OS 磁盘创建的 VM 启用休眠。 确保与 OS 磁盘关联的 OS 版本支持 Azure 上的休眠。 请参阅支持的 OS 版本列表。
要使用 OS 磁盘创建启用了休眠的 VM,请确保 OS 磁盘启用了休眠属性。 请参阅 API 示例,了解如何在 OS 磁盘上启用此属性。 在 OS 磁盘上启用了休眠属性后,可以使用该 OS 磁盘创建启用了休眠的 VM。
PATCH https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/myDisk?api-version=2021-12-01
{
"properties": {
"supportsHibernation": true
}
}
故障排除
有关详细信息,请参阅休眠故障排除指南 和 Windows VM 休眠故障排除指南 。
常见问题
有关详细信息,请参阅休眠常见问题解答 。
后续步骤