KVM克隆及在不同物理机下的移植
来源:互联网 发布:卖家开通淘宝达人 编辑:程序博客网 时间:2024/06/06 05:22
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.xmlvirsh start vHost_3
至此,虚拟机vHost_3启动!
方案二(主要利用 virt-manager 图形界面移植)
- 配置需求分析
- 先查看当前已安装的虚拟机
virsh list --all
说明当前没有安装任何虚拟机
- 将远程的的虚拟机的xml以及img文件通过scp拷贝到本机下
scp root@10.6.2.163:/opt/qoe_wzf.xml /etc/libvirt/qemuscp root@10.6.2.163:/opt/qoe_wzf.img /var/lib/libvirt/images/
- 然后打开 virt-manager
virt-manager
- 在出现的画面中点击 New VM按钮
- 填写虚拟机名称,然后选择导入已经存在的镜像文件
- 选择复制的镜像img文件,kvm默认显示的是在 /var/lib/libvirt/images/ 下已有的img文件
- 选择好虚拟内存和虚拟CPU核数
- 这里的步骤2是保证新建虚拟机依旧是处在网桥br0中
- 当遇到下列情况时: 新的虚拟机名为 qoe_192。且它的配置文件就是以虚拟机名为命名的xml文件,即
qoe_192.xml。但是它的镜像文件却是其他
接下来就是慢慢地等待了….
然后就出现如上了,就是这么简单… ^_^
- 因为虚拟机在不同物理机上的移植,所以其 MAC地址一定会自动改变,这点无需我们操心,但是原有以 MAC
为基础的网络配置却失效了,故需要重新配置下网络
- 先进入超级用户模式下,然后查看本机的 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,所以具体的语句有一点点不同,仅此而已!
- 接着就是重启虚拟里的网络
service network restart
OK,大功告成了,配置完毕!
克隆虚拟机
需求分析:克隆qoe_192虚拟机为新的虚拟机 qoe_193
克隆已有的虚拟机,首先需要将被复制的虚拟机 power off,然后再右击,选择 clone, 在弹出的界面中
首先在 Name一栏中,填入所需的新虚拟机名称,默认就是 xx-clone(暂不改,等等教后续如何修改,当然改了是最直接方便的)。
其次在 Storage一栏中选择 Details一项,在弹出的下面界面中,可以看到克隆的磁盘位置在 /var/lib/libvirt/images/qoe_192.img
- 而新的虚拟机的磁盘位置为该目录下的 qoe_192-clone,这里建议直接改为需求的qoe_193.img。然而为了说明当忘记修改后续如何调整,现暂不动
- 选择的过程也可以点击 Browse一栏(图中4),然后选择 Browse Local(图中5),最终在 (图中6)处选择你要的磁盘文件,然后点击 Choose Volume
可以看到已经克隆出了新的虚拟机了,现在返回修改虚拟机的名称以及镜像文件的名称。
首先进入 /var/lib/libvirt/images 中,修改 镜像文件的名称
cd /var/lib/libvirt/imagesmv qoe_192-clone.img qoe_193.img
然后右击关闭着的 qoe_192-clone,选择 open,然后点击位置1 的修改虚拟机硬件位置的地方
- 点击位置2 “Overview”, 在右栏中位置3 “Name” 中编辑你想修改的新名称即可
- 点击位置4 “VirlO Disk”,就突然弹出 5的报错信息,因为先前已经将qoe_192-clone.img 重新命名为 qoe_193.img了,不报错才怪~,这时将右击位置4 ,选择 “Remove Hardware”,删除它!
点击位置6 “Add Hardware”
-- 点击位置 1 “Storage”,选择 “Select managed or other existing storage”,点击 “Browse”
- 选择之前更名后的 qoe_193.img,选择 Choose Volume
- 将 “Device type” 更改为 “Virtio Disk” 类型
接着就是将修改后的 qoe_193 启动 “Run” 就OK了,完毕!但别忘了网络配置还是要改的… -_-!
- KVM克隆及在不同物理机下的移植
- kvm跨物理机迁移和克隆过程
- KVM在嵌入式Linux上的移植
- KVM在嵌入式Linux上的移植
- KVM在嵌入式Linux上的移植
- KVM在嵌入式Linux上的移植
- kvm跨物理机迁移的过程
- KVM 虚拟机在物理主机之间迁移的实现
- KVM 虚拟机在物理主机之间迁移的实现
- KVM 虚拟机在物理主机之间迁移的实现
- KVM 虚拟机在物理主机之间迁移的实现
- KVM 虚拟机在物理主机之间迁移的实现
- KVM 虚拟机在物理主机之间迁移的实现
- KVM 虚拟机在物理主机之间迁移的实现
- KVM 虚拟机在物理主机之间迁移的实现
- KVM 虚拟机在物理主机之间迁移的实现
- KVM 虚拟机在物理主机之间迁移的实现
- KVM 虚拟机在物理主机之间迁移的实现
- Quartz体系结构
- 1025. 反转链表 (25)
- poj3579 二分
- mysql 慢日志分析工具pt-query-digest
- USB枚举过程
- KVM克隆及在不同物理机下的移植
- mac系统Sublime 2 乱码问题
- 数据库出现ORA-00283/ORA-01610的问题
- Hibernate Criteria的详细用法
- iOS中关于登录验证方面的问题的解决
- 实现平衡二叉树
- HDU 1004 Let the Balloon Rise (map使用)
- HDU ACM 2008 数值统计
- Linux中查看CPU信息