在使用Windows Azure的过程中,由于上海世纪互联机房UPS火灾,导致部分虚拟机运行故障,由于Azure无法确定故障的修复时间,因此在故障发生后决定紧急将虚拟机和磁盘进行迁移。
本案例中具体涉及了跨存储账户、跨区域复制磁盘镜像VHD文件,并进行重新部署。所有操作需要在Azure Powershell中完成,将磁盘镜像从“东部(上海)”迁移到“北部(北京)”。
获取用于 Windows 和 Linux 的 Windows PowerShell cmdlet 和命令行工具,请前往这里下载
1.获取Azure订阅文件publishsettings
在Powershell中运行如下命令,在打开的网页中登录并下载订阅文件,重命名为:Azure-credentials.publishsettings
Get-AzurePublishSettingsFile –Environment AzureChinaCloud
2.将订阅导入Powershell
Import-AzurePublishSettingsFile D:\Azure-credentials.publishsettings
3.如果您管理多个订阅,确认当前默认选择的订阅号
Get-AzureSubscription -Default
注意:我这里有个问题是我下载的订阅文件是拥有权限的子账号,但导入Powershell中显示的订阅名称是父账号。
如果需要切换当前订阅号,请使用如下命令:
Select-AzureSubscription -SubscriptionName "订阅名称"
4.在Web控制台创建目标区域的存储账户
依次打开:控制台->存储空间->新建
5.将订阅号与目标存储账户进行绑定
Set-AzureSubscription -SubscriptionName "目标订阅号" -CurrentStorageAccountName "pdsnorth1"
6.创建目标区域存储账户管理访问密钥
依次打开:控制台->存储空间->存储账户名称(pdsnorth2)->管理访问密钥
记录当前页面中的存储账户名、主访问密钥
Get-AzureStoragekey -StorageAccountName pdsnorth2 注意:Powershell获取存储账户管理访问密钥,需要先将该存储帐户与当前默认订阅号中的“CurrentStorageAccountName”进行绑定。
在Web管理界面中,获取Access Key:
7.获取默认订阅号管理的VM,并获取VM系统磁盘URL
查看所有可管理的虚拟机
Get-azureVM
#获取VM系统盘URL Get-AzureVM -Servicename 云服务名称 -Name 虚拟机名称 |Get-AzureOSDisk
8.开放源区域存储账户公开访问权限
为了在Powershell中从源存储账户负载磁盘VHD文件不用输入访问密钥,需要编辑存储账户中的容器元数据,使其成为公共容器。
依次打开:控制台->存储空间->存储账户账户名称->容器->编辑,在“容器元数据”->“访问”数据元修改成“公共容器”
注意:使用前需现将存储账户与当前默认订阅号进行绑定,否则无法获取信息。
获取存储账户下的所有容器:
Get-AzureStorageContainer
修改容器属性:(如果对应容器的PublicAccess = Off才需要修改为Container)
Set-AzureStorageContainerAcl -Permission Container -Name vhds
9.配置目标存储账户访问凭证
为了能够通过Powershell访问Azure存储帐号,需要将上文获取的存储帐号的KEY在下面的命令中进行替换
$ObjectContext = New-AzureStorageContext -StorageAccountName <存储账号B的名称> -StorageAccountKey <存储账号B的管理访问密钥> -Environment AzureChinaCloud
10.复制磁盘到目标存储账户
#开始复制磁盘 Start-AzureStorageBlobCopy –SrcUri <需要复制VM系统盘URL> -DestContainer <目标存储账户名称> -DestBlob 复制后的磁盘名称.vhd -DestContext $ObjectContext #例如: Start-AzureStorageBlobCopy –SrcUri https://xxxxxx.blob.core.chinacloudapi.cn/vhds/monitor-2015-04-16.vhd -DestContainer pdsnorth2 -DestBlob edsmonitor-disk1-2015-04-16.vhd -DestContext $ObjectContext #获取复制进度 Get-AzureStorageBlobCopyState -Blob 复制后的磁盘名称.vhd -Container pdsn1 -Context $ObjectContext #例如: Get-AzureStorageBlobCopyState -Blob edsmonitor-disk1-2015-04-16.vhd -Container pdsnorth2 -Context $ObjectContext
11.从VHD文件创建磁盘
在创建虚拟机时,需要从复制后的vhd文件创建磁盘,才可以在创建虚拟机的时候选择该磁盘创建虚拟机。
依次打开:虚拟机->磁盘->创建,通过文件URL创建磁盘
12.创建虚拟机
从创建的磁盘,新建虚拟机即可正常启动系统。
转载请注明:自动化运维 » 跨存储账户、跨区域(东部/北部)迁移磁盘和虚拟机