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

通过ARM模板基于含数据磁盘的现有Azure镜像创建VM时能否添加额外数据磁盘?

用带数据磁盘的Azure镜像创建VM时添加额外磁盘的解决方案

当然可以实现啦!你碰到的这个错误其实是ARM模板的JSON结构出了问题——JSON对象里不允许存在同名属性,而你的模板里storageProfile节点下重复定义了dataDisks,所以才会抛出 Can not add property dataDisks to Newtonsoft.Json.Linq.JObject. Property with the same name already exists on object 这个错误提示。

错误根源

当你使用包含数据磁盘的自定义镜像时,如果模板中既通过镜像引用继承了磁盘配置,又手动重复写了一个dataDisks节点,就会导致JSON解析时出现重复属性的冲突。

正确实现方法

要保留镜像原有数据磁盘并添加额外磁盘,你只需要确保storageProfile下只有一个dataDisks数组,并把镜像中原有的磁盘配置和新磁盘配置合并到这个数组里即可:

  1. 获取镜像原有数据磁盘配置
    你可以在Azure门户或通过Azure CLI命令az image show --name <镜像名称> --resource-group <资源组名称>查看镜像的dataDisks配置,把这些配置复制到模板的dataDisks数组中。

  2. 合并新磁盘配置
    在同一个dataDisks数组里,追加你想要添加的额外磁盘配置。如果需要批量添加多个磁盘,还可以用ARM模板的copy功能来简化:

    示例模板片段:

    "storageProfile": {
      "imageReference": {
        "id": "[resourceId('Microsoft.Compute/images', parameters('imageName'))]"
      },
      "osDisk": {
        "caching": "ReadWrite",
        "createOption": "FromImage"
      },
      "dataDisks": [
        // 镜像中原有的数据磁盘配置
        {
          "lun": 0,
          "createOption": "FromImage",
          "caching": "ReadOnly",
          "diskSizeGB": 128
        }
      ],
      // 用copy循环批量添加额外磁盘
      "copy": [
        {
          "name": "dataDisks",
          "count": "[parameters('numberOfAdditionalDataDisks')]",
          "input": {
            "lun": "[add(1, copyIndex('dataDisks'))]",
            "createOption": "Empty",
            "diskSizeGB": "[parameters('additionalDataDiskSizeGB')]",
            "caching": "ReadWrite"
          }
        }
      ]
    }
    
  3. 注意事项

    • 每个数据磁盘的lun(逻辑单元号)必须唯一,不能和原有磁盘的lun重复
    • 新磁盘的createOption设为Empty(创建空磁盘),原有磁盘的createOption保持FromImage(从镜像复制)

这样配置后,部署ARM模板时就会同时创建镜像里的原有数据磁盘和你新增的额外磁盘,不会再出现重复属性的错误啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 14:27:41