You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Azure .Net SDK/Fluent API调整虚拟机磁盘并处理相关报错

报错根因

"Disk resizing is allowed only when creating a VM or when the VM is deallocated."
Azure平台对虚拟机磁盘扩容有明确状态限制:仅支持在虚拟机创建阶段,或虚拟机处于*已停止释放(Deallocated)*状态时调整磁盘大小,运行状态、仅关机未释放资源的虚拟机都无法执行磁盘扩容操作。

修复步骤
  • 先调用API将目标虚拟机关机并释放资源,等待释放操作完全完成后再执行磁盘大小修改
  • 磁盘扩容仅支持调大容量,传入的requestObject.DiskSize值必须大于原OS磁盘的DiskSizeGB属性值,否则会触发新的参数错误
  • 磁盘扩容完成后可根据业务需要选择是否重新启动虚拟机
修正后的代码示例
Microsoft.Azure.Management.ResourceManager.Fluent.Core.RestClient restClient = GetRestClient(requestObject);
var computeClient = new ComputeManagementClient(restClient) { SubscriptionId = requestObject.SubscriptionId };
var ObjVirtualMachines = computeClient.VirtualMachines.GetAsync(requestObject.ResourceGroupName, requestObject.VirtualMachineName, null, new System.Threading.CancellationToken()).Result;

// 新增:先释放虚拟机
var deallocateOperation = computeClient.VirtualMachines.BeginDeallocateAsync(requestObject.ResourceGroupName, requestObject.VirtualMachineName).Result;
// 等待释放操作完成
while (deallocateOperation.ProvisioningState != "Succeeded")
{
    Thread.Sleep(5000);
    deallocateOperation = computeClient.VirtualMachines.GetAsync(requestObject.ResourceGroupName, requestObject.VirtualMachineName).Result;
}

// 修改磁盘大小
ObjVirtualMachines.StorageProfile.OsDisk.DiskSizeGB = requestObject.DiskSize;
var newUpdateVM = computeClient.VirtualMachines.CreateOrUpdateAsync(requestObject.ResourceGroupName, requestObject.VirtualMachineName, ObjVirtualMachines).Result;
resizeDisk = newUpdateVM.ProvisioningState;

// 按需补充:扩容完成后启动虚拟机
// computeClient.VirtualMachines.BeginStartAsync(requestObject.ResourceGroupName, requestObject.VirtualMachineName).Wait();

内容的提问来源于stack exchange,提问作者DnyaneshSurya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 20:39:00