Создание снимка виртуальной машины в Azure
Следуя этой статье ( http://www.coreazure.com/snapshot-vms-in-azure-2/), я пытаюсь создать снимок виртуальной машины с помощью powershell(PS) из портала Azure. Это сценарий PS, который я создал, чтобы сделать снимок
workflow snapshot1
{
$subName = 'XYZ'
$cred = Get-AutomationPSCredential -Name "xyz@xyzgmail.onmicrosoft.com"
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', которое я получаю, соответствует правильному формату именования, но все же почему оно выдает ошибку, сообщая, что имя недействительно. Виртуальная машина была создана на портале, это виртуальная машина типа А1, ОС 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
Правильный сценарий: имя учетной записи хранения должно быть таким же, иначе нам придется добавить контекст целевой учетной записи хранения.
$storageAccountName = $vmOSDisk.MediaLink.Host.Split(‘.’)[0]
Set-AzureSubscription -SubscriptionName $subName -CurrentStorageAccount '$storagenameAccountName'
И индекс для сегментов должен быть -2, а не -1 $vmOSContainerName = $vmOSDisk.MediaLink.Segments[-2].Split(‘/’)[0]
1 ответ
Я не эксперт по PowerShell (и я уверен, что есть лучшие способы сделать это), но вы могли бы сделать следующее:
$vmOSContainerName = $vmOSDisk.MediaLink.AbsolutePath.Split('/')[1]
Это будет выводить vhds
это имя вашего контейнера BLOB-объектов.