不使用 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,这里 ...
随机推荐
- 微软Insider Dev Tour 活动
总述 Insider Dev Tour 将在6月全球29个城市中展开.这次活动是通过与微软全球MVPs和RD合作进行的,并涵盖了微软最新的开者方面的最新消息. 日期提示 2018年5月7日 : 暂无其 ...
- mysql 优化 读写分离 主从复制
1:mysql所在服务器内核 优化 ---------此优化可由系统运维人员完成 2:mysql配置参数优化(my.cnf) -------- 此优化需进行压力测试来进行参数调整 3:sql语句及表 ...
- comtextMenu 如何正确的响应MouseLeave事件
今天给菜单加上这个事件,发现弹出菜单后 鼠标怎么动都不会触发 mouseLeave事件 解决方法是 在菜单loaded事件中,利用visualTreeHelper 访问他内部的border控件,把这个 ...
- delphi 操作xml示例(DelphiBBS)
自:http://www.delphibbs.com/keylife/iblog_show.asp?xid=20713 ======================================== ...
- API HOOK介绍 【转】
什么是“跨进程 API Hook”? 众所周知Windows应用程序的各种系统功能是通过调用API函数来实现.API Hook就是给系统的API附加上一段小程序,它能监视甚至控制应用程序对API函数的 ...
- 动态加载XAML
string FadeInStoryBoard = "<StoryBoard ... />"; StoryBoard storyBoard = XamlReader.L ...
- oracle利用透明网关访问mssql
遇到一个客户,有个需求,想将mssql中的数据抽取到oracle中.经过上网查找,感觉gateway这个工具可以实现,因此就搭建实验环境进行测试.首先在oracle delivery上面下载对应的安装 ...
- mysql练习(一)
练习一 创建表,并插入相关数据 CREATE TABLE email ( ID INT NOT NULL PRIMARY KEY, Email VARCHAR() ) INSERT INTO emai ...
- SQL Server中 SET 和 SELECT 赋值有什么区别?
SQL Server 中对已经定义的变量赋值的方式用两种,分别是 SET 和 SELECT.对于这两种方式的区别,SQL Server 联机丛书中已经有详细的说明,但很多时候我们并没有注意,其实这两种 ...
- Qt云服务/云计算平台QTC(Qt Cloud Services)入门(0)
在这个“大数据”的时代,传统的跨平台C++库Qt已经将魔爪丧心病狂的伸向了“云计算”.在2012年的Qt开发者大会上,Qt发布了BaaS(Backend as a Service)服务——Engini ...
本系列文章会介绍云与备份之间的关系,包括: (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,这里 ...
总述 Insider Dev Tour 将在6月全球29个城市中展开.这次活动是通过与微软全球MVPs和RD合作进行的,并涵盖了微软最新的开者方面的最新消息. 日期提示 2018年5月7日 : 暂无其 ...
1:mysql所在服务器内核 优化 ---------此优化可由系统运维人员完成 2:mysql配置参数优化(my.cnf) -------- 此优化需进行压力测试来进行参数调整 3:sql语句及表 ...
今天给菜单加上这个事件,发现弹出菜单后 鼠标怎么动都不会触发 mouseLeave事件 解决方法是 在菜单loaded事件中,利用visualTreeHelper 访问他内部的border控件,把这个 ...
自:http://www.delphibbs.com/keylife/iblog_show.asp?xid=20713 ======================================== ...
什么是“跨进程 API Hook”? 众所周知Windows应用程序的各种系统功能是通过调用API函数来实现.API Hook就是给系统的API附加上一段小程序,它能监视甚至控制应用程序对API函数的 ...
string FadeInStoryBoard = "<StoryBoard ... />"; StoryBoard storyBoard = XamlReader.L ...
遇到一个客户,有个需求,想将mssql中的数据抽取到oracle中.经过上网查找,感觉gateway这个工具可以实现,因此就搭建实验环境进行测试.首先在oracle delivery上面下载对应的安装 ...
练习一 创建表,并插入相关数据 CREATE TABLE email ( ID INT NOT NULL PRIMARY KEY, Email VARCHAR() ) INSERT INTO emai ...
SQL Server 中对已经定义的变量赋值的方式用两种,分别是 SET 和 SELECT.对于这两种方式的区别,SQL Server 联机丛书中已经有详细的说明,但很多时候我们并没有注意,其实这两种 ...
在这个“大数据”的时代,传统的跨平台C++库Qt已经将魔爪丧心病狂的伸向了“云计算”.在2012年的Qt开发者大会上,Qt发布了BaaS(Backend as a Service)服务——Engini ...