一,什么是KVM
KVM包括很多部件:首先,它是一个Linux内核模块(现在包括在主线中)用于转换处理器到一种新的用户 (guset) 模式。用户模式有自己的ring状态集合,但是特权ring0的指令会陷入到管理器(hypervisor)的代码。由于这是一个新的处理器执行模型,代码不需要任何的改动。 除了处理器状态转换,这个内核模块同样处理很小一部分低层次的模拟,比如MMU注册(用于管理VM)和一部分PCI模拟的硬件。 在可预见的未来,Qemu团队专注于硬件模拟和可移植性,同时KVM团队专注于内核模块(如果某些部分确实有性能提升的话,KVM会将一小部分模拟代码移进来)和与剩下的用户空间代码的交互。 kvm-qemu可执行程序像普通Qemu一样:分配RAM,加载代码,不同于重新编译或者调用calling KQemu,它创建了一个线程(这个很重要);这个线程调用KVM内核模块去切换到用户模式,并且去执行VM代码。当遇到一个特权指令,它从新切换会KVM内核模块,该内核模块在需要的时候,像Qemu线程发信号去处理大部分的硬件仿真。 这个体系结构一个比较巧妙的一个地方就是客户代码被模拟在一个posix线程,这允许你使用通常Linux工具管理。如果你需要一个有2或者4核的虚拟机,kvm-qemu创建2或者4个线程,每个线程调用KVM内核模块并开始执行。并发性(若果你有足够多的真实核)或者调度(如果你不管)是被通用的Linux调度器,这个使得KVM代码量十分的小 当一起工作的时候,KVM管理CPU和MEM的访问,QEMU仿真硬件资源(硬盘,声卡,USB,等等)当QEMU单独运行时,QEMU同时模拟CPU和硬件。
二,安装配置KVM
# yum -y install kvm python-virtinst libvirt bridge-utils virt-manager qemu-kvm-tools virt-viewer virt-v2v qemu-kvm tunctl [root@localhost ~]#vim /etc/sysconfig/selinux //关闭selinux SELINUX=disabled [root@localhost ~]#reboot [root@localhost ~]# cat /etc/redhat-release CentOS release 6.5 (Final) //centos 6.5
三,启动libvirtd
[root@localhost ~]# /etc/init.d/libvirtd start //启动 [root@localhost ~]# ps -e|grep libvirtd //查看是否启动 19458 ? 00:00:01 libvirtd
四,查看kvm模块是否正确加载
[root@localhost ~]# lsmod |grep kvm kvm_intel 54285 0 kvm 333172 1 kvm_intel
五,配置网络桥接
[root@localhost network-scripts]# cat ifcfg-eth0 |awk '{if($0 !~ /^$/ && $0 !~ /^#/) {print $0}}' DEVICE=eth0 TYPE=Ethernet ONBOOT=yes BOOTPROTO=none BRIDGE=br0 IPV6INIT=no HWADDR=F8:BC:12:60:99:86 [root@localhost network-scripts]# cat ifcfg-br0 |awk '{if($0 !~ /^$/ && $0 !~ /^#/) {print $0}}' DEVICE=br0 TYPE=Bridge ONBOOT=yes BOOTPROTO=static IPADDR=192.168.10.103 GATEWAY=192.168.10.1 NETMASK=255.255.255.0 DNS1=192.168.10.1 IPV6INIT=no DELAY=0
重启网络,发现报以下错误:
[root@localhost network-scripts]# /etc/init.d/network start 弹出环回接口: [确定] 弹出界面 eth0: 错误:激活连接失败:Master connection not found or invalid [失败] 弹出界面 br0: 错误:激活连接失败:Failed to determine connection's virtual interface name [失败] RTNETLINK answers: File exists RTNETLINK answers: File exists RTNETLINK answers: File exists
解决办法:
[root@localhost rules.d]# service NetworkManager stop //这个关闭掉就行 停止 NetworkManager 守护进程: [确定] [root@localhost rules.d]# service network restart 正在关闭接口 br0: [确定] 正在关闭接口 eth0: [确定] 关闭环回接口: [确定] 弹出环回接口: [确定] 弹出界面 eth0: [确定] 弹出界面 br0: Determining if ip address 192.168.10.103 is already in use for device br0... [确定]
如果以下内容就说明配置成功了:
[root@localhost network-scripts]# ifconfig br0 Link encap:Ethernet HWaddr F8:BC:12:60:99:86 //有这个就OK inet addr:192.168.10.103 Bcast:192.168.10.255 Mask:255.255.255.0 inet6 addr: fe80::fabc:12ff:fe60:9986/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:36416 errors:0 dropped:0 overruns:0 frame:0 TX packets:28648 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:13151508 (12.5 MiB) TX bytes:5962449 (5.6 MiB) eth0 Link encap:Ethernet HWaddr F8:BC:12:60:99:86 inet6 addr: fe80::fabc:12ff:fe60:9986/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1360857 errors:0 dropped:0 overruns:0 frame:0 TX packets:902173 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:1913592871 (1.7 GiB) TX bytes:72387220 (69.0 MiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:176842 errors:0 dropped:0 overruns:0 frame:0 TX packets:176842 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:880282316 (839.5 MiB) TX bytes:880282316 (839.5 MiB) virbr0 Link encap:Ethernet HWaddr 52:54:00:1A:B6:F1 inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:37 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 b) TX bytes:4651 (4.5 KiB) [root@localhost network-scripts]# brctl show bridge name bridge id STP enabled interfaces br0 8000.f8bc12609986 no eth0 //有这个就OK virbr0 8000.5254001ab6f1 yes virbr0-nic
六,用virt-install生成.img文件
# virt-install --name=ubuntu1 --ram 1024 --vcpus=1 --disk path=/root/ubuntu1.img,size=10 --accelerate --cdrom /root/ubuntu-14.04-desktop-amd64.iso --graphics vnc,port=5920 --network bridge=br0
如果报以下错误:
could not open disk image : Permission denied
解决方法:
[root@localhost ~]# cat /etc/libvirt/qemu.conf |awk '{if($0 !~ /^$/ && $0 !~ /^#/) {print $0}}' vnc_listen = "0.0.0.0" user = "root" //去掉注释 group = "root" //去掉注释 dynamic_ownership = 0 //去掉注释,把1改为0
这一步做完,系统文件就好了。 七,启动虚拟机 如果报以下错误
[root@localhost ~]# virsh start ubuntu1 错误:域已经活跃
解决办法:
[root@localhost ~]# pkill qemu-kvm [root@localhost ~]# virsh start ubuntu1 域 ubuntu1 已开始 [root@localhost ~]# virt-viewer ubuntu1 //进入图形界面
转载请注明:爱开源 » centos kvm qemu 虚拟机 安装 配置 详解