在Windows Azure中,用户可以对部署在Azure中的虚拟机的映像、磁盘以及快照进行生成和下载。用户可以方便地将Azure中的虚拟机实例迁移到本地、私有云甚至其他公有云平台进行测试、扩展或者再部署。但是,除Azure外,大部分公有云供应商并不提供虚拟机映像的下载服务。用户如要迁移自己的应用,必须重新配置虚拟机环境。为了解决这个问题,本文以阿里云迁移至Azure为例,提供了一种无须重新部署、利用Linux dd命令直接拷贝阿里云中的虚拟机映像、并上传至Azure的方法。

  • 本文以 Ubuntu 14.04 为例,其他Linux版本可参考以上链接。
  • 本文所有操作均在源虚拟机命令行窗口中执行,无需切换至Linux图形界面、Windows系统或依靠Hyper-V等第三方工具。

1.  Azure环境准备

1)  将阿里云映像中的现有源仓库替换为 Azure 源仓库。

# cp /etc/apt/sources.list/etc/apt/sources.list.bak

# sed -i s/mirrors.aliyun.com/azure.archive.ubuntu.com/g/etc/apt/sources.list

# sed -i /aliyuncs/d /etc/apt/sources.list

2)   将操作系统内核更新为最新版本。

# apt-get update

# apt-get install hv-kvp-daemon-init

# apt-get dist-upgrade

# reboot

3)   修改 Grub 的内核启动项,使其包含 Azure 的附加内核参数。

编辑“/etc/default/grub”,将GRUB_CMDLINE_LINUX_DEFAULT参数行替换成如下:

GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS0 earlyprintk=ttyS0 rootdelay=300"

并且运行:

# update-grub

4)   安装 Azure Linux Agent。(此操作将会移除NetworkManager和NetworkManager-gnome程序包)

# apt-get update

# apt-get install walinuxagent

5)   将网络配置从“静态”修改为“DHCP”,并将其他网络配置行注释掉(请参见以下屏幕截图)。

编辑“/etc/network/interfaces”:

修改前:

修改后:

6)   添加有效的 DNS 服务器。

编辑“/etc/resolv.conf”,添加如下DNS服务器:

nameserver 8.8.8.8 #Google

nameserver 223.5.5.5 #Ali

7)   将附加盘信息从文件系统表中移除。

编辑“/etc/fstab”:

修改前:

修改后:

8)   移除该 VM上的用户配置信息,并清除历史记录。

# waagent -force -deprovision

# export HISTSIZE=0

2.  生成 VM 映像

1)   添加一个独立云磁盘到阿里虚拟机上,用来存储生成的虚拟机映像文件,并且挂载该磁盘至虚拟机(参考)。(该独立云磁盘容量至少应为系统盘的两倍)

2)   利用dd命令备份系统磁盘至独立云磁盘。

# dd if=/dev/xvda of=/mnt/ImageName.raw bs=100M

3)   安装 qemu-utils 工具以转换映像文件格式。

# apt-get install qemu-utils

4)   将生成的映像文件从 *.raw 转换为 *.vhd。

# cd /mnt

# qemu-img convert -f raw -o subformat=fixed -O vpc ImageName.raw ImageName.vhd

至此,映像文件已经准备完毕。下面将在Azure上创建存储账号,用来存储准备好的映像文件。注:所有运行在Azure上的虚拟机,它们的映像、磁盘和快照都存储在Azure存储账号中,方便用户直接操作和管理。

3.  新建Azure存储账号

  • 用户可以使用Azure Powershell、调用API或者直接在管理门户网站上创建存储账号、新建虚拟机或者管理Azure其它服务(参考:Azure文档中心)。本文使用Azure
    Linux命令行工具
    ,使用户快速、方便地进行存储账号和虚拟机的创建和配置。
  • 在使用Azure服务前,请确保您拥有有效的Azure订阅。用户可以通过Azure中国官网:http://www.windowsazure.cn/ 获取Azure订阅。

1)   安装 Azure Linux命令行工具:

# apt-get update

# apt-get install nodejs

# apt-get install npm

# ln -s /usr/bin/nodejs /usr/bin/node

# npm install azure-cli -g

2)   连接到Azure订阅:

# azure login -u<azureusername> -p <auzrepassword> -e<environment>

例:# azure login -u myname@myorg.partner.onmschina.cn -p mypasswd -e AzureChinaCloud

若您使用Azure中国版服务,Azure订阅用户名<azureusername>的格式为:*@*.partner.onmschina.cn,且必须指定参数-e<environment>为‘AzureChinaCloud’;若您使用Azure国际版服务,可根据该参考创建组织账号,相应的<azureusername>的格式为:*@*.onmicrosoft.com
,参数-e可省略。

3)   新建Azure存储账号:

# azure storage account create <storageaccountname> -l
<location>

例:# azure storage account create myaccount -l "ChinaEast"

-l参数指定存储账号所在地域,用户可以使用如下命令查看可用地域:

# azure vm location list

中国至今(2015年1月)拥有两个地域: China East和China North,分别位于上海和北京。

注意:存储账号和虚拟机必须部署在同一地域,请根据业务需求选择账号所在位置。

4)   获取存储账号秘钥:

# azure storage account connectionstring show --blob-endpoint
<blobEndpoint> <storageaccountname>

例:# azure storage account connectionstring show --blob-endpoint myaccount.blob.core.chinacloudapi.cn myaccount

该命令返回如下结果,其中高亮 部分将作为下一步操作中的<connectionstring>:

5)   新建存储容器:

存储容器相当于文件系统中的文件夹,可以对在其内的blob文件进行统一权限管理。默认情况下,建立的容器为私有容器。

#azure storage container create
<containername> -c <connectionstring>

例:#azure storage container create mycontainer -c 'DefaultEndpointsProtocol=https;BlobEndpoint=teststorageaccount.blob.core.chinacloudapi.cn;AccountName=teststorageaccount;AccountKey=xMPA3UJD56VqhtmEdnWZ4vLHmJQzaQJfTGUj7R+eMwEGMkBmbEPiUF4qJIL3QqIuWy/t7qeb6RZm72NsBzKiKA=='

4.  上传映像至Azure

1)   将生成的映像文件上传到 Azure Storage。

# cd /mnt

# azure storage blob upload -c <connectionstring> -f
ImageName.vhd --container
<containername> --blob ImageName.vhd --blobtype page

5. 新建Azure虚拟机

1)   将上传的映像文件新建成虚拟机镜像:

# azure vm image create <imagename> --blob-url <url> --os linux

例:# azure vm image create myimage --blob-url https://myaccount.blob.core.chinacloudapi.cn/mycontainer/ImageName.vhd --os linux

2)   新建一个Azure虚拟机实例:

# azure vm create <dnsname> <imagename> -u
<vmusername> -p <vmpassword> -l
<location>

例:# azure vm create mylinuxvm.chinacloudapp.cn myimage -u vmuser -p mypassword  -l "China East"

至此,您已成功将阿里云上的Linux虚拟机迁移至Azure中。通过默认SSH端口:22和DNS地址:*.chinacloudapp.cn,即可远程对创建的Azure虚拟机进行管理和操作。并且,您还能利用迁移的映像文件创建多个虚拟机实例,来保证应用的可用性和可靠性。



阿里云至 Windows Azure 的 Linux 虚拟机迁移的更多相关文章

  1. 阿里云服务器Windows Server 2008/2012部署Office Web Server 2013

    以前成功将Office Web Server 2013部署在了本地服务器上,此次是将Office Web Server 2013部署在阿里云服务器Windows Server 2008和2012上,中 ...

  2. 面向阿里云专家的 Azure 云服务介绍

    本文是面向阿里云专家的 Azure 云服务介绍,参考本文可以帮助大家“按图索骥”在 Azure 的平台上找到能满足自己需求的服务. 在公有云计算蓬勃发展的同时,中国也出现了越来越多的本土公有云平台.针 ...

  3. 云平台发展前沿报告 微软云平台——Windows Azure

    微软云平台——Windows Azure Windows Azure 是微软研发的公有云计算平台.该平台可供企业在互联网上运行应用,并可进行扩展.通过Windows Azure,企业能够在多个数据中心 ...

  4. 微软云平台windows azure入门系列八课程

    微软云平台windows azure入门系列八课程: Windows Azure入门教学系列 (一): 创建第一个WebRole程序与部署 Windows Azure入门教学系列 (二): 创建第一个 ...

  5. Windows Azure 上 Linux VM 中的交换空间 – 第 2 部分

    本文章由 Azure CAT 团队的 Piyush Ranjan (MSFT) 撰写. 在前一篇文章 Windows Azure 上Linux VM 中的交换空间第 1 部分中,我介绍了在默认情况下, ...

  6. 如何在IIS上发布网站 在阿里云服务器windows server2012r iis上部署.net网站

    如何在IIS上发布网站   本片博客记录一下怎么用IIS发布一个网站,以我自己电脑上一个已经开发完成的网站为例: 1.打开项目 这是我电脑上的一个项目,现在我记录一下将这个项目发布到iis上的整个过程 ...

  7. 手把手教windows上安装linux虚拟机及环境配置

    目录 版本说明 安装虚拟机 典型方式安装(推荐小白,带有图形界面,助于学习,但占用空间大) 自定义方式安装(推荐老司机) 创建快照 克隆虚拟机 windows上安装linux虚拟机不管是对于新人还是老 ...

  8. 解决使用putty 连接Windows主机与Linux虚拟机出现提示network error:connection refused问题

    使用putty 连接Windows主机与Linux虚拟机出现提示network error:connection refused的问题 问题描述: 主机与虚拟机可以互相ping通: 防火墙已经关闭 使 ...

  9. 使用Windows Azure创建Linux系统虚拟机-上

    创建虚拟机来运行Linux 当您在Azure管理门户中使用映像图库时,创建运行Linux的虚拟机很容易.本指南告诉您如何做到这一点,假设你没有使用过Azure. 注意: 即使你不需要使用过Azure虚 ...

随机推荐

  1. 【Java】Linux下安装配置Oracle JDK 1.7版本

    1 环境 Vmware虚拟机中的Ubuntu 12.04 32位系统 2具体安装步骤 ①下载最新的jdk包 注意jdk区分32位版本和64位版本,要与Ubuntu兼容才行 下载地址 http://ww ...

  2. Linux学习系列之Linux入门(三)gcc学习

    GCC(GNU Compiler Collection,GNU编译器套装),是一套由GNU开发的编程语言编译器.它是一套以GPL及LGPL许可证所发布的自由软件,也是GNU计划的关键部分,亦是自由的类 ...

  3. Oracle分区表做跨分区查询

    问:有一张大表,其中按时间字段(TIME_ID)进行表分区(按季度分区),但是如果业务人员做跨季度的大批量数据的查询时,未能走TIME_ID分区索引,导致全表扫描.此种情况该如何处理? 示例解析: 1 ...

  4. (转载)Cocos2dx-OpenGL ES 2.0教程:你的第一个三角形(1)

    前言 在本系列教程中,我会以当下最流行的2D引擎Cocos2D-X为基础,介绍OpenGL ES 2.0的一些基本用法.本系列教程的宗旨是OpenGL扫盲,让大家在使用Cocos2D-X过程中,知其然 ...

  5. 一种高斯模糊渐变动画的实现-b

    关于高斯模糊的方式有很多种,但是如果需要模糊渐变,那么对这种高斯模糊算法的性能要求是比较高的,今天这里重点不讨论算法,只是提供一个动画实现的思路.动画效果如下: 高斯模糊渐变动画 //高斯模糊 -(U ...

  6. Mybatis的分页查询

    示例1:查询业务员的联系记录 1.控制器代码(RelationController.java) //分页列出联系记录 @RequestMapping(value="toPage/custom ...

  7. CSRF防范策略研究

    目录 0x1:检查网页的来源 0x2:检查内置的隐藏变量 0x3:用POST不用GET 检查网页的来源应该怎么做呢?首先我们应该检查$_SERVER[“HTTP_REFERER”]的值与来源网页的网址 ...

  8. smarty 时间格式化date_format

    代码如下:$smarty = new Smarty; $smarty->assign('yesterday', strtotime('-1 day')); $smarty->display ...

  9. C#一个简单下载程序实例(可用于更新)

    运行时的界面 using System; using System.Collections.Generic; using System.ComponentModel; using System.Dat ...

  10. java main()静态方法

    java main()方法是静态的.意味着不需要new(),就在内存中存在.而且是属于类的,但是对象还是可以调用的. 若干个包含这个静态属性和方法的对象引用都可以指向这个内存区域.这个内存区域发生改变 ...