Следуя этой статье (http://www.coreazure.com/snapshot-vms-in-azure-2/) Я пытаюсь создать моментальный снимок виртуальной машины с помощью powershell (PS) с портала Azure. Это PS скрипт, который я создал, чтобы сделать снимокСоздание моментального снимка виртуальной машины в Azure
workflow snapshot1
{
$subName = 'XYZ'
$cred = Get-AutomationPSCredential -Name "[email protected]"
Add-AzureAccount -Credential $cred
Set-AzureSubscription -SubscriptionName $subName -CurrentStorageAccount 'storagename'
$serviceName = "a1smallvm"
$vm = Get-AzureVM –ServiceName $serviceName –Name "a1smallvm"
$storageContainer = "backups"
InlineScript {
# Create a storage for putting the backups of OSDisk & DataDisks
New-AzureStorageContainer -Name $Using:storageContainer -Permission off
# Stop VM if running
$Using:vm | Stop-AzureVM -StayProvisioned
$vm = Get-AzureVM –ServiceName $Using:serviceName –Name "a1smallvm"
$vmOSDisk = $vm | Get-AzureOSDisk
$vmDataDisks = $vm | Get-AzureDataDisk
Write-output "OSDisk: $vmOSDisk"
$storageAccountName = $vmOSDisk.MediaLink.Host.Split(‘.’)[0]
Write-output "Data Disk: $vmDataDisks"
Write-output "StorageAccountName: $storageAccountName"
$vmOSBlobName = $vmOSDisk.MediaLink.Segments[-1]
$vmOSContainerName = $vmOSDisk.MediaLink.Segments[-1].Split(‘/’)[0]
Write-output "vmOSBlobName: $vmOSBlobName"
Write-output "vmOSContainerName: $vmOSContainerName"
# Backup the osblob and oscontainer
Start-AzureStorageBlobCopy -SrcContainer $vmOSContainerName -SrcBlob $vmOSBlobName -DestContainer $Using:storageContainer
Get-AzureStorageBlobCopyState -Container $Using:storageContainer -Blob $vmOSBlobName -WaitForComplete
# Backup the dataBlob and dataContainer
ForEach ($vmDataDisk in $vmDataDisks) {
$vmDataBlobName = $vmDataDisk.MediaLink.Segments[-1]
$vmDataContainerName = $vmDataDisk.MediaLink.Segments[-2].Split(‘/’)[0]
Start-AzureStorageBlobCopy -SrcContainer $vmDataContainerName -SrcBlob $vmDataBlobName -DestContainer backups -Force
Get-AzureStorageBlobCopyState -Container backups -Blob $vmDataBlobName -WaitForComplete
}
}
}
Командлет
Start-AzureStorageBlobCopy -SrcContainer $vmOSContainerName -SrcBlob $vmOSBlobName -DestContainer $Using:storageContainer
выдает ошибку:
Error: Start-AzureStorageBlobCopy : Container name 'a1smallvm-a1smallvm-2015-08-11.vhd' is invalid. Valid names start and end with a lower case letter or a number and has in between a lower case letter, number or dash with no consecutive dashes and is 3 through 63 characters long.
Имя контейнера «a1smallvm-a1smallvm- 2015-08-11.vhd ', который я получаю, соответствует правильному формату именования, но все же почему он дает ошибку, указав, что имя недопустимо. VM была создана с портала, это тип виртуальной машины A1, ОС - CentOS «OpenLogic 6.5». Не знаете, что случилось?
Ниже приведены выходы из
OSDisk: Microsoft.WindowsAzure.Commands.ServiceManagement.Model.OSVirtualHardDisk
Data Disk:
StorageAccountName: portalvhds14510n2y65vnh
vmOSBlobName: a1smallvm-a1smallvm-2015-08-11.vhd
vmOSContainerName: a1smallvm-a1smallvm-2015-08-11.vhd
правильный сценарий Write-Output в: имя учетной записи хранения должен быть таким же, или мы должны добавить контекст учетной записи хранилища назначения.
$storageAccountName = $vmOSDisk.MediaLink.Host.Split(‘.’)[0] Set-AzureSubscription -SubscriptionName $subName -CurrentStorageAccount '$storagenameAccountName'
И индекс Сегменты должны быть -2 не -1 $vmOSContainerName = $vmOSDisk.MediaLink.Segments[-2].Split(‘/’)[0]
Я думаю, что существует проблема с разбором 'MediaLink' для получения имени контейнера. Имя вашего контейнера действительно недействительно. Он не может содержать период (.) - https://msdn.microsoft.com/en-us/library/azure/dd135715.aspx –
@Gaurav Да, вы правы, но как получить имя контейнера? Я отредактировал сообщение и предоставил результат в конце. – devd
Можете ли вы поделиться значением 'MediaLink'? –