如何使用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
相关产品推荐
相关产品推荐

