在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. http中的KeepAlive

    为什么要使用KeepAlive? 终极的原因就是需要加快客户端和服务端的访问请求速度.KeepAlive就是浏览器和服务端之间保持长连接,这个连接是可以复用的.当客户端发送一次请求,收到相应以后,第二 ...

  2. Ubuntu上部署C# 网站 步骤简单记录

    对于刚接触linux的同学,由于命令不熟悉,所以要想在上面部署C#网站,容易迷茫,可以参考此简易步骤: 安装 mono: apt-get install mono  按tab搜索 找到mono相关的组 ...

  3. c#教程之事件处理函数的参数

    事件处理函数一般有两个参数,第一个参数(object sender)为产生该事件的对象的属性Name的值,例如上例单击标题为红色的按钮,第一个参数sender的值为button1.如上例标题为红色的按 ...

  4. cocos2dx游戏资源加密之XXTEA

    在手机游戏当中,游戏的资源加密保护是一件很重要的事情. 我花了两天的时间整理了自己在游戏当中的资源加密问题,实现了跨平台的资源流加密,这个都是巨人的肩膀之上的. 大概的思路是这样的,游戏资源通过XXT ...

  5. csharp excel interop programming

    string fileName = "c:\\a.xlsx"; var application = new Application(); application.Visible = ...

  6. bnuoj 27987 Record of the Attack at the Orbit (模拟)

    http://www.bnuoj.com/bnuoj/problem_show.php?pid=27987 [题意]:给定坐标输出图形 [题解]:处理坐标上的小技巧 [code]: #include ...

  7. [转]深度理解依赖注入(Dependence Injection)

    http://www.cnblogs.com/xingyukun/archive/2007/10/20/931331.html 前面的话:提到依赖注入,大家都会想到老马那篇经典的文章.其实,本文就是相 ...

  8. eclipse中切换jre后报错:Java compiler level does not match the version of the installed Java project facet.

    项目移除原来的jre环境lib后,添加本地的jre,报错如下: Java compiler level does not match the version of the installed Java ...

  9. AndroidManifest.xml文件综合详解(转)

    一,重要性AndroidManifest.xml是Android应用程序中最重要的文件之一.它是Android程序的全局配置文件,是每个 android程序中必须的文件.它位于我们开发的应用程序的根目 ...

  10. CloudTest 事务监控:千呼万唤始出来

    SmartBear 数据表明,如果 Amazon 的加载时间延长 1 秒,那么一年就会减少 16 亿美元的营收.用户与网站互动的过程中,如果加载时间超过3秒,57% 的用户会流失.可见,网站的加载时间 ...