注意:这是Azure ARM问题 - 而不是Azure服务管理问题。
我在存储帐户中有2个vhds - machine-os.vhd和machine-data.vhd。我可以使用PowerShell ARM cmdlet创建具有现有OS vhd的VM,但无法弄清楚如何附加EXISTING数据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
指定一个不同的名称,根据documentation,它应该将vhd从sourceImageUri复制到vhdUri并附加它。尝试createOption fromImage
失败,因为“您无法使用源图像uri指定大小”。但是,cmdlet的size参数是必需的,因此我不知道如何指定sourceUri而不是大小。
This SO question提出了类似的问题(虽然我没有得到相同的错误),但答案中的链接显示了一个带有EMPTY数据磁盘的模板,但没有帮助。
有趣的是,我尝试从Azure门户将磁盘添加到VM中 - 您必须指定名称和URI,但操作总是失败并出现一些奇怪的json解析错误。我似乎无法正确获取数据磁盘的uri。
答案 0 :(得分:0)
在玩了一下之后我发现了一个黑客:
vhdUri
sourceImageUri
Add-AzureVMDataDisk
CreateOption fromImage
New-AzureVM
时,现有磁盘将复制到新的Uri 不幸的是,您必须向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
创建虚拟机后,我呼叫Remove-AzureStorageBlob
删除原始磁盘。
也许有一种更清洁的方式,但我找不到。至少这种方式最终有效。