众所周知如果是在Linux上使用虚拟化技术的话,就会有基于Xen Hypervisor部署一个系统的机会。因为基于内核的虚拟机(KVM:Kernel-Based Virtual Machine)已经逐渐成为Linux上面虚拟化的主流,用户也有可能会希望把基于Linux的虚拟化工作环境从Xen转换到KVM。下面的文章给出了把基于Xen的虚拟机迁移到KVM上的六步方针。

  到目前为止,还没有成熟的管理产品可以自动地把Xen虚拟机转换为KVM。但是现在却有一项技术解决方案可以辅助把Xen上面安装的虚拟机转换到KVM上。下面的几个步骤将会介绍针对Linux虚拟机需要如何实施。我尽可能从不基于任何发行版的高度来描述这个流程,但是需要注意的是对于特定步骤,所有的工具是和Linux发行版相关的。

  1. 确保在宿主工作环境(即可以看做是Dom0工作环境)中安装了parted和kpartx实用程序。Parted可以辅助分区;kpartx完成挂载分区,这个分区在虚拟机内定义。

  2. 启动要迁移的虚拟机,安装GRUB引导装载程序。默认情况下,Xen虚拟机内没有安装引导装载程序,因为该程序由Xen虚拟工作环境自身提供。因此需要在迁移之前确保该程序已经安装。

  3. 关闭Xen虚拟机,把整个虚拟机复制到一个镜像文件。开始之前需要确保系统有足够的磁盘空间,这里需要很多GB的空间;同时确保使用的是正确的流程。例如,Xen后端虚拟存储可以已经是一个镜像文件,但是也可以是使用设备安装的,如一个分区或者一个逻辑卷管理器(LVM:Logic Volume Manager)卷作为一个后端存储设备。例如,如果使用“/dev/images/xenvm1” LVM逻辑卷作为Xen后端存储设备的话,可以使用下面的这个命令写入镜像文件:

  dd if=/dev/images/xevvm1 f=xen.img bs=1M

  注意:如果在虚拟机内有复杂的分区,就需要为每一个分区创建一个镜像文件。该流程假定虚拟机内的一切信息都位于一个大根分区中。

  4. 为KVM虚拟机创建一个新镜像文件。该镜像文件应该和为要迁移的虚拟机所创建的镜像文件一样大小。在下面的例子中,我将会假定使用的是一个10GB的Xen镜像;在实际部署中注意把这个值调整为虚拟机实际占用的空间大小:

  dd if=/dev/zero f=kvm.img bs=1M count=10240

  5. 在上述步骤所创建的KVM镜像文件中创建分区。创建分区的唯一方法就是使用parted命令行实用程序。下面这几个步骤将会创建一个9GB的根分区和一个1GB的交换分区。需要在根特权下才可以执行这几个命令:

  parted kvm.img mklabel msdos

  parted kvm.img mkpart primary ext2 0 9000

  parted kvm.img mkpart primary linux-swap 9000 10000

  parted kvm.img set 1 boot on

  6. 把Xen镜像文件拷贝到KVM镜像文件中。以根权限执行下述命令:

  following commands:

  modprobe dm-mod

  losetup /dev/loop kvm.img

  kpartx -a /dev/loop0

  dd if=xen.img f=/dev/mapper/loop0p1 bs=1M

  fsck.ext3 -f /dev/mapper/loop0p1

  到此为止,就已经把原来镜像中的所有文件拷贝到了新镜像中。接下来需要进行测试,使用下面的这个命令:

  qemu kvm.img

  小结:

  目前,还没有工具可以很好地完成从Xen虚拟机到KVM虚拟机的转换。但是如果虚拟机使用Linux的话,可以使用命令行实用程序完成该转换。本文虽然介绍了如何实施,但是也存在一些局限性,如主要问题是该方法仅仅适用于Linux虚拟机。鉴于当前Linux工作环境中到KVM虚拟化的转换,更多适用工具的问世只是一个时间上的问题了。交流Q2881064156

笔记:Xen虚拟机如何迁移到KVM上?的更多相关文章

  1. 华为云计算IE面试笔记-FusionCompute虚拟机热迁移定义,应用场景,迁移要求,迁移过程

    *热迁移传送了什么数据?保存在哪? 虚拟机的内存.虚拟机描述信息(配置和设备信息).虚拟机的状态 虚拟机的配置和设备信息:操作系统(类别.版本号).引导方式(VM通过硬盘.光盘.U盘.网络启动)和引导 ...

  2. Linux 桌面玩家指南:07. Linux 中的 Qemu、KVM、VirtualBox、Xen 虚拟机体验

    特别说明:要在我的随笔后写评论的小伙伴们请注意了,我的博客开启了 MathJax 数学公式支持,MathJax 使用$标记数学公式的开始和结束.如果某条评论中出现了两个$,MathJax 会将两个$之 ...

  3. 基于本地存储的kvm虚拟机在线迁移

    基于本地存储的kvm虚拟机在线迁移 kvm虚拟机迁移分为4种(1)热迁移基于共享存储(2)热迁移基于本地存储(3)冷迁移基于共享存储(4)冷迁移基于本地存储 这里介绍的是基于本地存储的热迁移 动态块迁 ...

  4. kvm虚拟机动态迁移

    相比KVM虚拟机静态迁移中需要拷贝虚拟机虚拟磁盘文件,kvm虚拟机动态迁移无需拷贝虚拟磁盘文件,但是需要迁移到的虚拟主机之间需要有相同的目录结构虚拟机磁盘文件,本文这部分内容通过nfs来实现,当然也可 ...

  5. kvm虚拟机热迁移

    一.热迁移描述: 相比KVM虚拟机冷迁移中需要拷贝虚拟机虚拟磁盘文件,kvm虚拟机热迁移无需拷贝虚拟磁盘文件,但是需要迁移到的宿主机之间需要有相同的目录结构虚拟机磁盘文件,也就是共享存储,本文这部分内 ...

  6. Kvm04 kvm虚拟机热迁移,可视化管理

    目录 1.kvm虚拟机热迁移 1). 冷迁移 修改配置文件,将定义的格式raw,改成qcow2格式! 修改完成,重启服务 2).热迁移 2.Virt-manager管理Kvm虚拟机 1.kvm虚拟机热 ...

  7. 基于NFS共享存储实现KVM虚拟机动态迁移

    基于NFS共享存储实现KVM虚拟机动态迁移 一:配置环境 二:安装相关的依赖包 三:实现NFS共享存储 四:KVM机配置相同的步骤 五:安装KVM01安装虚拟机 六:实现迁移  实验初始配置:所有主机 ...

  8. kvm上的Linux虚拟机使用virtio磁盘

    kvm上的Linux虚拟机使用virtio磁盘 系统:centos6.6  64位 网上的文章比较少,怎麽将Linux虚拟机的磁盘改为使用virtio磁盘 因为centos6或以上系统已经包含了vir ...

  9. kvm虚拟机静态迁移

    1.静态迁移就是虚拟机在关机状态下,拷贝虚拟机虚拟磁盘文件与配置文件到目标虚拟主机中,实现的迁移. (1)虚拟主机各自使用本地存储存放虚拟机磁盘文件 本文实现基于本地磁盘存储虚拟机磁盘文件的迁移方式, ...

随机推荐

  1. 学习GO第一天,自我感觉可麻利的开干了-GO语言配置、开发、服务器部署

    学习GO第一天,自我感觉可麻利的开干了-GO语言配置.开发.服务器部署 第一步下载 go sdk https://golang.org/dl/ https://storage.googleapis.c ...

  2. Java网络编程(二)关于Socket的一些个人想法

    1.Socket之间是如何通信的? 1.1 通信是要两两之间进行的所以应该有至少一个客户端(Client)和一个服务器端(Server),一般来说都是多个c端对一个s端---c\s 1.2 在客户端: ...

  3. 看过ruby相关书籍

    <ruby编程语言> <crafting rails applications> <agile web developemnt> <build awesome ...

  4. ibatis学习笔记(完整)

    1.       Ibatis是开源软件组织Apache推出的一种轻量级的对象关系映射(ORM)框架,和Hibernate.Toplink等在java编程的对象持久化方面深受开发人员欢迎. 对象关系映 ...

  5. STIL文件(DFT/IC测试方向)

    相信很多工程师,特别是刚入行或准备入行的兄弟们或多或少听过测试相关的东西.如果你想做DFT工程师的,测试工程师的,而对于设计/验证工程师们如果能了解下STIL文件的原理,在和DFT/测试工程师聊技术聊 ...

  6. 如鹏网学习笔记(十三)EasyUI

    一.EasyUI简介 是一组基于JQuery的UI插件集合 主要作用:为JQuery对象提供新的方法,实现新的功能 可以快速创建出简洁.友好.美观的页面,非常适合做网站后台管理页面(不够漂亮,不适合做 ...

  7. JavaScript内置对象与原生对象【转】

    原文:https://segmentfault.com/a/1190000002634958 内置对象与原生对象 内置(Build-in)对象与原生(Naitve)对象的区别在于:前者总是在引擎初始化 ...

  8. shortcut icon和icon代码的区别介绍

    语句一: <link rel="shortcut icon" href="favicon.ico" /> 语句二: <link rel=&qu ...

  9. Java基础教程(8)--表达式、语句和块

    一.表达式   表达式由变量和运算符组成.下面是一个简单的赋值表达式: a = 0;   表达式都具有运算结果,因为赋值表达式的运算结果是左侧操作数的值,因此上面的表达式将会返回一个0.可以使用简单的 ...

  10. 撩课-Python-每天5道面试题-第8天

    一. 解释下什么是闭包? 有怎样的场景作用? 概念 在函数嵌套的前提下 内层函数引用了外层函数的变量(包括参数) 外层函数, 又把 内层函数 当做返回值进行返回 这个内层函数+所引用的外层变量, 称为 ...