不使用 ASR 将虚机还原到另一个数据中心
背景
在 Azure 上可能会遇到一个场景是将一台虚机搬到另一台数据中心,在不借助 ASR 的情况下我们该如何做? 因为 ASR 在云上更多的场景是用于灾备到异地。对于虚机的相关信息主要的是磁盘和网络信息,所以我们可以通过 Powershell 对虚机的磁盘打 snapshot, 然后 copy 至 新的数据中心还原出来。
前提
- 安装 Azure 相关的 Module
Import-Module AzureRM
- Azure 账号及 Powershell 登录
Login-AzureRmAccount -EnvironmentName AzureChinaCloud
- 准备一套备迁移的虚机环境
步骤
- 先对源机器停机
$rgName = "XXX"
$newRgName = "XXX"
$vmName = "XXX"
$location = "XXX"
$newLocation = "XXX"
$storageaccount = "XXX"
$storageaccountName = "XXX"
$storageType = 'Premium_LRS'
$virtualNetworkName = 'XXX'
$virtualMachineName = 'XXX'
$virtualMachineSize = 'Standard_DS2_v2'
Stop-AzureRmVM -ResourceGroupName $rgName -Name $vmName
- 对源虚机的磁盘打 Snapshoot
$vm = get-azureRmVm -ResourceGroupName $rgName -Name $vmName
$OSDiskName=(Get-AzureRmVM -ResourceGroupName $rgName -Name $vmName).StorageProfile.OsDisk.Name
$dataDiskNames = (Get-AzureRmVM -ResourceGroupName $rgName -Name $vmName).StorageProfile.DataDisks.Name
$DiskNameArray = New-Object System.Collections.ArrayList
$DiskNameArray.add($OSDiskName)
$DiskNameArray.add($dataDiskNames)
$snapshotArray = New-Object System.Collections.ArrayList
foreach ($diskName in $DiskNameArray) {
$Disk = Get-AzureRmDisk -ResourceGroupName $rgName -DiskName $diskName
$SnapshotConfig = New-AzureRmSnapshotConfig -SourceUri $Disk.Id -CreateOption Copy -Location $Location
$snapshotName = $diskName + "_SnapShot"
$Snapshot=New-AzureRmSnapshot -Snapshot $snapshotConfig -SnapshotName $snapshotName -ResourceGroupName $rgName
$snapshotArray.add($Snapshot)
}
- 对源虚机开机
Start-AzureRmVM -ResourceGroupName $rgName -Name $vmName
- 将 Snapshots 拷贝至另一数据中心
$destContext = New-AzureStorageContext -StorageAccountName $storageaccount -StorageAccountKey $storageaccountkey
$blobsArray = New-Object System.Collections.ArrayList
foreach($snapshot in $snapshotArray){
$snapshotName = $snapshot.Name
$sas = Grant-AzureRmSnapshotAccess -ResourceGroupName $rgName -SnapshotName $snapshotName -DurationInSecond 3600 -Access Read
$destBlob = $snapshotName + ".vhd"
$blob = Start-AzureStorageBlobCopy -AbsoluteUri $sas.AccessSAS -DestContainer $storageContainer -DestContext $destContext -DestBlob $destBlob
$blobsArray.add($blob)
}
- 对这些拷贝过来的 PageBlob 还原成新数据中心的管理磁盘
$newDisks = New-Object System.Collections.ArrayList
foreach($blob in $blobsArray){
$blobUri = "https://" + $storageaccount + ".blob.core.chinacloudapi.cn/" + $storageContainer + "/" + $blob.Name
$length = $blob.Name.Length
$diskName = $blob.Name.substring(0, $length - 4)
$diskConfig = New-AzureRmDiskConfig -AccountType $storageType -Location $newLocation -CreateOption Import -SourceUri $blobUri
$newDisk = New-AzureRmDisk -Disk $diskConfig -ResourceGroupName $newRgName -DiskName $diskName
$newDisks.add($newDisk)
}
- 利用还原出来的管理磁盘以及新的数据中心的虚拟网络创建出虚机
$VirtualMachine = New-AzureRmVMConfig -VMName $virtualMachineName -VMSize $virtualMachineSize
$VirtualMachine = Set-AzureRmVMOSDisk -VM $VirtualMachine -ManagedDiskId $newDisks[0].Id -CreateOption Attach -Linux
$i = 0
foreach($newDisk in $newDisks){
if($i -gt 0)
{
$VirtualMachine = Add-AzureRmVMDataDisk -VM $VirtualMachine -ManagedDiskId $newDisk.Id -CreateOption Attach -Lun 0 -Caching None
}
$i = $i + 1
}
$publicIp = New-AzureRmPublicIpAddress -Name ($VirtualMachineName.ToLower()+'_ip') -ResourceGroupName $newRgName -Location $newLocation -AllocationMethod Dynamic
$vnet = Get-AzureRmVirtualNetwork -Name $virtualNetworkName -ResourceGroupName $newRgName
$nic = New-AzureRmNetworkInterface -Name ($VirtualMachineName.ToLower()+'_nic') -ResourceGroupName $newRgName -Location $newLocation -SubnetId $vnet.Subnets[0].Id -PublicIpAddressId $publicIp.Id
$VirtualMachine = Add-AzureRmVMNetworkInterface -VM $VirtualMachine -Id $nic.Id
$newVM = New-AzureRmVM -VM $VirtualMachine -ResourceGroupName $newRgName -Location $newLocation
技能小贴士
- 安装某一个特定版本的 AzureRm Module
Install-Module -Name AzureRM -RequiredVersion 6.8.1
- 查看 AzureRM 的安装版本
Find-Module AzureRM
- 查看 Powershell 中 AzureRM 模块调用出错异常堆栈
Resolve-AzureRmError -Last
提问
不使用 ASR 将虚机还原到另一个数据中心的更多相关文章
- 云与备份之(1):VMware虚机备份和恢复
本系列文章会介绍云与备份之间的关系,包括: (1)VMware 虚机备份和恢复 (2)KVM 虚机备份和恢复 (3)云与备份 (4)OpenStack 与备份 (5)公有云与备份 1. 与备份有关的V ...
- OpenStack 企业私有云的若干需求(1):Nova 虚机支持 GPU
本系列会介绍OpenStack 企业私有云的几个需求: 自动扩展(Auto-scaling)支持 多租户和租户隔离 (multi-tenancy and tenancy isolation) 混合云( ...
- Ubuntu虚机中SVN连接出错,虚机本机可正常CO,CIN,解决方法
Ubuntu虚机中SVN连接出错,虚机本机可正常CO,CIN,外面机器无法正常连接. 解决: 虚机换个IP即可正常连接,原因不明,有可能为公司网管对该IP做了某些限制. PS:VMware中只需将网络 ...
- Azure: 给 ubuntu 虚机挂载数据盘
在 azure 上创建的虚机默认会分配两个磁盘,分别是系统盘和一个临时磁盘.如果我们要在系统中安装使用 mysql 等软件,需要再创建并挂载单独的数据盘用来保存数据库文件.这是因为临时磁盘被定义为:用 ...
- OpenStack企业私有云新需求(1):Nova 虚机支持 GPU
作者:Sammy Liu 刘世民 本系列会介绍OpenStack 企业私有云的几个需求: GPU 支持 自动扩展(Auto-scaling)支持 混合云(Hybrid cloud)支持 物理机(Bar ...
- 使用powercli创建模板与克隆虚机
用powercli练练手,需从实际案例出发,本节将使用powercli写两个demo,一个是创建模板,并根据模板创建新的虚机:另一个demo是克隆虚机. [注意] 1.创建模板与克隆操作只能在vcen ...
- erlang 虚机CPU 占用高排查
-问题起因 近期线上一组服务中,个别节点服务器CPU使用率很低,只有其他1/4.排除业务不均,曾怀疑是系统top统计错误,从Erlang调度器的利用率调查 找到通过erlang:statistics( ...
- 远程管理 KVM 虚机 - 每天5分钟玩转 OpenStack(5)
上一节我们通过 virt-manager 在本地主机上创建并管理 KVM 虚机.其实 virt-manager 也可以管理其他宿主机上的虚机.只需要简单的将宿主机添加进来 填入宿主机的相关信息,确定即 ...
- 启动第一个 KVM 虚机 - 每天5分钟玩转 OpenStack(4)
本节演示如何使用 virt-manager 启动 KVM 虚机. 首先通过命令 virt-manager 启动图形界面 # virt-manager 点上面的图标创建虚机 给虚机命名为 kvm1,这里 ...
随机推荐
- [自带避雷针]DropShadowEffect导致内存暴涨
原文:[自带避雷针]DropShadowEffect导致内存暴涨 [自带避雷针]DropShadowEffect导致内存暴涨 周银辉 从学习WPF开始, 就知道"位图效果"不是什 ...
- Binding控件某个属性
<Grid Margin="60"> <Grid.RowDefinitions> <RowDefinition Height="*" ...
- Expander
实现折叠列表的效果 <Expander Header="水果列表"> <StackPanel> <RadioButton Content=" ...
- 【Unity】贝塞尔曲线关于点、长度、切线计算在 Unity中的C#实现
原文:[Unity]贝塞尔曲线关于点.长度.切线计算在 Unity中的C#实现 写在前面 最近给项目做了个路径编辑,基本思路是满足几个基本需求: [额外说明]其实本篇和这个没关系,可以跳过" ...
- Windows 10开发基础——启动默认应用的URI
主要内容:通过指定的URI来启动默认的应用(设置,应用商店,地图,人脉) 方法一:直接在XAML中添加如下代码 <TextBlock x:Name="LocationDisabledM ...
- 项目中NHibernate问题及解决方法
1.用户代码未处理 NHibernate.QueryException Message=Type mismatch in NHibernate.Criterion.SimpleExpressio ...
- 企业级架构 MVVM 模式指南 (WPF 和 Silverlight 实现) 译(2)
本书包含的章节内容 第一章:表现模式,以一个例子呈献给读者表现模式的发展历程,我们会用包括MVC和MVP在内的各种方式实现一个收费项目的例子.沿此方向,我们会发现每一种模式的问题所在,这也是触发设计模 ...
- hMailServer搭建简单邮件系统
本文介绍的是搭建本地的邮件系统,至于互联网的还在研究之中. 1.需要一个邮件服务器软件,这里用的是hMailServer,其中会让你设置一个密码,记住这个密码,后面连接的时候回用到. 2.添加域名 因 ...
- .NET重思(三)-数组列表与数组的区别,栈集合和队列结合的区别
数组列表和数组十分相似,区别在于数组列表的容量是可以动态变化的,而数组的容量是固定的.数组即Array类,数组列表即ArrayList类,两者十分相似.不过,Array类在System命名空间下,Ar ...
- JAVA SHA1加密
public static String getSha1(String str){ if(str==null||str.length()==0){ return null; } char hexDig ...
本系列文章会介绍云与备份之间的关系,包括: (1)VMware 虚机备份和恢复 (2)KVM 虚机备份和恢复 (3)云与备份 (4)OpenStack 与备份 (5)公有云与备份 1. 与备份有关的V ...
本系列会介绍OpenStack 企业私有云的几个需求: 自动扩展(Auto-scaling)支持 多租户和租户隔离 (multi-tenancy and tenancy isolation) 混合云( ...
Ubuntu虚机中SVN连接出错,虚机本机可正常CO,CIN,外面机器无法正常连接. 解决: 虚机换个IP即可正常连接,原因不明,有可能为公司网管对该IP做了某些限制. PS:VMware中只需将网络 ...
在 azure 上创建的虚机默认会分配两个磁盘,分别是系统盘和一个临时磁盘.如果我们要在系统中安装使用 mysql 等软件,需要再创建并挂载单独的数据盘用来保存数据库文件.这是因为临时磁盘被定义为:用 ...
作者:Sammy Liu 刘世民 本系列会介绍OpenStack 企业私有云的几个需求: GPU 支持 自动扩展(Auto-scaling)支持 混合云(Hybrid cloud)支持 物理机(Bar ...
用powercli练练手,需从实际案例出发,本节将使用powercli写两个demo,一个是创建模板,并根据模板创建新的虚机:另一个demo是克隆虚机. [注意] 1.创建模板与克隆操作只能在vcen ...
-问题起因 近期线上一组服务中,个别节点服务器CPU使用率很低,只有其他1/4.排除业务不均,曾怀疑是系统top统计错误,从Erlang调度器的利用率调查 找到通过erlang:statistics( ...
上一节我们通过 virt-manager 在本地主机上创建并管理 KVM 虚机.其实 virt-manager 也可以管理其他宿主机上的虚机.只需要简单的将宿主机添加进来 填入宿主机的相关信息,确定即 ...
本节演示如何使用 virt-manager 启动 KVM 虚机. 首先通过命令 virt-manager 启动图形界面 # virt-manager 点上面的图标创建虚机 给虚机命名为 kvm1,这里 ...
原文:[自带避雷针]DropShadowEffect导致内存暴涨 [自带避雷针]DropShadowEffect导致内存暴涨 周银辉 从学习WPF开始, 就知道"位图效果"不是什 ...
<Grid Margin="60"> <Grid.RowDefinitions> <RowDefinition Height="*" ...
实现折叠列表的效果 <Expander Header="水果列表"> <StackPanel> <RadioButton Content=" ...
原文:[Unity]贝塞尔曲线关于点.长度.切线计算在 Unity中的C#实现 写在前面 最近给项目做了个路径编辑,基本思路是满足几个基本需求: [额外说明]其实本篇和这个没关系,可以跳过" ...
主要内容:通过指定的URI来启动默认的应用(设置,应用商店,地图,人脉) 方法一:直接在XAML中添加如下代码 <TextBlock x:Name="LocationDisabledM ...
1.用户代码未处理 NHibernate.QueryException Message=Type mismatch in NHibernate.Criterion.SimpleExpressio ...
本书包含的章节内容 第一章:表现模式,以一个例子呈献给读者表现模式的发展历程,我们会用包括MVC和MVP在内的各种方式实现一个收费项目的例子.沿此方向,我们会发现每一种模式的问题所在,这也是触发设计模 ...
本文介绍的是搭建本地的邮件系统,至于互联网的还在研究之中. 1.需要一个邮件服务器软件,这里用的是hMailServer,其中会让你设置一个密码,记住这个密码,后面连接的时候回用到. 2.添加域名 因 ...
数组列表和数组十分相似,区别在于数组列表的容量是可以动态变化的,而数组的容量是固定的.数组即Array类,数组列表即ArrayList类,两者十分相似.不过,Array类在System命名空间下,Ar ...
public static String getSha1(String str){ if(str==null||str.length()==0){ return null; } char hexDig ...