调整 Windows VM 的大小

本文介绍如何使用 Azure Powershell 将虚拟机切换到不同的虚拟机大小

完成创建虚拟机 (VM) 后,可以通过更改 VM 大小来扩大或缩小 VM。 在某些情况下,必须先解除分配 VM。 如果新大小在当前托管 VM 的硬件群集上不可用,则可能会出现这种情况。

如果 VM 使用高级存储,请确保选择 s 版本的大小以获得高级存储支持。 例如,选择 Standard_E4s_v3,而不是 Standard_E4_v3。

调整不在可用性集中的 Windows VM 的大小

设置一些变量。 将值替换为自己的信息。

$resourceGroup = "myResourceGroup"
$vmName = "myVM"

列出托管 VM 的硬件群集上可用的 VM 大小。

Get-AzureRmVMSize -ResourceGroupName $resourceGroup -VMName $vmName 

如果列出了所需大小,运行以下命令即可重设虚拟机大小。 如果未列出所需大小,请转到步骤 3。

$vm = Get-AzureRmVM -ResourceGroupName $resourceGroup -VMName $vmName
$vm.HardwareProfile.VmSize = "<newVMsize>"
Update-AzureRmVM -VM $vm -ResourceGroupName $resourceGroup

如果未列出所需大小,运行以下命令即可解除分配虚拟机、重设其大小,并重新启动虚拟机。 将 替换为所需大小。

Stop-AzureRmVM -ResourceGroupName $resourceGroup -Name $vmName -Force
$vm = Get-AzureRmVM -ResourceGroupName $resourceGroup -VMName $vmName
$vm.HardwareProfile.VmSize = "<newVMSize>"
Update-AzureRmVM -VM $vm -ResourceGroupName $resourceGroup
Start-AzureRmVM -ResourceGroupName $resourceGroup -Name $vmName

Warning

解除分配 VM 会释放分配给该 VM 的所有动态 IP 地址。 OS 和数据磁盘不受影响。

调整可用性集中的 Windows VM 的大小

如果可用性集中 VM 的新大小在当前托管 VM 的硬件群集上不可用,则需要解除分配可用性集中的所有 VM 以调整 VM 大小。 已调整一个 VM 的大小后,可能还需要更新可用性集中其他 VM 的大小。 若要调整可用性集中 VM 的大小,请执行以下步骤。

$resourceGroup = "myResourceGroup"
$vmName = "myVM"

列出托管 VM 的硬件群集上可用的 VM 大小。

Get-AzureRmVMSize -ResourceGroupName $resourceGroup -VMName $vmName 

如果列出了所需大小,请运行以下命令来调整 VM 的大小。 如果未列出所需大小,请转到下一部分。

$vm = Get-AzureRmVM -ResourceGroupName $resourceGroup -VMName $vmName 
$vm.HardwareProfile.VmSize = "<newVmSize>"
Update-AzureRmVM -VM $vm -ResourceGroupName $resourceGroup

如果未列出所需大小,继续执行以下步骤即可解除分配可用性集中的所有 VM、重设 VM 大小,并重新启动它们。

停止可用性集中的所有 VM。

$as = Get-AzureRmAvailabilitySet -ResourceGroupName $resourceGroup
$vmIds = $as.VirtualMachinesReferences
foreach ($vmId in $vmIDs){
    $string = $vmID.Id.Split("/")
    $vmName = $string[8]
    Stop-AzureRmVM -ResourceGroupName $resourceGroup -Name $vmName -Force
    } 

调整可用性集中 VM 的大小并重新启动。

$newSize = "<newVmSize>"
$as = Get-AzureRmAvailabilitySet -ResourceGroupName $resourceGroup
$vmIds = $as.VirtualMachinesReferences
  foreach ($vmId in $vmIDs){
    $string = $vmID.Id.Split("/")
    $vmName = $string[8]
    $vm = Get-AzureRmVM -ResourceGroupName $resourceGroup -Name $vmName
    $vm.HardwareProfile.VmSize = $newSize
    Update-AzureRmVM -ResourceGroupName $resourceGroup -VM $vm
    Start-AzureRmVM -ResourceGroupName $resourceGroup -Name $vmName
    }

后续步骤