如何使用新版Azure Resource Manager API从虚拟机卸载磁盘
从Azure虚拟机卸载磁盘(新版ARM API实现)
在新版Azure.ResourceManager.* API中,卸载数据磁盘的核心逻辑是:在VirtualMachinePatch中保留所有需要保留的数据磁盘配置,同时添加要卸载的磁盘条目并指定DeleteOption = DiskDeleteOptionType.Detach。以下是具体实现步骤:
1. 获取虚拟机当前的数据磁盘配置
首先需要获取目标虚拟机的现有数据磁盘列表,确保后续保留不需要卸载的磁盘:
// 假设已获取VirtualMachineResource实例vm var existingDataDisks = vm.DataDisks.ToList();
2. 构建VirtualMachinePatch对象
指定要卸载的磁盘LUN,保留其他磁盘的完整配置,并添加卸载条目:
int lunToUnmount = 0; // 替换为实际要卸载的磁盘LUN var vmPatch = new VirtualMachinePatch { StorageProfile = new VirtualMachineStorageProfile() }; // 保留所有不需要卸载的磁盘配置 foreach (var disk in existingDataDisks.Where(d => d.Lun != lunToUnmount)) { vmPatch.StorageProfile.DataDisks.Add(new VirtualMachineDataDisk(disk.Lun, DiskCreateOptionType.Attach) { ManagedDisk = new VirtualMachineManagedDisk { Id = disk.ManagedDisk.Id }, DeleteOption = disk.DeleteOption, DiskSizeGB = disk.DiskSizeGB, Caching = disk.Caching }); } // 添加要卸载的磁盘条目,仅指定LUN和Detach选项 vmPatch.StorageProfile.DataDisks.Add(new VirtualMachineDataDisk(lunToUnmount, DiskCreateOptionType.Attach) { DeleteOption = DiskDeleteOptionType.Detach });
3. 执行更新操作
调用UpdateAsync提交补丁完成卸载:
await vm.UpdateAsync(WaitUntil.Completed, vmPatch);
关键说明
- 不能直接将
DataDisks设为空:新版ARM API的Patch操作是增量更新,空集合会被忽略,无法触发卸载。 - 必须保留其他磁盘配置:如果仅添加卸载条目而不保留其他磁盘,会导致其他数据磁盘被意外移除。
- 确保磁盘未被占用:卸载前需确认目标磁盘未被虚拟机正使用,否则操作会失败。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

