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

如何使用新版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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:17:29