Centos 6.5_64 KVM虚拟化

     KVM的软件很好安装,只是想顺利正常的使用估计要费一点事,我在创建虚拟机的时候,出现这样那样的错误,开始是创建虚拟机一直不成功,看了网上的别人的资料,好像网上的资料都一样似得,大同小异。最后还是自己琢磨着解决了问题,后来就是创建成功了安装虚拟机出错,反正是费了一点事,最后问题都解决了,安装的虚拟机配上IP地址也测试成功了。至于遇到的问题,要亲自操作一下,分析下报出的错,对今后工作中就会有很大的帮助,对了查看日志也会对排除错误有很大的帮助。

 准备工作:

     1、关闭防火墙或者开启防火墙

     2、关闭selinux

     3、开启CPU虚拟化

 主机网卡设置:

     1、eth0桥接br0,ip地址为10.11.22.189,用于连接外网

     2、eth1桥接br1,ip地址为192.168.100.100,用于连接内网,NAT的方式在组后有说明。

 准备工作做好后就可以操作安装:


    [root@leamon ~]# grep "flags" /proc/cpuinfo |uniq

            flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts mmx fxsr sse sse2 ss ht syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts xtopology tsc_reliable nonstop_tsc aperfmperf unfair_spinlock pni pclmulqdq vmx ssse3 cx16 pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm ida arat epb pln pts dts tpr_shadow vnmi ept vpid fsgsbase smep

                #如果显示信息出现vmx字样就说明CPU支持虚拟化。

    [root@leamon ~]# yum -y install kvm virt-* libvirts bridge-utils qemu-img avahi

            kvm 软件包。kvm 软件包中含有 KVM 内核模块,它可在默认 Linux 内核中提供 KVM 管理程序。

            libvirts                  安装虚拟机管理工具,使用virsh 等命令来管理和控制虚拟机

            bridge-utils              安装网络支持,设置桥接

            virt-*                    创建、克隆虚拟机等命令,以及图形化管理工具virt-manager

            qemu-img                  安装qemu 组件,使用qemu 命令来创建磁盘等

    [root@leamon ~]# modprobe kvm-intel     #加载KVM内核

    [root@leamon ~]# lsmod |grep kvm        #查看模块是否加载成功

            kvm_intel              54285  0 

            kvm                   333172  1 kvm_intel

    [root@leamon ~]# reboot

    [root@leamon ~]# lsmod |grep kvm       #重启后再次查看是否加载成功

            kvm_intel              54285  0 

            kvm                   333172  1 kvm_intel

    [root@leamon ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0   #配置网卡为bridge桥接模式        

            HWADDR=00:0C:29:FA:EE:2C

            TYPE=Ethernet

            UUID=5a5e60a7-eb49-47e3-9e29-8251635005be

            ONBOOT=yes

            NM_CONTROLLED=yes

            BRIDGE=br0                                       #这里一定要改               

            BOOTPROTO=static

    [root@leamon ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0    #创建bridge网卡

            DEVICE=br0           #设备名字要改成br0

            TYPE=Bridge          #设备类型改成Bridge

            UUID=5a5e60a7-eb49-47e3-9e29-8251635005be

            ONBOOT=yes

            NM_CONTROLLED=yes

            BOOTPROTO=static

            NETMASK=255.255.255.0

            IPADDR=10.11.22.189

            GATEWAY=10.11.22.1

            DNS1=202.96.128.86

    [root@leamon ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1   #修改方法同上

            DEVICE=eth1

            HWADDR=00:0C:29:FA:EE:36

            TYPE=Ethernet

            UUID=6003fe22-4d48-4a80-ba1f-b0464a5fe479

            ONBOOT=yes

            NM_CONTROLLED=yes

            BOOTPROTO=static

            BRIDGE=br1

    [root@leamon ~]# vim /etc/sysconfig/network-scripts/ifcfg-br1

            DEVICE=br1

            HWADDR=00:0C:29:FA:EE:36

            TYPE=Bridge

            UUID=6003fe22-4d48-4a80-ba1f-b0464a5fe479

            ONBOOT=yes

            NM_CONTROLLED=yes

            BOOTPROTO=static

            IPADDR=192.168.100.100

            NETMASK=255.255.255.0

    [root@leamon ~]# service network restart              #重启网络服务

            正在关闭接口 br0:                                         [确定]

            正在关闭接口 eth0:                                        [确定]

            关闭环回接口:                                             [确定]

            弹出环回接口:                                             [确定]

            弹出界面 eth0:                                            [确定]

            弹出界面 eth1:                                            [确定]

            弹出界面 br0: Determining if ip address 10.11.22.189 is already in use for device br0...

                                                                       [确定]

            弹出界面 br1: Determining if ip address 192.168.100.100 is already in use for device br1...

                                                                       [确定]

    [root@leamon ~]# ifconfig                            #查看网卡信息

            br0       Link encap:Ethernet  HWaddr 00:0C:29:FA:EE:2C  

                      inet addr:10.11.22.189  Bcast:10.11.22.255  Mask:255.255.255.0

                      inet6 addr: fd2f:ce52:41eb:0:20c:29ff:fefa:ee2c/64 Scope:Global

                      inet6 addr: fe80::20c:29ff:fefa:ee2c/64 Scope:Link

                      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

                      RX packets:30912 errors:0 dropped:0 overruns:0 frame:0

                      TX packets:5499 errors:0 dropped:0 overruns:0 carrier:0

                      collisions:0 txqueuelen:0 

                      RX bytes:1923920 (1.8 MiB)  TX bytes:4992638 (4.7 MiB)


            br1       Link encap:Ethernet  HWaddr 00:0C:29:FA:EE:36  

                      inet addr:192.168.100.100  Bcast:192.168.100.255  Mask:255.255.255.0

                      inet6 addr: fd2f:ce52:41eb:0:20c:29ff:fefa:ee36/64 Scope:Global

                      inet6 addr: fe80::20c:29ff:fefa:ee36/64 Scope:Link

                      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

                      RX packets:25296 errors:0 dropped:0 overruns:0 frame:0

                      TX packets:40 errors:0 dropped:0 overruns:0 carrier:0

                      collisions:0 txqueuelen:0 

                      RX bytes:1625868 (1.5 MiB)  TX bytes:4631 (4.5 KiB)


            eth0      Link encap:Ethernet  HWaddr 00:0C:29:FA:EE:2C  

                      inet6 addr: fe80::20c:29ff:fefa:ee2c/64 Scope:Link

                      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

                      RX packets:61129 errors:0 dropped:0 overruns:0 frame:0

                      TX packets:8082 errors:0 dropped:0 overruns:0 carrier:0

                      collisions:0 txqueuelen:1000 

                      RX bytes:13445644 (12.8 MiB)  TX bytes:5133092 (4.8 MiB)


            eth1      Link encap:Ethernet  HWaddr 00:0C:29:FA:EE:36  

                      inet6 addr: fe80::20c:29ff:fefa:ee36/64 Scope:Link

                      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

                      RX packets:69010 errors:0 dropped:0 overruns:0 frame:0

                      TX packets:45 errors:0 dropped:0 overruns:0 carrier:0

                      collisions:0 txqueuelen:1000 

                      RX bytes:18577753 (17.7 MiB)  TX bytes:4989 (4.8 KiB)


            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:0 errors:0 dropped:0 overruns:0 frame:0

                      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

                      collisions:0 txqueuelen:0 

                      RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)


            virbr0    Link encap:Ethernet  HWaddr 52:54:00:01:81:A8  

                      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:11 errors:0 dropped:0 overruns:0 carrier:0

                      collisions:0 txqueuelen:0 

                      RX bytes:0 (0.0 b)  TX bytes:2474 (2.4 KiB)


            vnet0     Link encap:Ethernet  HWaddr FE:54:00:20:AD:8E  

                      inet6 addr: fe80::fc54:ff:fe20:ad8e/64 Scope:Link

                      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

                      RX packets:0 errors:0 dropped:0 overruns:0 frame:0

                      TX packets:0 errors:0 dropped:0 overruns:1 carrier:0

                      collisions:0 txqueuelen:500 

                      RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)


            vnet1     Link encap:Ethernet  HWaddr FE:54:00:46:97:BA  

                      inet6 addr: fe80::fc54:ff:fe46:97ba/64 Scope:Link

                      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

                      RX packets:0 errors:0 dropped:0 overruns:0 frame:0

                      TX packets:0 errors:0 dropped:0 overruns:1 carrier:0

                      collisions:0 txqueuelen:500 

                      RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

    [root@leamon ~]# brctl show         #查看桥接得到信息

            bridge name     bridge id               STP enabled     interfaces

            br0             8000.000c29faee2c       no              eth0

            br1             8000.000c29faee36       no              eth1

            virbr0          8000.5254000181a8       yes             virbr0-nic

    [root@leamon ~]# cp /etc/libvirt/qemu.conf /etc/libvirt/qemu.conf.panglu-$(date +%F)

    [root@leamon ~]# vi /etc/libvirt/qemu.conf      #配置文件

            # Master configuration file for the QEMU driver.

            # All settings described here are optional - if omitted, sensible

            # defaults are used.


            # VNC is configured to listen on 127.0.0.1 by default.

            # To make it listen on all public interfaces, uncomment

            # this next option.

            #

            # NB, strong recommendation to enable TLS + x509 certificate

            # verification when allowing public access

            #

            vnc_listen = "0.0.0.0               #只修改这一行,将前面的#号去掉即可,开起VNC功能

    [root@leamon ~]# service messagebus start   #启动服务

            启动系统消息总线:                                         [确定]

    [root@leamon ~]# service avahi-daemon start

            启动 Avahi 守护进程...                                     [确定]

    [root@leamon ~]# service libvirtd start

            启动 libvirtd 守护进程:                                   [确定]

    [root@leamon ~]# chkconfig messagebus on

    [root@leamon ~]# chkconfig avahi-daemon on

    [root@leamon ~]# chkconfig libvirtd on

    [root@leamon ~]# chkconfig --list|egrep 'messagebus|avahi-daemon|libvirtd'

            avahi-daemon    0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭

            libvirtd        0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭

            messagebus      0:关闭  1:关闭  2:启用  3:启用  4:启用  5:启用  6:关闭

    [root@leamon ~]# mkdir -p /data/vmdisk    #创建存放磁盘文件目录

    [root@leamon ~]# mkdir /iso               #创建光盘镜像存放目录

    [root@leamon ~]# dd if=/dev/cdrom of=/iso/centos6.5_64.iso    #我是直接拷贝光驱中光盘的镜像

    [root@leamon ~]# qemu-img create -f qcow2 -o preallocation=metadata /data/vmdisk/leamon.qcow2 10G  

                                     #创建一个名字为leamon1.qcow2大小为10G的磁盘,qcow2是模式

            Formatting '/data/vmdisk/leamon.qcow2', fmt=qcow2 size=10737418240 encryption=off                       cluster_size=65536 preallocation='metadata'

    [root@leamon ~]# virt-install --name leamon1 --ram 512 --vcpus 1 --os-type linux --os-variant rhel6                  --disk path=/data/vmdisk/leamon.qcow2 --network bridge:br0,model=virtio --network                        bridge:br1,model=virtio --cdrom /iso/centos6.5_64.iso --accelerate -v --vnc --                          vncport=5990

                        #命令参数解析

                           --name    给虚拟机起个名字

                           --ram     分配给虚拟机的内存,单位MB

                           --vcpus   分配给虚拟机的cpu 个数

                           --disk    指定虚拟机安装文件路径,如果虚拟机使用lvm分区,这里就指向到lvm的分区就行

                           --network bridge 指定桥接网卡

                           --os-type=linux 要安装的操作系统类型,例如:'linux'、'unix'、'windows'

                           --os-variant=rhel6 操作系统版本

                           --accelerate 表示使用内核加速功能

                           --cdrom 指定磁盘镜像文件的全路径

                           --vnc   表示可以用vnc 进行连接配置

                           --vncport 表示vnc 的端口,-1 表示随机生成端口

                           -d      打印调试信息到终端(安装过程)


            开始安装......

            创建域......                                                     |    0 B     00:01     

            无法打开显示:

            运行 'virt-viewer --help' 来查看可用命令行选项的完整列表

            域安装仍在进行。您可以重新连接

            到控制台以便完成安装进程。

        注意:#出现以上信息就可以用VNC连接安装操作系统了。

    [root@leamon ~]# virsh list --all                     #查看虚拟机的运行状态

            Id    名称                           状态

            ----------------------------------------------------

            -     leamon1                        关闭

    [root@leamon ~]# virsh start leamon1                  #启动虚拟机

            域 leamon2 已开始

    [root@leamon ~]# virsh destroy leamon1                #删除虚拟机

            域 leamon1 被删除

    [root@leamon qemu]# vim  /etc/libvirt/qemu/leamon1.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 edit leamon1

            or other application using the libvirt API.

            -->


        <domain type='kvm'>

          <name>leamon1</name>         #此处为虚拟机名字

          <uuid>8ceea873-21ae-2a03-a7c7-647e762f864f</uuid>   #uuid标示

          <memory unit='KiB'>1024000</memory>                 #此处为内存

          <currentMemory unit='KiB'>1024000</currentMemory>

          <vcpu placement='static'>1</vcpu>      #此处为cpu核数

        <os>

          <type arch='x86_64' machine='rhel6.6.0'>hvm</type>

          <boot dev='hd'/>     #此处为启动项目,若想从光盘启动可设置为<boot dev='cdrom'/>

        </os>

        <features>

        <acpi/>

        <apic/>

        <pae/>

        </features>

        <clock offset='utc'/>

        <on_poweroff>destroy</on_poweroff>     #此处为关机命令,使用 virsh destroy leamon1 关闭虚拟机

        <on_reboot>restart</on_reboot>

        <on_crash>restart</on_crash>

        <devices>

        <emulator>/usr/libexec/qemu-kvm</emulator>

        <disk type='file' device='disk'>       #此处为硬盘信息

          <driver name='qemu' type='raw' cache='none'/>

          <source file='/data/vmdisk/leamon.qcow3'/>

          <target dev='vda' bus='virtio'/>

          <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>

        </disk>

        <disk type='block' device='cdrom'>     #此处为cdrom信息,可修改为iso的路径

          <driver name='qemu' type='raw'/>

          <target dev='hdc' bus='ide'/>

          <readonly/>

        <address type='drive' controller='0' bus='1' target='0' unit='0'/>

        </disk>

        <controller type='usb' index='0' model='ich9-ehci1'>    #此处为usb接口信息

          <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>

        </controller>

        <controller type='usb' index='0' model='ich9-uhci1'>

          <master startport='0'/>

          <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>

        </controller>

        <controller type='usb' index='0' model='ich9-uhci2'>

          <master startport='2'/>

          <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>

        </controller>

        <controller type='usb' index='0' model='ich9-uhci3'>

          <master startport='4'/>

          <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>

        </controller>

        <controller type='ide' index='0'>

          <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>

        </controller>

        <interface type='bridge'>                #此处为网卡1信息,使用bridge桥接模式连接virbr0联网

          <mac address='52:54:00:20:ad:8e'/>

          <source bridge='br0'/>

          <model type='virtio'/>

          <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>

        </interface>

        <interface type='bridge'>                #此处为网卡2信息,使用bridge桥接方式到br1连接内网

          <mac address='52:54:00:46:97:ba'/>

          <source bridge='br1'/>

          <model type='virtio'/>

          <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>

        </interface>

                #若要添加网卡可新加配置,注意修改mac地址

        <serial type='pty'>

          <target port='0'/>

        </serial>

        <console type='pty'>

          <target type='serial' port='0'/>

        </console>

        <input type='tablet' bus='usb'/>

        <input type='mouse' bus='ps2'/>

        <graphics type='vnc' port='5988' autoport='no'/>   #此处为VNC连接端口,我的是5988,克隆的主机要改此端口

        <video>

          <model type='cirrus' vram='9216' heads='1'/>

          <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>

        </video>

        <memballoon model='virtio'>

          <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>

        </memballoon>

     </devices>

   </domain>


说明:修改配置的时候需要关闭KVM virsh destroy leamon1,使用virsh define leamon1.xml使配置生效,使用virsh start leamon1启动虚拟机,如果使用NAT的方式一定要确认开启转发功能,

    [root@leamon qemu]# more /proc/sys/net/ipv4/ip_forward

       1

克隆虚拟机的话要关闭模板机后克隆,然后手动更改xml配置文件的vnc端口,重启libvirtd服务使更改的端口生效,最简单的就是直接复制模板机的文件进行克隆,

    [root@leamon ~]#cp /data/vmdisk/leamon.qcow2 /date/vmdisk/leamon-3.qcow2

    [root@leamon ~]#cp /etc/libvirt/qemu/leamon1.xml /etc/libvirt/qemu/leamon-3.xml

              #复制完了虚拟机的文件后要修改相应的参数,要不然会报错,UUID可以任意修改,保证唯一;MAC地址可以随意修改,也要保证唯一;修改VNC端口,别冲突就行;还有虚拟磁盘信息及主机名字。

    [root@leamon ~]# virsh define leamon-3.xml       #创建虚拟机

    [root@leamon ~]# virsh start leamon-3            #启动虚拟机

    [root@leamon ~]#virsh autostart leamon1          #设置虚拟机自启动