【问题标题】:Add existing vhd to Azure VM using PowerShell Azure Resource Manager cmdlets使用 PowerShell Azure 资源管理器 cmdlet 将现有 vhd 添加到 Azure VM
【发布时间】:2015-10-05 19:23:14
【问题描述】:

注意:这是一个 Azure ARM 问题,而不是 Azure 服务管理问题。

我的存储帐户中有 2 个 vhd - machine-os.vhd 和 machine-data.vhd。我可以使用 PowerShell ARM cmdlet 创建具有现有操作系统 vhd 的 VM,但无法弄清楚如何附加现有数据 vhd。我发现的所有示例都创建了 EMPTY 数据磁盘 - 但我想将现有的 vhd 附加为数据磁盘。

我尝试将createOption attach 开关与Add-AzureVMDataDisk 一起使用,如下所示:

$vm = New-AzureVMConfig ... $vm = Add-AzureVMDataDisk -VM $vm -VhdUri $existingDiskUri -Name "machine-data.vhd" -Caching ReadOnly -CreateOption attach -DiskSizeInGB 200

但是,操作失败并显示:

Blob https://x.blob.core.windows.net/vhds/machine-data.vhd already exists. Please provide a different blob URI to create a new blank data disk 'machine-data.vhd.'

我必须指定DiskSizeInGB 才能使Add-AzureVMDataDisk 命令起作用(这看起来很奇怪)。我尝试指定SourceImageUriVhdUri 的不同名称,根据documentation,应该将vhd 从sourceImageUri 复制到vhdUri 并附加它。尝试 createOption fromImage 失败,因为“您无法使用源图像 uri 指定大小”。但是,cmdlet 的 size 参数是强制性的,所以我不知道如何指定 sourceUri 而不是 size。

This SO question 提出了类似的问题(尽管我没有得到相同的错误),但答案中的链接显示了一个带有 EMPTY 数据磁盘的模板,这没有帮助。

有趣的是,我尝试从 Azure 门户将磁盘添加到 VM - 您必须在此处指定名称和 URI,但操作总是失败并出现一些奇怪的 json 解析错误。我似乎无法正确获取数据盘的 uri。

【问题讨论】:

    标签: powershell azure azure-resource-manager


    【解决方案1】:

    玩了一会儿后,我发现了一个 hack:

    1. 为现有磁盘提供一个新的 URI 并将其设置为 vhdUri
    2. 使用现有磁盘的 URI 作为sourceImageUri
    3. 使用CreateOption fromImage 致电Add-AzureVMDataDisk
    4. 将数据盘的大小设置为空(这是hack)
    5. 调用New-AzureVM时,将现有磁盘复制到新的Uri中
    6. 创建VM后,我删除了原来的vhd

    不幸的是,您必须将DiskSizeInGB 参数提供给Add-AzureVMDataDisk 命令,因为它是强制性的。但是,我将其设置为 null,否则配置失败(错误消息说您不能同时指定 size 和 sourceImageUri)。

    这是最终代码:

    $vm = New-AzureVMConfig ...
    $vm = Add-AzureVMDataDisk -VM $vm `
          -SourceImageUri $existingDataDiskUrl -VhdUri $newDataDiskUri `
          -Name $newDataDiskName -CreateOption fromImage -Caching ReadOnly `
          -DiskSizeInGB 200
    
    # hack
    $vm.StorageProfile.DataDisks[0].DiskSizeGB = $null
    

    之后您可以调用: New-AzureVM -ResourceGroupName $rgName -Location $location -VM $vm

    VM 创建完成后,我调用Remove-AzureStorageBlob 删除原始磁盘。

    也许有更清洁的方法,但我找不到。至少这种方式最终是可行的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多