Fork me on GitHub

虚拟化之kvm与xen对比

xen

 

XenServer is the leading open source virtualization platform, powered by the Xen Project hypervisor and the XAPI toolstack. It is used in the world's largest clouds and enterprises.

Commercial support for XenServer is available from Citrix.

 

Xen的问世要比KVM早4年之久(两者分别是2003年和2007年)。2013年4月,Linux基金会宣布Xen成为Linux基金会合作项目。

Xen是Linux下的一个虚拟化解决方案,但由于被Citrix收购后,变成了和红帽企业版一样了,卖服务收取费用,Redhat从rhel6.0开始已经从内核中把XEN踢出去了,全心投入开发免费的KVM,虽然市场上老用户还在用Xen,但相信kvm会逐步占领大面积的市场,必竟有redhat做为强大支持源。
Xen的实现方法是运行支持Xen功能的kernel,这个kernel是工作在Xen的控制之下,叫做Domain0,使用这个kernel启动机器后,你可以在这个机器上使用qemu软件,虚拟出多个系统。Xen的缺点是如果你需要更新Xen的版本,你需要重新编译整个内核,而且,稍有设置不慎,系统就无法启动。
相比较,KVM就简化的多了。它不需要重新编译内核,也不需要对当前kernel做任何修改,它只是几个可以动态加载的.ko模块。它结构更加精简、代码量更小。所以,出错的可能性更小。并且在某些方面,性能比Xen更胜一筹。

Xen同时支持全虚拟化和半虚拟化(修改过的客户机能有更好的性能)
KVM是一个全虚拟化的解决方案。可以在x86架构的计算机上实现虚拟化功能。但KVM需要CPU中虚拟化功能的支持,只可在具有虚拟化支持的CPU上运行,即具有VT功能的Intel CPU和具有AMD-V功能的AMD CPU。
KVM不如Xen技术成熟,并且缺少某些关键特性,如动态迁移和泛虚拟化支持。

 

在Xen中,虚拟机叫做Domain。在这些虚拟机中,Domain0具有很高 的特权,负责一些专门的工作。由于hypervisor中不包含任何与硬件对话的驱动,也没有与管理员对话的接口,这些驱动就由 domain0来提供 了。通过domain0,管理员可以利用一些Xen工具来创建其它虚拟机(DomainU)。这些domainU属于无特权domain。
而KVM是基于Linux环境的开源虚拟化解决方案,其思想是在Linux内核的基础上添加虚拟机管理模块,重用Linux内核中已经完善的进程调度、内存管理与硬件设备交互等部分,使之成为一个可以支持运行虚拟机的Hypervisor。因此,KVM并不是一个完善的模拟器,而只是一个提供虚拟化功能的内核插件,具体的模拟器工作是借助工具(QEMU)来完成。

[root@xs1 ~]# ps -ef|grep qemu
65537     8853  8851  5 14:42 ?        00:00:27 qemu-dm-2 -d 2 -m 4096 -boot dc -serial pty -vcpus 2 -std-vga -videoram 8 -vncunused -k en-us -vnc 127.0.0.1:1 -usb -usbdevice tablet -net nic,vlan=0,macaddr=06:3a:74:00:00:0d,model=rtl8139 -net tap,vlan=0,bridge=xenbr0,ifname=tap2.0 -acpi -monitor pty
root      8877  8853  0 14:42 ?        00:00:00 qemu-dm-2 -d 2 -m 4096 -boot dc -serial pty -vcpus 2 -std-vga -videoram 8 -vncunused -k en-us -vnc 127.0.0.1:1 -usb -usbdevice tablet -net nic,vlan=0,macaddr=06:3a:74:00:00:0d,model=rtl8139 -net tap,vlan=0,bridge=xenbr0,ifname=tap2.0 -acpi -monitor pty
65538     9698  9697  2 14:42 ?        00:00:12 qemu-dm-3 -d 3 -m 1024 -boot dc -serial pty -vcpus 16 -videoram 4 -vncunused -k en-us -vnc 127.0.0.1:1 -usb -usbdevice tablet -net nic,vlan=0,macaddr=06:b2:b0:00:00:10,model=rtl8139 -net tap,vlan=0,bridge=xenbr0,ifname=tap3.0 -acpi -monitor pty
root      9714  9698  0 14:42 ?        00:00:00 qemu-dm-3 -d 3 -m 1024 -boot dc -serial pty -vcpus 16 -videoram 4 -vncunused -k en-us -vnc 127.0.0.1:1 -usb -usbdevice tablet -net nic,vlan=0,macaddr=06:b2:b0:00:00:10,model=rtl8139 -net tap,vlan=0,bridge=xenbr0,ifname=tap3.0 -acpi -monitor pty
root     14781 14676  0 14:50 pts/6    00:00:00 grep qemu

XenServerDomain0默认使用752MB内存,由于每启动一台虚拟机,Domain0中就会启动一个Qemu-DM的进程,占用大约6M的内存空间,因此在虚拟机数量较多的情况下,我们需要增大Domain0内存以便支持更多的虚拟机运行。由于Domain0是32位操作系统,故支持的最大内存量为4GB。更改Domain0内存的方法参考CTX124806-XenServerSingleServerScalabilitywithXenDesktop提到的例子,更改/boot/exlinux.conf下包含dom0_mem=2940M的Xen命令行。
修改dom0三种方法,一是在安装时按F2修改,二是修改vi /boot/extlinux.conf,将内存调大,三是如下
XenServer6.1提供更简单的命令设置Domain0内存。
    通过XenCenter的控制口或者SSH方式以root身份登录到Domain0。
    执行下面命令:
/opt/xensource/libexec/xen-cmdline–set-xendom0_mem=<nn>M,max:<nn>M
    重新启动XenServer以确保改动生效。
    登陆Domain0执行free命令,确保改动已生效。

centos7下安装openxenmanager不成功(linux下的xencenter)
https://github.com/OpenXenManager/openxenmanager下载地址

[root@kvm2 openxenmanager-master]# python openxenmanager
Traceback (most recent call last):
  File "openxenmanager", line 32, in <module>
    from OXM.window import oxcWindow
  File "./src/OXM/window.py", line 36, in <module>
    import gtkvnc
ImportError: No module named gtkvnc


 


Xen支持一个客体虚拟机的数量呈线性增长,可以支持30个以上工作负载同时运行。KVM随着工作负载的增加性能逐渐下降。所以就目前来看,Xen在各方面都占有优势。同时,Xen成为Linux 基金会项目。但是KVM得到了Ret Hat的大力支持,将会使其功能更加齐全。

kvm-虚拟机管理软件创建虚拟机

 

RHEV Manager也称之为RHEV-M管理控制台,它是Red Hat服务器虚拟化平台的核心组件。RHEV Manager提供了管理运行在物理节点上的虚拟机的Web界面。

RHEV环境的另一个重要部分就是运行虚拟机的主机节点。可以将RHEV-H hypervisor或带有虚拟化授权的Red Hat企业Linux服务器配置为节点。这两种类型的节点使用KVM作为底层的hypervisor。

ovirt  多kvm管理工具

http://www.ovirt.org/download/

 

1.Virtual Machine Manager

http://virt-manager.org/

命令行工具 virt-manager来启动

2.cloudstack来管理

3.virsh来管理,属于libvirt-client

  这一套类似于openssh,既有客户,也有守护

 

http://pve.proxmox.com/wiki/Main_Page
Proxmox Virtual Environment is a powerful Open Source Server Virtualization Platform, based on KVM and LXC.

QEMU/KVM can be invoked directly without libvirt, however you won't be able to use tools such as virt-manager, virt-install, or virsh. Plain QEMU (without KVM) can also virtualize other processor architectures like ARM or PowerPC.

It consists of
a loadable kernel module, kvm.ko, that provides the core virtualization infrastructure
and
a processor specific module, kvm-intel.ko or kvm-amd.ko.

The kernel component of KVM is included in mainline Linux, as of 2.6.20.
The userspace component of KVM is included in mainline QEMU, as of 1.3.

 

Description:
There are two problems with the packaging of the qemu-bridge-helper binary:
1) It is installed in /usr/lib/qemu/, but qemu still expects to find it in /usr/libexec/. I suspect that's caused by only passing libexecdir=/usr/lib/qemu to "make install", but not to "make" on "configure". This software cares about the definition of libexecdir during the build as well as the installation.
2) Based on reading the source, this binary expects to be installed either setuid, or with "setcap cap_net_admin+ep". This allows VMs using "-net tap" or "-net bridge" to be started as non-root. (This binary also reads ACLs from /etc/qemu/bridge.conf to prevent users abusing the access thus gained. Unfortunately, both the binary and the config file are quite poorly documented.)
I suspect the "qemu" package is has the same problems, though as I don't use it, I haven't done any testing on that one.

suspect vi. 怀疑;猜想
Additional info:
* package version(s)
qemu-kvm 1.2.0-1

 

下面是一个报错
qemu-system-x86_64 -m 512M -cdrom archlinux-2013.03.01-dual.iso -net nic -net bridge,br=virtnic
failed to parse default acl file `/etc/qemu/bridge.conf'
failed to launch bridge helper
qemu-system-x86_64: -net bridge,br=virtnic: Device 'bridge' could not be initialized

 

比较专业,解决了很多疑问
http://smilejay.com/2012/08/kvm-sdl-display/
http://smilejay.com/kvm-principles-and-practices/
http://smilejay.com/2013/12/qemu-kvm-install-guest-in-text-mode/

http://www.diyoms.com/cloud/836.html
http://www.diyoms.com/cloud/827.html


cat /etc/qemu-kvm/bridge.conf
将allow virbr0改为allow br0
之前就是因为这个没改,所以加入的参数 -net bridge -net nic 都是失败状态
改了之后,再启动并加入上面的网络参数就可以将虚拟机桥接到宿主机的网络中了,
否则qemu/kvm中默认使用IP伪装方式实现NAT,而不是SNAT和DNAT
前提是宿主机需要有一个DHCP服务器来分配NAT内网的IP地址,可以使用dnsmasq工具实现。
/usr/libexec/qemu-kvm  -boot order=dc -hda cs66.qcow2 -m 1024 -net bridge -net nic -spice port=9987,password=12345

dnsmasq是一个轻量级的DHCP和DNS服务器软件
[root@localhost ~]# rpm -qa|grep dns
dnsmasq-2.66-14.el7_1.x86_64

 

安装软件

安装KVM模块、管理工具和libvirt (一个创建虚拟机的工具),我们使用命令行安装:
#yum install kvm virt-manager libvirt
#service libvirtd start
#chkconfig libvirtd on

确定正确加载kvm模块
不安装软件的话,kvm模块不加载,装完之后就会自动加载。

检查KVM是否成功安装
# virsh -c qemu:///system list

1、kvm上网有两种配置,
一种是default,它支持主机与虚拟机的互访,同时也支持虚拟机访问互联网,但不支持外界访问虚拟机。
另外一种方式是bridge方式,可以使用虚拟机成为网络中具有独立IP的主机。

默认的网络连接是virbr0,它的配置文件在/var/lib/libvirt/network目录下,默认配置为: 
[root@manage network]# cat default.xml
<!--
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
  virsh net-edit default
or other application using the libvirt API.
-->

<network>
  <name>default</name>
  <uuid>9c172d39-86e7-416f-ad4b-744d8cbbb1cf</uuid>
  <forward mode='nat'/>
  <bridge name='virbr0' stp='on' delay='0' />
  <mac address='52:54:00:C8:E9:15'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254' />
    </dhcp>
  </ip>
</network>


另外一种是网络桥接方式,
可以用brctl这个工具去配置,就不需要改文件了
配置eth0如下:
[root@manage network]# cat /etc/sysconfig/network-scripts/ifcfg-p3p1
DEVICE=p3p1
HWADDR=64:00:6A:3B:AF:BE
TYPE=Ethernet
UUID=1ec8b9b8-57d4-42db-9919-b86f04810aef
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
#IPADDR=192.168.1.250
#NETMASK=255.255.255.0
#GATEWAY=192.168.1.2
#DNS1=192.168.1.2
#DNS2=8.8.8.8
BRIDGE=br0


配置br0如下:
vi /etc/sysconfig/network-scripts/ifcfg-br0 
DEVICE="br0"
TYPE=Bridge
BOOTRPOTO=static
IPADDR=192.168.1.250
NETMASK=255.255.255.0
GATEWAY=192.168.1.2
ONBOOT=yes 
ifconfig查看一下


网桥模式需要在真机eth0配置文件中添加 BRIDGE="br0",否则真机与虚拟机无法互通.
配置完毕后eth0口则不会显示地址信息,新配置的br0口会代替eth0口成为真机网口,装好的虚拟机eth0口将于真机br0口互通.
配置桥接网络之后,我们开始安装虚拟机



创建虚拟机
使用qemu-kvm创建一个kvm虚拟机
使用virsh创建一个kvm虚拟机
使用virt-manager GUI工具建立一个kvm虚拟机

 

 

http://libvirt.org/remote.html
http://www.linux-kvm.org/index.php?title=Management_Tools&printable=yes

https://virt-manager.org/

 

kvm

安装软件

[root@kvm ~]# yum grouplist

Virtualization
Virtualization Client
Virtualization Platform
Virtualization Tools

centos6.4-minimal-64bit 默认是200个包
[root@kvm ~]# yum install libvirt python-virtinst qemu-kvm
Transaction Summary
=====================================================================================================================================================
Install 87 Package(s)
Upgrade 4 Package(s)

Total download size: 36 M
Is this ok [y/N]: y

[root@kvm ~]# yum install tigervnc-server
Transaction Summary
=====================================================================================================================================================
Install 22 Package(s)

Total download size: 24 M
Installed size: 70 M
Is this ok [y/N]: y


[root@kvm kvm]# yum install virt-viewer
Transaction Summary
=====================================================================================================================================================
Install 24 Package(s)
Upgrade 2 Package(s)

Total download size: 8.2 M
Is this ok [y/N]:

[root@kvm ~]# lsmod |grep kvm
kvm_intel 53484 0
kvm 316506 1 kvm_intel

上面表面kvm已经成功加载,kvm已经成功安装完成了。
[root@kvm ~]# vi /etc/selinux/config
改为SELINUX=disabled
[root@kvm ~]# reboot
[root@kvm ~]# getenforce
Disabled
[root@kvm ~]# service iptables stop
[root@kvm ~]# service libvirtd start
Starting libvirtd daemon:
[root@kvm ~]# rpm -ql libvirt
[root@kvm ~]# rpm -ql python-virtinst
virt-install - provision(准备,预备) new virtual machines

[root@kvm networks]# cat /etc/libvirt/qemu/networks/default.xml

[root@kvm ~]# vi /etc/libvirt/qemu.conf

QEMU和KVM的关系

现在所说的虚拟化,一般都是指在CPU硬件支持基础之上的虚拟化技术。KVM也同hyper-V、Xen一样依赖此项技术。没有CPU硬件虚拟化的支持,KVM是无法工作的。
准确来说,KVM是Linux的一个模块。可以用modprobe去加载KVM模块。加载了模块后,才能进一步通过其他工具创建虚拟机。但仅有KVM模块是远远不够的,因为用户无法直接控制内核模块去做事情:
还必须有一个用户空间的工具才行。这个用户空间的工具,开发者选择了已经成型的开源虚拟化软件 QEMU。说起来QEMU也是一个虚拟化软件。它的特点是可虚拟不同的CPU。
比如说在x86的CPU上可虚拟一个Power的CPU,并可利用它编译出可运行在Power上的程序。KVM使用了QEMU的一部分,并稍加改造,就成了可控制KVM的用户空间工具了。
所以你会看到,官方提供的KVM下载有两大部分三个文件,分别是KVM模块、QEMU工具以及二者的合集。也就是说,你可以只升级KVM模块,也可以只升级QEMU工具。这就是KVM和QEMU的关系。

网卡桥接

其实KVM的安装和使用都很方便简单的,大家要理解KVM各个参数的含义。最关键的就是KVM的网络桥接的设置,在这里大家要多看软件自身的文档,会有很大的帮助。
要注意,系统重启后要重新加载kvm内核模块:当然,你也可以修改系统相关设置在启动时自动加载该模块。kvm是不是比VB和VM要爽得多呢?
KVM的默认网络模式为NAT,就是说借助宿主机模式上网,现在我们想改成桥接模式,这样外界就可以直接和宿主机里的虚拟机通讯了。

[root@localhost ~]#vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
TYPE=Ethernet
BRIDGE=br0
IPADDR=192.168.1.187
NETMASK=255.255.255.0

在我们安装完成的时候,是没有关于br0网卡的配置文件的,拷贝一下eth0并重命名为br0
cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-br0 br0以下四项
DEVICE=br0
BOOTPROTO=static
ONBOOT=yes
TYPE=Bridge

保存网卡配置重启网卡
[root@localhost ~]#service network restart
检查br0是否成功
[root@localhost ~]#ifconfig

其实我们在虚拟机搭建的时候,我们最终关心的网卡是: eth0, br0, vnet0,vnet1… 其中,我们的eth0是原来的物理网卡,br0是我们虚拟出来的桥设备,而vnetXXX就是桥接映射到虚拟机里面用到的网
卡。当配置完了之后,我们使用ifconfig,查看起来的话,eth0是没有ip地址的,而br0仿佛是虚拟出来的一个原来eth0的访问接口,它具有ip地址,可以代替原来的eth0被访问,而vnetXX的地址可以在
建立虚拟机之后在虚拟机里面配置,桥接后可以被外部访问。

[root@kvm ~]# brctl ?
[root@kvm ~]# brctl showmacs br0
[root@kvm ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.4487fc5bf0b0 no eth0
virbr0 8000.525400a64f66 yes virbr0-nic
系统默认生成接口主要用于NAT,如果要删除可以先ifconfig virbr0 down接口,然后利用brctl delbr virbr0删除掉

当然,有的时候我们在虚拟机里可能不仅仅使用一块网卡,但是在新增网卡的时候会有无法识别的情况,我们如何应对呢,下面记录一种方法,也许可以帮助我们解决问题哦。
[root@localhost ~]#vi /etc/udev/rules.d/70-persistent-net.rules

# PCI device 0x10ec:0x8168 (r8169) 这个是新增网卡
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="c8:61:00:4F:CD:76", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
# PCI device 0x10ec:0x8169 (r8169) 这个是旧的网卡
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:23:56:9A:E8:5C", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

将旧的eth0的配置信息删掉,然后将新增的eth1改成eth0,然后进入/etc/sysconfig/network-script/ 修改ifcfg-eth0的配置文件,更改mac地址(改成新增网卡的),然后重启网络或者重启系统配置既可以生效。

虚拟机连接与查看  不知道虚拟机安装时如何去连接,win7安装vnc客户端去连接host创建的guest,但却一闪而过,是不是host上一定要装桌面环境才能去连接查看

 

2016-07-30/21:35:08

终于发现一闪而过的的解决办法就是

设置win7下的vncviewer的options>expert>filter中先过滤出ColorLevel参数,将其改为full即可连接了

http://www.cnblogs.com/renzherushe/p/3968633.html  由这个链接找到下面这个链接,才明白的是怎么一回事

http://blog.sina.com.cn/s/blog_538052ba0101bavc.html

 

 

连接kvm虚拟机的几种方法,以下是guest系统已安装好,然后连接的方法
我现在知道的有3中方法:
1,ssh:如果虚拟机网络没有配置好就只能用下面两种方法。
2,vnc:可以使用virt-viewer,或者vncviewer命令,但是virt-viewer我遇到了报错,最终没有解决。
Unable to connect to the graphic server localhost:5900
3,通过serial console连接。以下是在guest里所做的
http://nixcraft.com/kernel-based-virtual-machine/15075-kvm-virsh-redirect-centos-redhat-console-serial-port.html
1)echo “ttyS0″ >> /etc/securetty
2)编辑/boot/grub/grub.conf文件在kernel的末尾添加如下:
console=ttyS0
3)编辑 /etc/inittab文件在末尾添加:
S0:12345:respawn:/sbin/agetty ttyS0 115200
4)重启kvm虚拟机,然后在host主机上面依次执行下面命令:
desktop # virsh --connect qemu:///system
virsh # console centos
5)回车输入用户名密码登陆即可。

 

关于virsh shutdown
安装好虚拟机然后用shutdown和 reboot 两个命令不起作用,只有destroy管事。原来 guest 虚拟机不支持 acpi 的话,是无法响应 host 发出的 shutdown 和 reboot 命令的。给出的方案就是,在 guest 虚拟机里安装 acpi 支持包:
# sudo apt-get install acpid

 

默认情况下,QEMU会启动一个VNC server端口(如上面的::1:5900),可以用vncviwer工具来连接到QEMU的VNC端口查看客户机。
这里可以使用“vncviewer :5900”命令连接到QEMU启动的窗口

步骤

kvm支持的镜像很多,常用的是原始镜像(*.img),还有支持动态大小扩张的qocw2格式(首选)。
更优的选择是系统盘如C盘用img格式,数据盘用qcow2格式以减少服务器磁盘闲置空间。
qemu-img create -f raw test.img 10G
创建qcow2镜像,但是其实际占有磁盘大小仅为193K左右,而虚拟机内部显示磁盘大小为10G,也就是磁盘空间使用时才分配,即所谓动态扩张。
qemu-img create -f qcow2 ubuntu.qcow2 10G

要在一台host上跑起一个虚拟机一般需要三个步骤:
第一步:创建虚拟机镜像
qemu-img create -f raw /images/vm1.raw 8G
qmeu-img创建的镜像是一个稀疏文件,也就是说刚创建出来的文件并没有8G,它会随着数据的增多慢慢增加,直到8G
第二步:创建guest系统(以下三种方式)
第三步:管理guest系统(启动,关闭等操作)

虚拟机创建

http://www.open-open.com/lib/view/open1346511443506.html 讲的比较详细
对于用户或者管理员来说,虚拟机的创建有着很多的方法,例如:kvm自带命令行工具、使用virsh命令来创建、使用具有图形界面的virt-manager等等。
但是它们底层实现的原理都是一样的,而且它们基本上都是通过开源的虚拟化库Libvirt来开发的。下面就讲一讲三种用户可以创建虚拟机的方式。

宿主机叫host,虚拟机叫guest

1.1 利用kvm自带命令行工具进行创建
dd if=/dev/zero of=rhel6u3.img bs=1M\ count=8192 也可以用此命令创建一个硬盘文件与qemu-img create命令效果一样
[root@kvm ~]# /usr/libexec/qemu-kvm --help
[root@kvm ~]# qemu-img --help
[root@kvm ~]# qemu-img create -f raw test.img 10G
[root@kvm ~]# qemu-img create -f qcow2 centos65-64.qcow2 10G
[root@kvm ~]# /usr/libexec/qemu-kvm -boot order=dc -hda centos65-64.qcow2 -cdrom CentOS-6.5-x86_64-minimal.iso -m 512 -smp 2 -vnc :0 安装系统
[root@kvm ~]# /usr/libexec/qemu-kvm -boot c -hda test.img -m 512  启动系统

/usr/libexec/qemu-kvm -boot order=dc -hda centos65-64.qcow2 -cdrom CentOS-6.5-x86_64-minimal.iso -m 512 -smp 2 -vnc :0 -name cento --nographic

另一种方式就是在执行qemu-kvm命令的时候,加上“-vnc :0”这样就不会有这个提示了,你可以利用tightvnc这样的工具来连接到5900端口继续安装过程,这种情况的话系统不需要图形界面就可以了。

virt-install -n centos65 -r 512 --disk path=/root/kvm/centos65-64.img -c CentOS-6.5-x86_64-minimal.iso --network bridge=br0 --graphics vnc,password=123456,port=5910

1.2 利用virsh命令行工具进行创建
virt-install是一个使用“libvirt” hypervisor 管理库构建新虚拟机的命令行工具,此工具使用串行控制台,SDL(Simple DirectMedia Layer)图形或者VNC客户端/服务器,
支持基于命令行和图形安装。

http://smilejay.com/2012/08/kvm-sdl-display/

编写xml配置文件,下面介绍
virsh create test.xml
利用virsh工具创建虚拟机必须编写xml配置文件,该文件指定虚拟机的各项参数,比如虚拟机名称、磁盘镜像的位置、内存大小、显示配置等等。下面给出一个简单的配置文件的例子。
#test.xml
<domain type='qemu'>
<name>windowsXP</name>
<uuid></uuid>
<memory>500000</memory>
<currentMemory>500000</currentMemory>
<vcpu>1</vcpu>
<os>
<type arch='i686'machine='pc'>hvm</type>
<boot dev='hd'/>
<boot dev='cdrom'/>
</os>
<devices>
<emulator>/usr/bin/qemu-system-x86_64</emulator>
<disk type='file' device='cdrom'>
<sourcefile='/home/turnupthesun/kvm/windowsXP.iso'/>
<target dev='hdc'/>
<readonly/>
</disk>
<disk type='file' device='disk'>
<sourcefile='/home/turnupthesun/kvm/windowsXP.img'/>
<target dev='hda'/>
</disk>
<graphicstype='vnc' port='14' listen='127.0.0.1'/>
</devices>
</domain>
下面介绍其中几个比较重要的元素及属性。
(1)<domain>元素的type属性指定运行域的虚拟机管理器,针对kvm应当选择“qemu”。
(2)<name>元素的内容指定域的名字。
(3)<memory>元素和<currentMemory>元素的内容非别指定启动时为域分配的最大内存和实际分配的内存。
(4)<os></os>元素之间的内容用来指定操作系统启动的一些信息。其中重复的<boot>元素形成了一个启动顺序表,比如例子中先从磁盘启动,磁盘无法启动再从光盘启动。
(5)<disk>元素的device属性指明不同的设备,<source>标签的file属性指明这些设备的位置。

[root@kvm ~]# virsh
Welcome to virsh, the virtualization interactive terminal.

Type: 'help' for help with commands
'quit' to quit

virsh #
[root@kvm ~]# virsh -c qemu:///system list

virt-install -n centos.... 安装虚拟机
virt-viewer -c qemu:///system centos vnc远程到虚拟机安装系统
如果这里报错无法连接虚拟机,则安装vncviewer
vncviewer 192.168.2.8
yum -y install dacpid 安装完虚拟机系统则安装acpid,不然无法通过virsh安装关闭虚拟机

virsh -c qemu:///system
virsh # list --all
virsh # start centos
virsh # shutdown centos 正常关闭虚拟机命令(如果虚拟机没有安装dacpi命令则不能用shutdown关闭虚拟机)
virsh # destroy centos 强制关闭
# virt-clone --connect=qemu:///system -o centos -n kvm1 -f centos1.qcow2 virt-clone命令克隆虚拟机

1,通过virsh交互无法shutdown关闭kvm虚拟机,原因是kvm虚拟机没有安装acpid。
2,vnc问题,virt-viewer报错,只能使用vncviewer 127.0.0.1来连接虚拟机。

virsh list //查看虚拟机信息
virsh destroy kvmtest1 //virsh destroy ID/NAME删除虚拟机
virsh start kvmtest1 //virsh start NAME启动虚拟机
virsh console kvmtest1 //virsh console ID/NAME控制台连接虚拟机
//利用ctrl+]切换到host主机,host主机利用virsh console ID/NAME切换到guest系统。
虚拟机的配置文件保存在/etc/libvert/qemu目录下,扩展名是xml,这文件只能用virsh edit来编辑用vi无效,修改相应的文件即可重新配置虚拟机。

[root@kvm kvm]# virt-install -n centos65 -r 512 --disk path=/root/kvm/centos65-64.img -c CentOS-6.5-x86_64-minimal.iso --network bridge=br0 --graphics vnc,password=123456,port=5910
virt-install -v -n kvmtest1 -r 512 –vcpus=1 -l http://mirrors.163.com/centos/6.3/os/x86_64/ -nographics -virt-type=kvm -f /home/vmimages/kvmtest1.img -s 10 -w bridge:br0 -w bridge:br1 -extra-args='console=tty0 console=ttyS0,115200,n,8 ks=http://192.168.xx.xx/test1.cfg' -connect qemu:///system
-w 联网方式(birdge bridge:br0/nat bridge:virbr0)
-os-type='windows' -os-variant=win2k3 安装windows最好加上这个否则会报错,大家注意一个问题,如果你虚拟的是WIN2003,那么切勿在-net参数中使用model=e1000,否则HOST和GUEST之间不能PING通
virt-install工具安装虚拟机后,在目录/etc/libvirt/qemu/下生成xml配置文件

1.3 如何通过图形化界面virt-manager来创建虚拟机
virt-manager是RedHat共享的一个开源虚拟化管理软件,它是用Python编写的GUI程序,底层使用了Libvirt对各类Hypervisor进行管理。
Virt-manger既虚拟机管理器,是创建和管理虚拟客户端的图形工具。具体的操作步骤为:
a.从控制台窗口启动这个工具,从root身份输入virt-manager命令,点击file菜单的”新建”选项。
b.virt-manager显示两种虚拟化方法:Qemu/KVM或者Xen,这里选择Qemu/KVM作为hypervisor。
c.选择虚拟机名称和指定一种安装方法,通过网络安装服务器或者本地CD/DVD驱动包括本地ISO文件,在此我用本地ISO的安装方法。
d.输入本地ISO文件路径和文件名(假设本地ISO的路径就在根目录下,名称为Mini-BT3.6.1.iso)
e.设置虚拟机使用的内存容量和处理器数量。
f.配置虚拟机的存储方法。对于存储后端有两种选择:物理存储设备或者使用之前建立的磁盘文件。如果处于简单测试,创建文件作为存储后端。当创建虚拟磁盘时,默认为10GB。
g.网络配置,在这里选择NAT方式。
这样一个虚拟机就开始启动起来了,将会出现启动界面,最后出现虚拟机中操作系统的界面。

 

http://www.open-open.com/lib/view/open1346511443506.html
Virsh可以管理KVM以及xen等虚拟机。
利用virsh工具创建虚拟机必须编写xml配置文件,该文件指定虚拟机的各项参数,比如虚拟机名称、磁盘镜像的位置、内存大小、显示配置等等。下面给出一个简单的配置文件的例子。

利用libvirt库编写自己的虚拟机创建程序
Virsh命令用来创建虚拟机的命令是:virsh create,这个命令主要是从给定的XML文件生成客户端并启动客户端。

在命令窗口中先执行gcc -lvirt -o 701 701.c  ,然后执行./701 701.xml,就可以看到这个虚拟机被创建并启动起来了。

开源的Lbvirt库实现了很多的虚拟化API,这些API的实现还是要靠底层的KVM内核的实现,下面重点讲讲KVM内核中是如何实现虚拟机创建和运行功能的操作系统层的实现。
 

 

虚拟机备份及恢复
备份:拷贝/etc/libvirt/qemu目录下的xml配置文件,以及xml中设置的img文件。
恢复:进入virsh,执行define

 

[root@manage 6]# yum install libvirt
/usr/sbin/libvirtd

libvirt-client
/usr/bin/virsh

qemu-img
/usr/bin/qemu-img
/usr/bin/qemu-io

[root@manage 6]# yum install kvm
yum install kvm
yum install qemu-kvm
这两个包其实是一个包,不知道谁是谁的别名
/usr/libexec/qemu-kvm
/usr/sbin/ksmtuned

[root@manage libvirt]# yum history
Loaded plugins: fastestmirror
ID     | Login user               | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
    12 | root <root>              | 2016-04-12 14:23 | Install        |    8
    11 | root <root>              | 2016-04-12 14:17 | I, U           |   34

[root@manage libvirt]# yum history info 12

 

 

 


cloudstack相关情况

virsh # pool-list Name State Autostart ----------------------------------------- 3f33eb99-fddb-3780-88a0-a063b1ec8793 active no 628c6160-f35d-4dec-af5f-c9a1cd56276a active no virsh # vol-list 3f33eb99-fddb-3780-88a0-a063b1ec8793 Name Path ----------------------------------------- 426cfdaa-72f5-439e-a223-490ede62bdf8 /mnt/3f33eb99-fddb-3780-88a0-a063b1ec8793/426cfdaa-72f5-439e-a223-490ede62bdf8 55d7f9df-daa7-4521-a108-d7d31be7a425 /mnt/3f33eb99-fddb-3780-88a0-a063b1ec8793/55d7f9df-daa7-4521-a108-d7d31be7a425 7699f535-5dd6-4ba1-9dd9-742bac974d51 /mnt/3f33eb99-fddb-3780-88a0-a063b1ec8793/7699f535-5dd6-4ba1-9dd9-742bac974d51 89f4b1d4-3a81-4b70-9a65-7ee60a349d07 /mnt/3f33eb99-fddb-3780-88a0-a063b1ec8793/89f4b1d4-3a81-4b70-9a65-7ee60a349d07 94fcb671-0e54-4b3e-83b7-13182ef2d0c2 /mnt/3f33eb99-fddb-3780-88a0-a063b1ec8793/94fcb671-0e54-4b3e-83b7-13182ef2d0c2 cb1d3bfa-ef19-11e5-9a08-000c2968569c /mnt/3f33eb99-fddb-3780-88a0-a063b1ec8793/cb1d3bfa-ef19-11e5-9a08-000c2968569c KVMHA /mnt/3f33eb99-fddb-3780-88a0-a063b1ec8793/KVMHA virsh # vol-info /mnt/3f33eb99-fddb-3780-88a0-a063b1ec8793/cb1d3bfa-ef19-11e5-9a08-000c2968569c
Name:           cb1d3bfa-ef19-11e5-9a08-000c2968569c
Type:           file
Capacity:       2.44 GiB
Allocation:     292.89 MiB

virsh # vol-info /mnt/3f33eb99-fddb-3780-88a0-a063b1ec8793/89f4b1d4-3a81-4b70-9a65-7ee60a349d07
Name:           89f4b1d4-3a81-4b70-9a65-7ee60a349d07
Type:           file
Capacity:       2.44 GiB
Allocation:     97.95 MiB

virsh # vol-info /mnt/3f33eb99-fddb-3780-88a0-a063b1ec8793/55d7f9df-daa7-4521-a108-d7d31be7a425
Name:           55d7f9df-daa7-4521-a108-d7d31be7a425
Type:           file
Capacity:       2.44 GiB
Allocation:     254.76 MiB

virsh # vol-info /mnt/3f33eb99-fddb-3780-88a0-a063b1ec8793/426cfdaa-72f5-439e-a223-490ede62bdf8
Name:           426cfdaa-72f5-439e-a223-490ede62bdf8
Type:           file
Capacity:       2.44 GiB
Allocation:     218.45 MiB

virsh # vol-info /mnt/3f33eb99-fddb-3780-88a0-a063b1ec8793/94fcb671-0e54-4b3e-83b7-13182ef2d0c2
Name:           94fcb671-0e54-4b3e-83b7-13182ef2d0c2
Type:           file
Capacity:       30.00 GiB
Allocation:     10.06 GiB

virsh # vol-info /mnt/3f33eb99-fddb-3780-88a0-a063b1ec8793/7699f535-5dd6-4ba1-9dd9-742bac974d51
Name:           7699f535-5dd6-4ba1-9dd9-742bac974d51
Type:           file
Capacity:       20.00 GiB
Allocation:     1.22 GiB

 

新安装一台KVM服务器,启动KVM服务时候报错:version Base not defined in file libdevmapper.so.1.02 with link time reference

现象如下:

# /etc/init.d/libvirtd start
Starting libvirtd daemon: libvirtd: relocation error: libvirtd: symbol dm_task_get_info_with_deferred_remove, version Base not defined in file libdevmapper.so.1.02 with link time reference [FAILED]

解决办法:

# yum upgrade device-mapper-libs

 

 

 

 

posted on 2014-05-15 15:40  阳光-源泉  阅读(2125)  评论(0编辑  收藏  举报

导航