2

Я следую this guide для автоматизации резервного копирования виртуальных машин Linux в Azure Automation. Все идет хорошо в тестировании на первом прогоне, а вторая и все последующие тесты возвращают следующее сообщение об ошибке:Ошибка запуска-AzureStorageBlobCopy в рабочей книге автоматизации

11/26/2014 11:03:45 AM, Error: Start-AzureStorageBlobCopy : One or more errors occurred. 
At LinuxVMBackup:40 char:40 
+ 
    + CategoryInfo   : CloseError: (:) [Start-AzureStorageBlobCopy], AggregateException 
    + FullyQualifiedErrorId : 
AggregateException,Microsoft.WindowsAzure.Commands.Storage.Blob.Cmdlet.StartAzureStorageBlobCopy 

Вот является runbook:

workflow LinuxVMBackup 
{ 
    param (
     [Parameter(Mandatory=$true)] 
     [PSCredential] 
     $Cred, 

     [Parameter(Mandatory=$true)] 
     [string] 
     $subName, 

     [Parameter(Mandatory=$true)] 
     [string] 
     $serviceName, 

     [Parameter(Mandatory=$true)] 
     [string] 
     $vmName 
    ) 

    # Login and get VM 
    $null = Add-AzureAccount -Credential $Cred 
    $null = Select-AzureSubscription -SubscriptionName $subName 
    $vm = Get-AzureVM -ServiceName $serviceName -Name $vmName 

    # Stop VM 
    $vm | Stop-AzureVM -StayProvisioned 

    # Get OS and Data Disks 
    $vmOSDisk = Get-AzureOSDisk -VM (Get-AzureVM -ServiceName $serviceName -Name $vmName) 
    $vmDataDisks = Get-AzureDataDisk -VM (Get-AzureVM -ServiceName $serviceName -Name $vmName) 

    # Get and set storage name 
    $StorageAccountName = $vmOSDisk.MediaLink.Host.Split('.')[0] 
    Set-AzureSubscription -CurrentStorageAccount $StorageAccountName -SubscriptionName $subName 

    $backupContainerName = "backups" 
    if (!(Get-AzureStorageContainer -Name $backupContainerName -ErrorAction SilentlyContinue)) { 
     New-AzureStorageContainer -Name $backupContainerName -Permission Off 
    } 

    # Snapshot OS Disk 
    $vmOSBlobName = $vmOSDisk.MediaLink.Segments[-1] 
    $vmOSContainerName = $vmOSDisk.MediaLink.Segments[-2].Split('/')[0] 
    #Error on this line 
     Start-AzureStorageBlobCopy -SrcContainer $vmOSContainerName -SrcBlob $vmOSBlobName -DestContainer $backupContainerName 
    #Error on this line 
    Get-AzureStorageBlobCopyState -Container $backupContainerName -Blob $vmOSBlobName -WaitForComplete 

    #Snapshot Data Disks 
    ForEach ($vmDataDisk in $vmDataDisks) { 
     $vmDataBlobName = $vmDataDisk.MediaLink.Segments[-1] 
     $vmDataContainerName = $vmDataDisk.MediaLink.Segments[-2].Split('/')[0] 

     Start-AzureStorageBlobCopy -SrcContainer $vmDataContainerName -SrcBlob $vmDataBlobName -DestContainer $backupContainerName -Force 
     Get-AzureStorageBlobCopyState -Container $backupContainerName -Blob $vmDataBlobName -WaitForComplete 
    } 

    #Get blobs in storage and output 
    $insertedBlobs = Get-AzureStorageBlob -Container $backupContainerName 
    Write-Output $insertedBlobs 
    $vm | Start-AzureVM 

} 

Я не мог найти что-нибудь в Интернете, сохранить ответьте на форумах Microsoft на аналогичную ошибку, указав, что виртуальная машина должна быть остановлена, поэтому я подумал, что, возможно, VM не полностью остановлена ​​при запуске Start-AzureStorageBlobCopy. Я попробовал тестирование с остановленной виртуальной машиной и все еще получил ошибку.

Благодарим за помощь.

ответ

4

Учитывая, что ошибка возникает только после первой успешной копии, вероятно, что командлет Start-AzureStorageBlobCopy пытается запросить подтверждение пользователя для операции, поскольку он будет перезаписывать существующие данные. Поскольку Azure Automation запускает runbooks в неинтерактивном сеансе, пользовательское подтверждение не может быть задано, поэтому команда не работает.

Добавление -Force должно «принудительно» подтвердить подтверждение пользователя командлетом и устранить проблему. У вас есть этот параметр во втором экземпляре Start-AzureStorageBlobCopy, но не первый.

PS - Вы должны поставить эту рабочую книгу в наш runbook gallery, чтобы другие могли воспользоваться ею!

+0

Здравствуйте, Джо, благодарю вас за ответ. Я использовал -Force, и он работает. Это действительно попытка перезаписать один снимок blob, поскольку я не использовал -DestBlob для установки нового имени. Еще раз спасибо! – Ahmad

Смежные вопросы