设为首页 收藏本站
查看: 1646|回复: 0

[经验分享] KVM克隆及在不同物理机下的移植

[复制链接]

尚未签到

发表于 2015-10-10 11:19:17 | 显示全部楼层 |阅读模式
KVM 虚拟机的管理工具
  准确来说,KVM 仅仅是 Linux 内核的一个模块。管理和创建完整的 KVM 虚拟机,需要更多的辅助工具

  •   QEMU-KVM

    • 在 Linux 系统中,首先我们可以用 modprobe 系统工具去加载 KVM 模块,如果用 RPM 安装 KVM 软件包,系统会在启动时自动加载模块。
    • 加载了模块后,才能进一步通过其他工具创建虚拟机。但仅有 KVM 模块是远远不够的,因为用户无法直接控制内核模块去做事情,还必须有一个用户空间的工具。
    • 关于用户空间的工具,KVM 的开发者选择了已经成型的开源虚拟化软件 QEMU。QEMU 是一个强大的虚拟化软件,它可以虚拟不同的 CPU 构架。比如说在 x86 的 CPU 上虚拟一个 Power 的 CPU,并利用它编译出可运行在 Power 上的程序。
    • KVM 使用了 QEMU 的基于 x86 的部分,并稍加改造,形成可控制 KVM 内核模块的用户空间工具 QEMU-KVM。所以 Linux 发行版中分为 kernel 部分的 KVM 内核模块和 QEMU-KVM 工具。这就是 KVM 和 QEMU 的关系

  •   Libvirt、virsh、virt-manager

    • 尽管 QEMU-KVM 工具可以创建和管理 KVM 虚拟机,RedHat 为 KVM 开发了更多的辅助工具,比如 libvirt、libguestfs 等。原因是 QEMU 工具效率不高,不易于使用
    • Libvirt 是一套提供了多种语言接口的 API,为各种虚拟化工具提供一套方便、可靠的编程接口,不仅支持 KVM,而且支持 Xen 等其他虚拟机。
    • 使用 libvirt,你只需要通过 libvirt 提供的函数连接到 KVM 或 Xen 宿主机,便可以用同样的命令控制不同的虚拟机了。Libvirt 不仅提供了 API,还自带一套基于文本的管理虚拟机的命令—— virsh,可以通过使用 virsh 命令来使用 libvirt 的全部功能。但最终用户更渴望的是图形用户界面,这就是 virt-manager,它是一套用 python 编写的虚拟机管理图形界面,用户可以通过它直观地操作不同的虚拟机。Virt-manager 就是利用 libvirt 的 API 实现的

KVM 虚拟机迁移方式
  1. 基于共享存储的动态迁移,具体可参考KVM 虚拟机在物理主机之间迁移的实现这篇博文
  2. KVM 虚拟机静态迁移,静态迁移由于允许中断虚拟机的运行,所以相对简单。首先在源主机上关闭虚拟机,然后移动虚拟机的存储镜像和配置文件到目的主机,最后在目的主机上启动虚拟机,恢复服务。根据虚拟机镜像存储方式的不同,静态迁移的实现方法稍有不同

  •   虚拟机之间使用共享存储:如果源主机和目的主机都能够访问虚拟机的镜像,则只需要迁移虚拟机配置文件。virt-manager 管理的虚拟机配置文件在 /etc/libvirt/qemu/”your vm name.xml”。拷贝 XML 配置文件到目的主机的相同目录后,进行适当的修改,比如:与源主机相关的文件或路径等。无论你何时在 /etc/libvirt/qemu/ 中修改了虚拟机的 XML 文件,必须重新运行 define 命令,以激活新的虚拟机配置文件

    virsh define /etc/libvirt/qemu/"your vm name.xml"
  •   虚拟机镜像使用本地存储:本地存储是指虚拟机的文件系统建立在本地硬盘上,可以是文件或者磁盘分区

    •   本地文件存储:如果虚拟机是基于镜像文件,直接从源主机拷贝镜像文件和 XML 配置文件到目的主机中,然后对 XML 进行适当的修改并激活。

    •   本地磁盘分区:如果虚拟机使用了磁盘分区(物理分区或者逻辑分区)为存储设备,首先用 dump 工具把磁盘分区转换成镜像文件再拷贝到目的主机。在目的主机恢复虚拟机时,把镜像文件恢复到目的主机的磁盘分区中去。对于虚拟机系统使用了多个磁盘分区的,需要每个分区单独 dump 成镜像文件。例如使用“/dev/VolGroup00/lv001” LVM 逻辑卷作为存储设备,可以使用下面的命令转换逻辑卷为镜像文件,输出成镜像文件:

      dd if=/dev/VolGroup00/lv001 of=lv001.img bs=1M

KVM具体迁移步骤
  笔者在实际开发中采用的 KVM 静态迁移,且使用虚拟机镜像本地存储。因为操作简单方便。操作中,虚拟机的运行状态的变化情况?静态迁移虚拟的过程中,虚拟机系统处于关机状态,这样虚拟机关机前的运行状态不会保留。如果希望保留迁移前的系统状态,并且在迁移后能够恢复,需要对虚拟机做快照备份或者以休眠的方式关闭系统

  我们知道,vmware可以直接启动虚拟机文件,因此,拷贝虚拟机文件并用vmware打开即可实现新虚拟机的使用。然后,KVM中的情况不同,主要源于KVM不止需要虚拟机文件还需要关联的XML文件
方案一 (笔者未采用,从网上借鉴的)
  假设通过KVM已经安装虚拟机vHost_1,此机的虚拟机文件存放在/disk4/VM/ 而关关联的xml文件在/etc/libvirt/qemu/vHost_2.xml。创建虚拟机vHost_2,需要如下简单操作:

  •   拷贝vHost_1  

    cp vHost_1 /disk4/VM/vHost_3

  •   拷贝vHost_1的关联文件

    virsh dumpxml vHost_1 >/etc/libvirt/qemu/vHost_3.xml

  •   修改vHost_3.xml文件,主要修改UUID和source;

  •   激活新的虚拟机配置文件

    virsh define /etc/libvirt/qemu/vHost_3.xml
    virsh start vHost_3
      至此,虚拟机vHost_3启动!

方案二(主要利用 virt-manager 图形界面移植)

  • 配置需求分析

主机IP镜像配置文件位置镜像位置镜像名称
源主机10.6.2.163/etc/libvirt/qemu/var/lib/libvirt/images/qoe_179
目的主机10.6.2.167/etc/libvirt/qemu/var/lib/libvirt/images/qoe_192

  • 先查看当前已安装的虚拟机


virsh list --all
DSC0000.jpg

说明当前没有安装任何虚拟机

  • 将远程的的虚拟机的xml以及img文件通过scp拷贝到本机下



scp root@10.6.2.163:/opt/qoe_wzf.xml /etc/libvirt/qemu
scp root@10.6.2.163:/opt/qoe_wzf.img /var/lib/libvirt/images/

  • 然后打开 virt-manager


virt-manager

  • 在出现的画面中点击 New VM按钮
DSC0001.jpg

  • 填写虚拟机名称,然后选择导入已经存在的镜像文件
DSC0002.jpg

  • 选择复制的镜像img文件,kvm默认显示的是在 /var/lib/libvirt/images/ 下已有的img文件
DSC0003.jpg

  • 选择好虚拟内存和虚拟CPU核数
DSC0004.jpg

  • 这里的步骤2是保证新建虚拟机依旧是处在网桥br0中
DSC0005.jpg

  • 当遇到下列情况时: 新的虚拟机名为 qoe_192。且它的配置文件就是以虚拟机名为命名的xml文件,即

    qoe_192.xml。但是它的镜像文件却是其他
DSC0006.jpg

接下来就是慢慢地等待了….
DSC0007.jpg
  然后就出现如上了,就是这么简单… ^_^

  • 因为虚拟机在不同物理机上的移植,所以其 MAC地址一定会自动改变,这点无需我们操心,但是原有以 MAC

    为基础的网络配置却失效了,故需要重新配置下网络
DSC0008.jpg

  • 先进入超级用户模式下,然后查看本机的 MAC 地址


ifconfig eth0

  • eth0 是虚拟机的默认以太网卡,实际中当然是虚拟的,并不是都取名为 eth0,根据实际情况而定。这里务必记住新的 MAC 地址,即图中的   52:54:00:f6:bf:e7。补充一句,如果找不到eth0网卡,请参考这篇博文《KVM虚拟机克隆Linux系统后找不到eth0网卡》
  • 然后编辑网卡配置文件

vim /etc/sysconfig/network-scripts/ifcfg-eth0

  • 将HWADDR后面的地址改为实际的地址(52:54:00:f6:bf:e7),旧的已经被笔者我注释了,然后其余步骤就是配置IP,这里就不多解释了,因为笔者的虚拟机是   Centos7 并非 Centos6.5,所以具体的语句有一点点不同,仅此而已!
DSC0009.jpg

  • 接着就是重启虚拟里的网络


service network restart
  OK,大功告成了,配置完毕!
克隆虚拟机
  需求分析:克隆qoe_192虚拟机为新的虚拟机 qoe_193

  •   克隆已有的虚拟机,首先需要将被复制的虚拟机 power off,然后再右击,选择 clone, 在弹出的界面中

  •   首先在 Name一栏中,填入所需的新虚拟机名称,默认就是 xx-clone(暂不改,等等教后续如何修改,当然改了是最直接方便的)。
    DSC00010.jpg

  •   其次在 Storage一栏中选择 Details一项,在弹出的下面界面中,可以看到克隆的磁盘位置在 /var/lib/libvirt/images/qoe_192.img

  • 而新的虚拟机的磁盘位置为该目录下的 qoe_192-clone,这里建议直接改为需求的qoe_193.img。然而为了说明当忘记修改后续如何调整,现暂不动
  • 选择的过程也可以点击 Browse一栏(图中4),然后选择 Browse Local(图中5),最终在 (图中6)处选择你要的磁盘文件,然后点击 Choose Volume
DSC00011.jpg

可以看到已经克隆出了新的虚拟机了,现在返回修改虚拟机的名称以及镜像文件的名称。

  •   首先进入 /var/lib/libvirt/images 中,修改 镜像文件的名称

    cd /var/lib/libvirt/images
    mv qoe_192-clone.img qoe_193.img
  •   然后右击关闭着的 qoe_192-clone,选择 open,然后点击位置1 的修改虚拟机硬件位置的地方

DSC00012.jpg

  • 点击位置2 “Overview”, 在右栏中位置3 “Name” 中编辑你想修改的新名称即可
  • 点击位置4 “VirlO Disk”,就突然弹出 5的报错信息,因为先前已经将qoe_192-clone.img 重新命名为 qoe_193.img了,不报错才怪~,这时将右击位置4 ,选择 “Remove Hardware”,删除它!
  •   点击位置6 “Add Hardware”

    - DSC00013.jpg

    • 点击位置 1 “Storage”,选择 “Select managed or other existing storage”,点击 “Browse”
    • 选择之前更名后的 qoe_193.img,选择 Choose Volume
    • 将 “Device type” 更改为 “Virtio Disk” 类型

  •   接着就是将修改后的 qoe_193 启动 “Run” 就OK了,完毕!但别忘了网络配置还是要改的… -_-!

DSC00014.jpg

版权声明:本文为博主原创文章,未经博主允许不得转载,同时非常感谢提供本文中所引用资料的研究者,谢谢   ^_^

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-125032-1-1.html 上篇帖子: Openstack 部署总结之:通过qemu-kvm创建唯一SID的windows 2003 镜像 下篇帖子: KVM Porting Guide
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表