[Azure]ARM虚拟机整机磁盘快照[1]——创建快照

xiaoxiao2021-02-28  107

这一篇分为三个部分,创建整机快照,删除虚拟机快照,从快照还原虚拟机。

第一部分先介绍快照功能,创建快照的思路比较简单,利用 Microsoft.WindowsAzure.Storage 库中的方法来获取 Blob 并为其创建快照。由于是对虚拟机进行整机磁盘快照,所以做的时候先要获取虚拟机的 OS Disk 和 Data Disk 的信息,获取出来后,再针对这些磁盘全部做一遍快照就好了。需要注意的一点是,这种做法,每块磁盘的快照时间会有差异,也就是说并不是同时完成的快照,因此,这一点在我们进行删除快照以及还原快照的时候会稍有影响(后面会说到)。思路上我们先做 OS Disk 的快照,再做 Data Disk 的快照,这样我们后续就可以根据 OS Disk 的快照时间来做参照点了。

不多说,直接看下 Azure Powershell 的脚本代码,代码中做了一些封装,方便使用其他脚本调用:

param( [Parameter(Mandatory = $true)] [string]$SubscriptionName, [Parameter(Mandatory = $true)] [string]$ResourceGroupName, [Parameter(Mandatory = $true)] [string]$VMName ) Function CreateSnapshotForDisk($vhdAbsoluteUri) { $StorageAccountName = $vhdAbsoluteUri.Substring(8, $vhdAbsoluteUri.IndexOf(".blob.core.chinacloudapi.cn") - 8); #length of "https://" is 8 $ContainerPathIndex = $vhdAbsoluteUri.IndexOf("blob.core.chinacloudapi.cn/") + 27; $ContainerName = $vhdAbsoluteUri.SubString($ContainerPathIndex, $vhdAbsoluteUri.IndexOf('/', $ContainerPathIndex) - $ContainerPathIndex); $BlobName = $vhdAbsoluteUri.SubString($vhdAbsoluteUri.LastIndexOf('/') + 1); $storageAccount = Get-AzureRmStorageAccount -ResourceGroupName $ResourceGroupName -Name $StorageAccountName; $storageContext = $storageAccount.Context; $blobClient = $storageContext.Context.StorageAccount.CreateCloudBlobClient(); $blobContainer = $blobClient.GetContainerReference($ContainerName); $blob = $blobContainer.GetBlockBlobReference($blobName); $Blob.CreateSnapshot() | Out-Null; } Function CreateSnapshotForVM($rgName, $vmName) { $vm = Get-AzureRmVM -ResourceGroupName $rgName -Name $vmName -WarningAction Ignore; $osDiskUri = $vm.StorageProfile.OsDisk.Vhd.Uri; CreateSnapshotForDisk $osDiskUri; foreach($dataDiskUri in $vm.StorageProfile.DataDisks.Vhd.Uri) { CreateSnapshotForDisk $dataDiskUri; } } #$Cred = New-Object System.Management.Automation.PSCredential("XXXXXXXX@XXXXXXXX.parter.onmschina.cn", (ConvertTo-SecureString "XXXXXXXX" -AsPlainText -Force)); #[void](Login-AzureRmAccount -EnvironmentName AzureChinaCloud -Credential $AzureRMCred); [void](Select-AzureRmSubscription -SubscriptionName $SubscriptionName); Write-Host ("Start creating snapshot for VM {0} at {1}" -f $VMName,(Get-Date)) -ForegroundColor Yellow; CreateSnapshotForVM $ResourceGroupName $VMName; Write-Host ("Finished creating snapshot for VM {0} at {1}" -f $VMName,(Get-Date)) -ForegroundColor Green;

脚本中的认证部分可以加也可以不加,具体看用处了。

调用方法就按照参数指定的内容就可以了:

PS> &.\[ARM]create_snapshot_for_VM.ps1 -SubscriptionName <Subscription Name> -ResourceGroupName <Resource Group Name> -VMName <VM Name>

脚本运行结果:


转载请注明原文地址: https://www.6miu.com/read-22560.html

最新回复(0)