注意:这是一个Azure ARM问题,而不是一个Azure服务管理问题。
我的存储帐户中有2个vhds-machine-os.vhd和machine-data.vhd。我可以使用PowerShell ARM cmdlet创建具有现有OS 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
的其他名称,根据documentation,应将vhd从sourceImageUri复制到vhdUri并附加它。尝试createOption fromImage
失败,因为“您无法使用源图像uri指定大小”。但是,该cmdlet的size参数是强制性的,因此我不知道如何指定sourceUri而不是size。
This SO question出现了类似的问题(尽管我没有得到相同的错误),但是答案中的链接显示了带有EMPTY数据磁盘的模板,这没有帮助。
有趣的是,我尝试将磁盘从Azure门户添加到VM-您必须在其中指定名称和URI,但是操作总是失败,并出现一些奇怪的json解析错误。我似乎无法正确获取数据磁盘的uri。
最佳答案
经过多玩之后,我发现了一个hack:
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 -VM $ vm
创建虚拟机后,我调用
Remove-AzureStorageBlob
删除原始磁盘。也许有一种更清洁的方法,但是我找不到。至少这种方式最终有效。
关于powershell - 使用PowerShell Azure资源管理器cmdlet将现有的vhd添加到Azure VM,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31452664/