【发布时间】:2018-03-30 09:07:04
【问题描述】:
我有一个 azure 虚拟机,并通过门户选择了它的磁盘,并创建了它的快照。我现在如何恢复到磁盘的快照(通过门户或 CLI)?
我不希望从快照创建新磁盘或虚拟机,只是还原。
【问题讨论】:
标签: azure azure-virtual-machine snapshot
我有一个 azure 虚拟机,并通过门户选择了它的磁盘,并创建了它的快照。我现在如何恢复到磁盘的快照(通过门户或 CLI)?
我不希望从快照创建新磁盘或虚拟机,只是还原。
【问题讨论】:
标签: azure azure-virtual-machine snapshot
我现在如何恢复到磁盘的快照(通过门户或 命令行界面)?
您的意思是要使用此快照来回滚您的系统?
很遗憾,目前 Azure 不支持此功能,我们无法使用快照恢复。
在 Azure 中,我们无法直接还原 Azure VM,我们应该从该快照创建磁盘或 VM。
默认情况下,快照用于 Azure 备份。在 Azure 恢复服务中,我们可以从快照中恢复 VM。还原此 VM 是使用此 OS 磁盘创建一个新 VM,而不是回滚。
【讨论】:
这适用于使用 azure 门户中的云外壳的eastus zone 1
$SnapshotName = "my_snapshot"
$SnapshotResourceGroup = "my_resource_group"
$DiskNameOS = "my_new_snapshotdisk"
$snapshotinfo = Get-AzSnapshot -ResourceGroupName $SnapshotResourceGroup -SnapshotName $snapshotName
New-AzDisk -DiskName $DiskNameOS (New-AzDiskConfig -zone 1 -Location eastus -CreateOption Copy -SourceResourceId $snapshotinfo.Id) -ResourceGroupName $SnapshotResourceGroup
之后我去门户中的虚拟机,选择“磁盘”并选择“交换操作系统磁盘”。
【讨论】:
我使用 Set-AzVMOSDisk 使用 Azure PowerShell 成功完成了此操作。有一个 module 很遗憾只能恢复它创建的快照,但它的代码演示了它是如何工作的。
总结:
Get-AzSnapshot -ResourceGroupName "..." # to find the Disk ID
$vm = Get-AzVM -Name "..."
$old_disk = Get-AzDisk -Name $vm.StorageProfile.OsDisk.name
$diskconf = New-AzDiskConfig -AccountType $old_disk.sku.name -Location $old_disk.Location -SourceResourceId "Id of the disk" -CreateOption Copy
$newdisk = NewAzDisk -Disk $diskconf -ResourceGroupName "..." -DiskName "OS_disk_$((New-Guid).ToString())"
Set-AzVMOSDisk -VM $vm -ManagedDiskId $newdisk.Id -Name $newdisk.Name
Update-AzVM -ResourceGroupName "..." -VM $vm
【讨论】:
我是用下面的 PS 脚本完成的。它停止 VM,使用快照创建一个新磁盘,然后将 VM 交换到这个新磁盘。已在停止的 VM 上创建快照。
$resourceGroupName = '...'
$location = 'eastus2'
$vmName = '...'
$snapshotName = '...'
$snapshotinfo = Get-AzSnapshot -ResourceGroupName $resourceGroupName -SnapshotName $snapshotName
$vm = Get-AzVM `
-ResourceGroupName $resourceGroupName `
-Name $vmName
Stop-AzVM -ResourceGroupName $resourceGroupName -Name $vm.Name -Force
# Create the new disk that you want to swap in
$newDiskName = $($vmName + "_disk_" + (Get-Date).ToString("yyyyMMddhhmm"))
$newDisk = New-AzDisk -DiskName $newDiskName (New-AzDiskConfig -zone 1 -Location $location -CreateOption Copy -SourceResourceId $snapshotinfo.Id) -ResourceGroupName $resourceGroupName
Set-AzVMOSDisk -VM $vm -ManagedDiskId $newDisk.Id -Name $newDisk.Name
Update-AzVM -ResourceGroupName $resourceGroupName -VM $vm
Start-AzVM -Name $vm.Name -ResourceGroupName $resourceGroupName
【讨论】: