关于kvm轻度使用的一些总结
关于kvm轻度使用的一些总结关于kvm和qemu和virt-tools、libvirt如何安装虚拟机和简单使用trouble-shooting1. 关于kvm、qemu、virt-tools、libvirt什么是 KVM ?kVM 是指基于 Linux 内核的虚拟机(Kernel-based Virtual Machine)。 2
关于kvm轻度使用的一些总结
-
关于kvm和qemu和virt-tools、libvirt
-
如何安装虚拟机和简单使用
-
trouble-shooting
1. 关于kvm、qemu、virt-tools、libvirt
什么是 KVM ?
kVM 是指基于 Linux 内核的虚拟机(Kernel-based Virtual Machine)。 2006 年 10 月,由以色列的Qumranet 组织开发的一种新的“虚拟机”实现方案。 2007 年 2 月发布的 Linux 2.6.20 内核第一次包含了 KVM 。增加 KVM 到 Linux 内核是 Linux 发展的一个重要里程碑,这也是第一个整合到 Linux 主线内核的虚拟化技术。
KVM 在标准的 Linux 内核中增加了虚拟技术,从而我们可以通过优化的内核来使用虚拟技术。在 KVM 模型中,每一个虚拟机都是一个由 Linux 调度程序管理的标准进程,你可以在用户空间启动客户机操作系统。一个普通的 Linux 进程有两种运行模式:内核和用户。 KVM 增加了第三种模式:客户模式(有自己的内核和用户模式)。
什么是libvirt?
Libvirt是库,是一种实现 Linux 虚拟化功能的 Linux® API,它支持各种虚拟机监控程序,包括 Xen 和 KVM,以及 QEMU 和用于其他操作系统的一些虚拟产品。
他提供一个命令和一个稳定的层来管理node上的域,甚至乎远程管理。 libvirt提供所有API来做管理,例如提供,创建,修改,监控,控制,迁移,和停止域。
他的构成是这样的:
- a node is a single physical machine
- an hypervisor is a layer of software allowing to virtualize a node in a set of virtual machines with possibly different configurations than the node itself
- a domain is an instance of an operating system (or subsystem in the case of container virtualization) running on a virtualized machine provided by the hypervisor
libvirt把物理机叫节点node,将虚拟客户机比作域domain,还有一个hypervisor的软件负责虚拟化的(负责通讯和处理api请求等)
其实他的架构师这样的:
从另外一个层面来看是这样的
引用参考:
- http://www.ibm.com/developerworks/cn/linux/l-libvirt/
- http://en.wikipedia.org/wiki/Libvirt
- http://libvirt.org/goals.html
什么是qemu
表格一解释了qemu就是面向各种架构的平台仿真器.
QEMU是一套由Fabrice Bellard所编写的模拟处理器的自由软件。它与Bochs,PearPC近似,但其具有某些后两者所不具备的特性,如高速度及跨平台的特性。经由kqemu这个开源的加速器,QEMU能模拟至接近真实电脑的速度。
进一步理解的话,kvm只能虚拟x86平台的虚拟机,而qemu就可以虚拟arm,mips平台的虚拟机,这就是他们最大的区别。
引用参考:
什么是virt-tools
virt-tools是管理libvirt的工具,例如virt-install virsh等工具
引用参考:
表格一是列出各种不同的虚拟机程序的区别:
虚拟机监控程序 | 描述 |
---|---|
Xen | 面向 IA-32,IA-64 和 PowerPC 970 架构的虚拟机监控程序 |
QEMU | 面向各种架构的平台仿真器 |
Kernel-based Virtual Machine (KVM) | Linux 平台仿真器 |
Linux Containers(LXC) | 用于操作系统虚拟化的 Linux(轻量级)容器 |
OpenVZ | 基于 Linux 内核的操作系统级虚拟化 |
VirtualBox | x86 虚拟化虚拟机监控程序 |
User Mode Linux | 面向各种架构的 Linux 平台仿真器 |
Test | 面向伪虚拟机监控程序的测试驱动器 |
Storage | 存储池驱动器(本地磁盘,网络磁盘,iSCSI 卷) |
2. 如何安装虚拟机和简单使用
CentOS6.5 x64上安装KVM功能模块步骤
操作都以root用户进行。
-
检查CPU信息
KVM 需要有 CPU 的支持(Intel VT 或 AMD SVM),在安装 KVM 之前检查一下 CPU 是否提供了虚拟技术的支持。 基于 Intel 处理器的系统,运行 grep vmx /proc/cpuinfo 查找 CPU flags 是否包括 vmx 关键词。
Shell
# grep vmx /proc/cpuinfo flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr lahf_lm ida flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr lahf_lm ida
# grep vmx /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce
cx8 apic sep mtrr pge mca cmov pat
pse36 clflush dts acpi mmx
fxsr sse sse2 ss ht tm pbe syscall nx lm
constant_tsc arch_perfmon pebs bts
rep_good pni monitor ds_cpl
vmx est tm2 ssse3 cx16 xtpr lahf_lm ida
flags : fpu vme de pse tsc msr pae mce
cx8 apic sep mtrr pge mca cmov pat
pse36 clflush dts acpi mmx fxsr sse sse2
ss ht tm pbe syscall nx lm constant_tsc
arch_perfmon pebs bts rep_good pni
monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr lahf_lm ida
基于 AMD 处理器的系统,运行 grep svm /proc/cpuinfo 查找 CPU flags 是否包括 svm 关键词
Shell
# grep svm /proc/cpuinfo
# grep svm /proc/cpuinfo
注 : 一些厂商禁止了机器 BIOS 中的 VT 选项 , 这种方式下 VT 不能被重新打开。 注意:/proc/cpuinfo 仅从 Linux 2.6.15(Intel) 和 Linux 2.6.16(AMD) 开始显示虚拟化方面的信息。请使用 uname -r 命令查询您的内核版本。如有疑问,请联系硬件厂商。
-
检查BIOS,确保BIOS里开启VT选项:
Intel(R) Virtualization Tech [Enabled] 如有必要,还需在BIOS中开启VT并重启机器。
-
关掉networkmanager,因为这个会导致虚拟网卡配置冲突
Shell
service NetworkManager stop chkconfig --del NetworkManager
service NetworkManager stop
chkconfig -- del NetworkManager
-
关掉selinux
Shell
修改/etc/selinux/config 文件 将SELINUX=enforcing改为SELINUX=disabled setenforce 0
修改 / etc / selinux / config 文件
将 SELINUX = enforcing 改为 SELINUX = disabled
setenforce 0
-
安装软件 其中一种安装都可以
Shell
yum -y install kvm python-virtinst libvirt tunctl bridge-utils virt-manager qemu-kvm-tools virt-viewer virt-v2v
yum - y install kvm python - virtinst libvirt tunctl bridge - utils virt - manager qemu- kvm - tools virt - viewer virt - v2v
Shell
yum install kvm virt-* libvirt
yum install kvm virt - * libvirt
Shell
yum groupinstall Virtualization 'Virtualization Client' yum install libvirt
yum groupinstall Virtualization 'Virtualization Client'
yum install libvirt
安装完成后需要重启服务器
Shell
service libvirtd start chkconfig --level 3 libvirtd on
service libvirtd start
chkconfig -- level 3 libvirtd on
检查是否可以使用kvm模块
Shell
lsmod | grep kvm kvm_intel 54285 9 kvm 333172 1 kvm_intel
lsmod | grep kvm
kvm _ intel 54285 9
kvm 333172 1 kvm _ intel
-
配置网卡
进入网卡配置目录
Shell
cd /etc/sysconfig/network-scripts/ cp ifcfg-eth0 ifcfg-br0
cd / etc / sysconfig / network - scripts /
cp ifcfg - eth0 ifcfg - br0
将eth0的网卡配置和br0的网卡配置修改为如下内容:
Shell
[root@test02 network-scripts]# cat ifcfg-eth0 DEVICE=eth0 HWADDR=BC:EE:7B:9A:5E:91 TYPE=Ethernet UUID=a257d75d-072c-4eac-8daa-b131324fff52 ONBOOT=yes NM_CONTROLLED=yes #BOOTPROTO=static #IPADDR=192.168.0.12 #NETMASK=255.255.255.0 #GATEWAY=192.168.0.1 DNS1=8.8.8.8 BRIDGE=br0 [root@test02 network-scripts]# cat ifcfg-br0 DEVICE=br0 HWADDR=BC:EE:7B:9A:5E:91 UUID=a257d75d-072c-4eac-8daa-b131324fff52 ONBOOT=yes TYPE=Bridge NM_CONTROLLED=yes BOOTPROTO=static IPADDR=192.168.0.12 NETMASK=255.255.255.0 GATEWAY=192.168.0.1 DNS1=8.8.8.8
[ root @ test02 network - scripts ] # cat ifcfg-eth0
DEVICE = eth0
HWADDR = BC : EE : 7B : 9A : 5E : 91
TYPE = Ethernet
UUID = a257d75d - 072c - 4eac - 8daa - b131324fff52
ONBOOT = yes
NM_CONTROLLED = yes
#BOOTPROTO=static
#IPADDR=192.168.0.12
#NETMASK=255.255.255.0
#GATEWAY=192.168.0.1
DNS1 = 8.8.8.8
BRIDGE = br0
[ root @ test02 network - scripts ] # cat ifcfg-br0
DEVICE = br0
HWADDR = BC : EE : 7B : 9A : 5E : 91
UUID = a257d75d - 072c - 4eac - 8daa - b131324fff52
ONBOOT = yes
TYPE = Bridge
NM_CONTROLLED = yes
BOOTPROTO = static
IPADDR = 192.168.0.12
NETMASK = 255.255.255.0
GATEWAY = 192.168.0.1
DNS1 = 8.8.8.8
配置完成后 执行
service network restart 即可看到效果
评论:
- DNS服务器配置随意
- br0是虚拟网卡,
libvirt
是安装这个软件后出来的 - 实体网卡去掉相关ip属性,如
BOOTPROTO
IPADDR
NETMASK
GATEWAY
,虚拟网卡将这些属性补充到自己的网卡配置文件里面去,但其他配置一律不变动,相当于br0变成实体网卡了,但只是相当于而已。 - 虚拟网卡需要将TYPE改为Bridge,证明是使用桥接模式。
安装虚拟机
-
创建虚拟机磁盘镜像文件
创建磁盘文件不能太小,不然会coredump。
qcow2格式是kvm支持的标准格式,raw格式为虚拟磁盘文件通用格式。有测试数据表明raw格式的I/O性能略高于qcow2格式,但是在加密,容量,快照方面qcow2格式有优势
Shell
qemu-img create -f qcow2 test.qcow2 20G //建立qcow2格式磁盘文件 qemu-img create -f raw test.raw 20G //建立raw格式磁盘文件 qemu-img info test.qcow2 //查看已经创建的虚拟磁盘文件
qemu - img create - f qcow2 test .qcow2 20G / / 建立 qcow2 格式磁盘文件
qemu - img create - f raw test .raw 20G / / 建立 raw 格式磁盘文件
qemu - img info test .qcow2 / / 查看已经创建的虚拟磁盘文件
-
创建并安装虚拟机 以下是ubuntu为例,ubuntu 14
Shell
cat vir_ubuntu.sh #!/bin/bash virt-install --name ubuntu \ --boot network,cdrom,menu=on \ --ram 512 --vcpus=1 \ --os-variant=generic \ --cdrom=/app/ftp_data/team/public/system_iso/ubuntu-14.04-desktop-i386.iso \ --disk path=/app/kvm/images/centos.qcow2,size=10,format=qcow2,bus=virtio \ --bridge=br0,model=virtio --keymap=en-us \ --vnc --vncport=5910 --vnclisten=0.0.0.0
cat vir_ubuntu .sh
#!/bin/bash
virt - install -- name ubuntu \
-- boot network , cdrom , menu = on \
-- ram 512 -- vcpus = 1 \
-- os - variant = generic \
-- cdrom = / app / ftp_data / team / public / system_iso / ubuntu - 14.04 - desktop- i386 .iso \
-- disk path = / app / kvm / images / centos .qcow2 , size = 10 , format = qcow2 ,bus = virtio \
-- bridge = br0 , model = virtio -- keymap = en - us \
-- vnc -- vncport = 5910 -- vnclisten = 0.0.0.0
以下是centos 6.5为例
Shell
cat vir_centos.sh #!/bin/bash virt-install --name centos6.5x64 \ --boot network,cdrom,menu=on \ --ram 512 --vcpus=1 \ --os-variant=generic \ --cdrom=/app/ftp_data/team/public/system_iso/CentOS-6.5-x86_64-bin-DVD1.iso \ --disk path=/app/ftp_data/team/public/system_iso/another_CentOS-6.5-x86_64-bin-DVD1.iso,device=cdrom \ --disk path=/app/kvm/images/centos.qcow2,size=10,format=qcow2,bus=virtio \ --bridge=br0,model=virtio --keymap=en-us \ --vnc --vncport=5911 --vnclisten=0.0.0.0
cat vir_centos .sh
#!/bin/bash
virt - install -- name centos6 . 5x64 \
-- boot network , cdrom , menu = on \
-- ram 512 -- vcpus = 1 \
-- os - variant = generic \
-- cdrom = / app / ftp_data / team / public / system_iso / CentOS - 6.5 - x86_64 -bin - DVD1 .iso \
-- disk path = / app / ftp_data / team / public / system_iso / another_CentOS - 6.5- x86_64 - bin - DVD1 .iso , device = cdrom \
-- disk path = / app / kvm / images / centos .qcow2 , size = 10 , format = qcow2 ,bus = virtio \
-- bridge = br0 , model = virtio -- keymap = en - us \
-- vnc -- vncport = 5911 -- vnclisten = 0.0.0.0
评论:
- os-variant是指支持什么虚拟机,以下是支持的类型,按需选择即可
~~~
win7 : Microsoft Windows 7
vista : Microsoft Windows Vista
winxp64 : Microsoft Windows XP (x86_64)
winxp : Microsoft Windows XP
win2k8 : Microsoft Windows Server 2008
win2k3 : Microsoft Windows Server 2003
freebsd8 : FreeBSD 8.x
generic : Generic
debiansqueeze : Debian Squeeze
debianlenny : Debian Lenny
fedora16 : Fedora 16
fedora15 : Fedora 15
fedora14 : Fedora 14
mes5.1 : Mandriva Enterprise Server 5.1 and later
mandriva2010 : Mandriva Linux 2010 and later
rhel6 : Red Hat Enterprise Linux 6
rhel5.4 : Red Hat Enterprise Linux 5.4 or later
rhel4 : Red Hat Enterprise Linux 4
sles11 : Suse Linux Enterprise Server 11
sles10 : Suse Linux Enterprise Server
ubuntuoneiric : Ubuntu 11.10 (Oneiric Ocelot)
ubuntunatty : Ubuntu 11.04 (Natty Narwhal)
ubuntumaverick : Ubuntu 10.10 (Maverick Meerkat)
ubuntulucid : Ubuntu 10.04 (Lucid Lynx)
ubuntuhardy : Ubuntu 8.04 LTS (Hardy Heron)
~~~ - disk属性就是指虚拟机使用哪一个磁盘镜像文件作为存储地方,指定刚才创建的镜像文件位置即可,size=10,format=qcow2,bus=virtio分别是指大小,格式(跟镜像格式一致),磁盘总线类型(指Value can be ’ide’, ’scsi’, ’usb’, ’virtio’ or ’xen’,virtio是专门为kvm制定的bus,比较常用),大小需要比镜像文件大小要小,相当于镜像是容器,这个disk是里面的水,水太多就溢出了。
- bridge=br0,model=virtio –keymap=en-us分别指网卡使用,网卡模式即驱动模式,和键盘制式,桥接模式都使用br0,而虚拟机需要使用virtio这个驱动才能使用虚拟网卡,这个虚拟网卡驱动在linux下支持很好,在windows下支持一般,键盘制式如果不指定的话会出现键位错乱的情况,一般我们使用英式
- 安装centos6.5的时候我使用了2次disk,原因是因为centos6.5的安装盘启动引导安装有问题,会出现无法查找到安装源的情况,所以特地加载多一个iso,一个作为启动使用,一个作为安装源使用,作为安装源使用的时候是使用磁盘格式存储
- vnc相关配置,这个vnc如果配置了的话是virt-tools组件自带的,无需要额外安装vnc服务端,默认绑定127.0.0.1,这里将其改为 0.0.0.0 以便可以通过外部连接,每一台的虚拟机的端口都不能一致,一致就会冲突而造成无法启动安装。
- 如果无须使用图形界面安装,virt-install默认是支持文本模式安装的。
- os-variant是指支持什么虚拟机,以下是支持的类型,按需选择即可
3. trouble-shooting
- 默认情况下virsh工具不能对linux虚拟机进行关机操作,linux操作系统需要开启与启动acpid服务。在安装KVM linux虚拟机必须配置此服务。
Shell
# chkconfig acpid on # service acpid restart
# chkconfig acpid on # service acpid restart |
- 关于安装windows虚拟机问题
xp是可以安装成功的,但win2008r2安装失败,我提了http://stackoverflow.com/questions/25662436/can-not-install-windows-2008-r2-in-kvm 和 http://segmentfault.com/q/1010000000659199 但依然没有高手能帮忙到,不过在安装winxp的过程中我总结了一下经验:
- kvm其实对windows系列支持并不是太好,虽然补充了兼容windows的磁盘驱动和网卡驱动,但给我的感觉并不大气,不过我也想了一下,其实也没有必要使用kvm去虚拟windows,也有vmware这种大鳄可以做,而且服务器一般是linux,所以其实用的不多。
- windowsxp的安装样例我也给出来,可以做实验之用。
Shell
cat vir_xp2.sh virt-install \ --name=xp2 \ --ram 256 \ --vcpus=1 \ --disk path=/app/kvm/images/xp2.img,size=10 \ --cdrom=/app/ftp_data/team/public/system_iso/zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74070.iso \ --vnc --vncport=5913 --vnclisten=0.0.0.0 \ --network bridge=br0,model=virtio \ --noautoconsole \ --os-variant=winxp \ --keymap=en-us
cat vir_xp2 .sh virt - install \ -- name = xp2 \ -- ram 256 \ -- vcpus = 1 \ -- disk path = / app / kvm / images / xp2 .img , size = 10 \ -- cdrom = / app / ftp_data / team / public / system_iso / zh -hans_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14 - 74070.iso \ -- vnc -- vncport = 5913 -- vnclisten = 0.0.0.0 \ -- network bridge = br0 , model = virtio \ -- noautoconsole \ -- os - variant = winxp \ -- keymap = en - us |
需要注意的是安装磁盘驱动是在安装程序出现寻找磁盘时选择加载驱动
网卡驱动安装参考:
http://lvii.github.io/system/2013/11/15/xp-sp3-kvm-network-virtio-install-failed
官方磁盘和网卡驱动下载:
http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin/
-
关于磁盘在线扩容和热插拔
磁盘在线扩容和热插拔磁盘的时候会报错
Shell
error: this function is not supported by the hypervisor: disk bus 'ide' cannot be hotplugged.
error: Requested operation is not valid: cannot attach device on inactive domain
error: Failed to attach device from /gfs1/disk2tovm2.xml
error: this function is not supported by the hypervisor: disk bus 'ide' cannot be hotplugged
error : this function is not supported by the hypervisor : disk bus 'ide' cannot behotplugged . error : Requested operation is not valid : cannot attach device on inactive domain error : Failed to attach device from / gfs1 / disk2tovm2 .xml error : this function is not supported by the hypervisor : disk bus 'ide' cannot behotplugged |
原因是ide驱动的磁盘不支持热插拔,需要使用 SCSI
更多推荐
所有评论(0)