【问题标题】:PowerShell script to move data disk from one azure vm to another vm用于将数据磁盘从一个 azure vm 移动到另一个 vm 的 PowerShell 脚本
【发布时间】:2018-11-22 01:12:10
【问题描述】:

我正在开发一个脚本来将数据磁盘从一个 Azure VM 复制到另一个 Azure VM。下面是任务:

  1. 从源 VM 创建现有数据磁盘的 SNAPSHOTS
  2. 从步骤 1 中创建的 SNAPSHOTS 创建新的 DATADISKS
  3. 将新的 DATADISKS 附加到目标 VM

我已经编写了完整的代码。但是第 3 步抛出错误。

## Create Snapshot from a Managed Disk ##

$resourceGroupName = 'manju_copy_disk' 
$location = 'east us 2' 
$source_vm_name = 'server1'
$destination_vm_name = 'server3'

$source_vm_object = get-azurermvm -ResourceGroupName $resourceGroupName -Name $source_vm_name

$data_disk_list = Get-AzureRmDisk | where {$_.ManagedBy -match $source_vm_name -and $_.OsType -eq $null}

$snapshot_list = New-Object System.Collections.ArrayList($null)

foreach($data_disk_list_iterator in $data_disk_list){

    $snapshotName = $destination_vm_name + "_Snapshot_" + $data_disk_list_iterator.Name

    $snapshot_config = New-AzureRmSnapshotConfig -SourceUri $data_disk_list_iterator.id -Location $location -CreateOption copy

    $snapshot_object = New-AzureRmSnapshot -Snapshot $snapshot_config -SnapshotName $snapshotName -ResourceGroupName $resourceGroupName

    $snapshot_list.Add($snapshot_object.Id)

}


## Create Managed disk from snap shot created above ##
$storageType = 'StandardLRS'


$count=0

$destination_datadisk_list = New-Object System.Collections.ArrayList($null)
#$destination_datadisk_Name_list = New-Object System.Collections.ArrayList($null)

foreach($snapshot_list_iterator in $snapshot_list){


    $disk_name = $destination_vm_name + "_datadisk_" + $count
    $count += 1

    $diskConfig = New-AzureRmDiskConfig -AccountType $storageType -Location $location -CreateOption Copy -SourceResourceId $snapshot_list_iterator

    $datadisk_object = New-AzureRmDisk -Disk $diskConfig -ResourceGroupName $resourceGroupName -DiskName $disk_name

    $destination_datadisk_ID_list.Add($datadisk_object.Id)

}



## Attach Managed disk to destination vm

$destination_vm_object = Get-AzureRmVM -Name $destination_vm_name -ResourceGroupName $resourceGroupName 

$lun_count = 1

foreach($destination_datadisk_list_iterator in $destination_datadisk_list){
    $destination_datadisk_name = $destination_vm_name + "_datadisk_"+$lun_count
    $destination_vm_object = Add-AzureRmVMDataDisk -VM $destination_vm_object -Name $destination_datadisk_name -CreateOption Attach -ManagedDiskId $destination_datadisk_list_iterator -Lun $lun_count
    $lun_count += 1
}

Update-AzureRmVM -VM $destination_vm_object -ResourceGroupName $resourceGroupName  ## --> LINE CODE NOT WORKING

以下是错误:

Update-AzureRmVM : Changing property 'dataDisk.name' is not allowed.
ErrorCode: PropertyChangeNotAllowed
ErrorMessage: Changing property 'dataDisk.name' is not allowed.
StatusCode: 409
ReasonPhrase: Conflict
OperationID : e8a0a8de-0cdd-4ba0-90bc-883d37e374af
At line:1 char:1
+ Update-AzureRmVM -VM $destination_vm_object -ResourceGroupName $resou ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError: (:) [Update-AzureRmVM], ComputeCloudException
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.Compute.UpdateAzureVMCommand

【问题讨论】:

标签: azure azure-virtual-machine azure-powershell


【解决方案1】:

当您附加从快照创建的数据磁盘时,您不能再次更改名称。看看this

所以我建议您可以从快照创建数据磁盘,并将它们附加到同名的同一 foreach 循环中的目标 VM。

【讨论】:

  • 我从“Add-AzureRmVMDataDisk”cmdlet 中删除了“-name”参数,并且它起作用了。另外,我按照您的建议移动了代码以将磁盘附加到 for 循环下。谢谢
猜你喜欢
  • 2017-05-24
  • 1970-01-01
  • 1970-01-01
  • 2020-04-03
  • 1970-01-01
  • 2016-09-08
  • 2011-01-05
  • 2017-06-10
  • 2018-09-28
相关资源
最近更新 更多