Azure 虚拟机能很容易地导出 vhd 并迁移到各种环境中,包含本地及云端环境,或者迁移至其他区域。这为开发、测试、扩展带来了极大的便利。因此本文以阿里云为例,阐述的是如何将 CentOS 6.8 的虚拟机迁移到 Azure 环境,同时能保存虚拟机内的数据,不需重新部署应用的方法。

主要步骤

迁移的主要步骤分为:准备环境,调整服务器配置,导出磁盘,上传磁盘,建立新的虚拟机。

在这几个步骤中,调整服务器配置将对阿里云中的配置进行调整以符合 Azure 的需求,因此将会涉及一些影响在阿里云运行的调整。有几个推荐的做法:

  • 在调整前进行快照,操作错误时可进行回滚。
  • 如本地有 Hyper-V 机器,可先进行导出磁盘再进行调整服务器配置。

因此,根据你的策略,流程可分为

  1. 准备环境=>调整服务器配置=>导出磁盘=>上传磁盘=>建立新的虚拟机
  2. 准备环境=>导出磁盘=>调整服务器配置=>上传磁盘=>建立新的虚拟机

由于修改服务配置可能造成云端服务中断,而在本地则需要额外的资源及较长的操作时间,你可根据需要决定选择何种流程,以下我们将针对各步骤进行详细说明。

准备环境

首先,推荐先对现有磁盘进行快照。

接着,为了导出虚拟机的磁盘,我们需要挂载数据盘以存放导出的虚拟磁盘文件(.vhd),大小建议为需要备份的磁盘大小的两倍,详细方法请参考挂载数据盘,值得提醒的是,除了在阿里云控制台进行挂载,也需要在操作系统内进行配置。

最后,为了准备上传磁盘的空间,需要在 Azure 上创建一个存储账户,值得注意的是这个存储账户必须与虚拟机是同一种类型,这边采用的是资源管理模式(Azure Resource Manager),进行存储账户创建,同时请创建一个容器(container),名为vhds。

调整服务器配置

在此步骤中,我们将进行服务器的调整以兼容于 Azure 的环境。

  1. 用具有管理员权限的账户登入阿里云的 Linux 虚拟机。
  2. 修改 /etc/sysconfig/network

    复制
    vi /etc/sysconfig/network
    

    修改为

    复制
    NETWORKING=yes
    HOSTNAME=localhost.localdomain
    
  3. 修改 /etc/sysconfig/network-scripts/ifcfg-eth0

    复制
    vi /etc/sysconfig/network-scripts/ifcfg-eth0
    

    修改为

    复制
    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=dhcp
    TYPE=Ethernet
    USERCTL=no
    PEERDNS=yes
    IPV6INIT=no
    
  4. 修改 /etc/sysconfig/network-scripts/ifcfg-eth1,将其禁用:

    复制
    vi /etc/sysconfig/network-scripts/ifcfg-eth0
    

    修改为

    复制
    DEVICE=eth1
    #ONBOOT=yes
    #BOOTPROTO=static
    #IPADDR=1.1.1.1
    #NETMASK=255.255.255.0
    
  5. 修改 udev 规则,以避免产生以太网接口的静态规则。在 Azure 或 Hyper-V 中克隆虚拟机时,这些规则会引发问题。

    复制
    sudo ln -s /dev/null /etc/udev/rules.d/75-persistent-net-generator.rules
    sudo rm -f /etc/udev/rules.d/70-persistent-net.rules
    
  6. 修改服务启动的配置,禁用阿里云的服务。

    复制
    sudo chkconfig network on
    sudo chkconfig aegis off
    sudo chkconfig aliyun-util off
    
  7. 更新镜像库

    复制
    wget -q https://aliyunmigration.blob.core.chinacloudapi.cn/packages/CentOS-Base.repo -O /etc/yum.repos.d/CentOS-Base.repo
    
  8. 修改 /etc/yum.conf

    复制
    vi /etc/yum.conf
    

    添加一行

    复制
    http_caching=packages
    
  9. 清除 yum 元数据并进行更新:

    复制
    yum clean all
    sudo yum -y update
    
  10. 安装 Azure Linux 代理和依赖项:

    复制
    sudo yum install python-pyasn1 WALinuxAgent
    
  11. 在 grub 配置中修改内核引导行,以使其包含 Azure 的其他内核参数。 为此,请在文本编辑器 (vi) 中打开 /boot/grub/menu.lst,并确保默认内核包含以下参数。

    复制
    console=ttyS0 earlyprintk=ttyS0 rootdelay=300
    
  12. 编辑磁盘文件,将不需用到的磁盘禁用:

    复制
    vi /etc/fstab
    

    在本例中,将数据盘标注掉:

    复制
    #/dev/vdb1 /mnt ext3 defaults 0 0
    

至此,你已完成 CentOS 6.8 上传至 Azure 磁盘前的准备。

导出磁盘

在 Linux 中,我们所使用的工具是 dd,进行整个磁盘的备份,再备份完成后再用 qemu 工具,转成 vhd 的文件格式。

首先,执行 dd 指令,这里我导出的磁盘为 /dev/vda,额外挂载作为备份的磁盘为 /mnt,导出的文件为 aliyuncentos68.raw。

复制
dd if=/dev/vda of=/mnt/aliyuncentos68.raw bs=100M

等待 dd 完成后,安装 qemu 工具。

复制
sudo yum install qemu-kvm

安装完成后,进行格式转换,其中 /mnt 为刚才的备份目录,aliyuncentos68.raw 为刚才的备份文件,aliyuncentos68.vhd 则为转换后的文件。

复制
cd /mnt
qemu-img convert -f raw -o subformat=fixed -O vpc aliyuncentos68.raw aliyuncentos68.vhd

等待直至转换磁盘完成。

上传磁盘

在此我们将运用 Azure CLI 将刚才导出的磁盘上传至先前创建的存储账户中。

首先需要安装 NodeJS:

复制
curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -
sudo yum -y install nodejs

接着安装 Azure CLI:

复制
npm install -g azure-cli

然后需要刚才在 Azure 创建的存储账户信息及密钥组成连结字符串,如:

复制
DefaultEndpointsProtocol=https;BlobEndpoint=storagename.blob.core.chinacloudapi.cn;AccountName=storagename;AccountKey=storagekey

接着执行指令进行上传:

复制
cd /mnt
azure storage blob upload -c 'DefaultEndpointsProtocol=https;BlobEndpoint=storagename.blob.core.chinacloudapi.cn;AccountName=storagename;AccountKey=storagekey' -t page --container vhds -f aliyuncentos68.vhd

建立新的虚拟机

当上述步骤都已经完成,可以点选下面图标根据你上传的磁盘url创建机器。

在栏位中依序填入 VM 创建的地点,刚才上传的系统磁盘 url,OS 类型(这边应该选 Linux),VM 的大小及 VM 的名称。

接着点选创建,虚拟机将开始进行部署。过一段时间之后,便可以连结上你所迁移的机器了。

立即访问http://market.azure.cn

CentOS: 将虚拟机迁移到 Azure (以阿里云为例)相关推荐

  1. 亚马逊云(AWS)、微软云(Azure)、阿里云性能对比之哪家好?

    这三家在云计算界统称AAA,Azure就是微软云.AWS就是亚马逊云.Aliyun当然就是阿里云了,当然还有其他的云产品包括谷歌云.腾讯云.网易云.华为云.京东云等.本次咱们主要讨论的就是微软云.亚马 ...

  2. 如何统一集体的所有人的yum环境(以阿里云为例)

    如何统一一个集体的所有人的yum环境(以阿里云为例) 一.查看已有的源文件 二.查看Base.repo源文件 三.尝试打开网址 四.尝试下载tree工具发现问题 五.网页打开地址http://mirr ...

  3. 如何使用远程桌面连接云服务器 (以阿里云为例)

    如果您的远程服务器采用了·Windows服务器系统,那么使用远程桌面来管理云服务器,无论在连接速度上还是方便度上,都会好很多.下面我介绍使用远程桌面的方法. 一.工具/原料         windo ...

  4. 如何给你的网站套上Cloudflare(以阿里云为例)

    文章目录 Cloudflare 是什么 准备工作 开搞 Cloudflare 设置 阿里云域名设置 等待 设置 DNS 解析记录 其他问题 看下效果 结尾 Cloudflare 是什么 以下内容引自维 ...

  5. ​利用Azure Migrate完成华为云虚拟机迁移至Azure步骤

    项目背景 因某某企业内部需求,需将华为云上的Linux机器迁移至Azure. 架构如下: 先决条件 在进行试验之前,请确保满足这些先决条件 在其他云上所需要迁移的虚拟机和安装Azure Migrate ...

  6. 服务器迁移上云到新的服务器方法流程(以阿里云为例)

    旧的服务器迁移到阿里云新服务器可以使用服务器迁移中心SMC来实现,原服务器可以是IDC服务器.虚拟机或其他云平台的云服务器,均可以使用阿里云服务器迁移中心SMC来迁移上云到阿里云服务器上,阿里云百科来 ...

  7. Google、Azure、阿里云、RedHat…全球的 K8s 圈大佬聚在一起要聊啥?

    美国时间 2020 年 5 月 27 日,知名复杂环境应用交付与基础设施管理项目 Crossplane 将联合 Open Application Model (OAM)社区共同举办 Crossplan ...

  8. 阿里云centos服务器rdp远程桌面规则_阿里云服务器使用教程 新手用户的好帮手...

    云服务器越来越成为企业及个人用户开展网络业务的首选了,阿里云服务器ECS因其起步较早,用户数量已经是国内第一,全球五强的大云服务商了.虽然阿里云对于用户来说很熟悉了,但阿里云服务器的使用方法,相信还有 ...

  9. 【阿里云镜像】使用VM虚拟机安装OpenWRT并更换阿里云镜像源

    文章目录 一.参考链接 二.OpenWRT简介 三.使用VM虚拟机安装OpenWRT操作步骤 1.下载OpenWRT.img镜像源 2.将.img镜像文件转换成.vmdk虚拟硬盘格式文件 (1)打开S ...

最新文章

  1. python 字符串拼接
  2. 【Verilog HDL 训练】第 05 天(序列检测)
  3. asmack xmpp 获取离线消息
  4. HCIA-Datacom新版数通认证都考什么内容?
  5. lis最长上升子序列o(nlogn)优化
  6. CORS 跨域-同源策略
  7. w3c的ajax操作函数,关于ajax的使用方法_例题、ajax的数据处理
  8. clientX和clientY属性需要注意的地方
  9. 蚂蚁分类信息系统5.8 解决手机端新闻详情页面图片不自动缩放问题
  10. Spring Boot 2.3 优雅停机来了,新特性真香!!
  11. 关于《统计学习方法》中第三章构造kd树算法中的中位数问题
  12. 使用yolo v3训练自己的模型
  13. eclipse添加windowsBuilder的方法
  14. PHP细说(加强版)
  15. 基数排序组合桶式排序
  16. 4星|《经济学人》熊彼特系列2017合集:美国人逐渐按自己的职业及社会价值而聚居至不同区域...
  17. Apple Watch Ultra和Apple Watch Series 8 区别 续航 功能介绍
  18. 蚂蚁金服副总谈区块链
  19. c语言中除法除以1000与1e3,北京航空航天大学C语言b第二讲(第三、四章)数据类型、运算符与表达式和最简单的C程序设计.ppt...
  20. 7.面向对象进阶(1)

热门文章

  1. 界面交互推荐-25个闪亮创意的404错误页面设计-你从中发现了什么
  2. haskell的分数运算
  3. MATLAB【四】 ————批量适配图片信息与excel/txt等文档信息,批量移动拷贝图片,批量存图片中点和方框
  4. IANA定义的常见服务的端口号列表
  5. C#:消息队列应用程序
  6. gridview列 数字、货币和日期 显示格式
  7. .net应用程序如何批上XP的外衣?
  8. linux的根文件系统中的proc文件夹详解
  9. Memcached内存池分析
  10. C++11中Lambda表达式的使用