3

注意:这是一个 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才能工作(这看起来很奇怪)。我尝试为 指定SourceImageUri一个不同的名称VhdUri,根据文档,应该将 vhd 从 sourceImageUri 复制到 vhdUri 并附加它。尝试createOption fromImage失败,因为“您无法使用源图像 uri 指定大小”。但是,cmdlet 的 size 参数是强制性的,所以我不知道如何指定 sourceUri 而不是 size。

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

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

4

1 回答 1

0

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

  1. 为现有磁盘提供一个新 URI 并将其设置为vhdUri
  2. 使用现有磁盘的 URI 作为sourceImageUri
  3. 使用Add-AzureVMDataDisk_CreateOption fromImage
  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删除原始磁盘。

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

于 2015-07-16T21:30:39.627 回答