1.首先检查系统是否支持kvm,有两个先决条件

a、系统是x86的,通过命令

[root@localhost ~]# uname -a
 Linux localhost.localdomain 2.6.32-504.el6.x86_64 #1 SMP Wed Oct 15 04:27:16 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux




b、CPU 支持虚拟化技术

[root@localhost ~]# egrep 'vmx|svm' /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 pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm ida arat epb xsaveopt pln pts dts tpr_shadow vnmi flexpriority ept vpid fsgsbase bmi1 avx2 smep bmi2 erms invpcid


2、使用yum安装kvm,安装kvm内核

[root@localhost ~]# yum install -y qemu-kvm.x86_64 qemu-kvm-tools.x86_64  kvm python-virtinst bridge-utils virt-manager virt-viewer virt-v2v



安装virt管理工具

[root@localhost ~]# yum install libvirt.x86_64 libvirt-cim.x86_64 libvirt-client.x86_64 libvirt-java.noarch libvirt-python.x86_64 -y



加载kvm 内核

[root@localhost ~]# modprobe kvm
[root@localhost ~]# modprobe kvm-intel



查看内核是否开启

[root@localhost ~]# modprobe -ls | grep kvm
 kernel/arch/x86/kvm/kvm.ko
 kernel/arch/x86/kvm/kvm-intel.ko
 kernel/arch/x86/kvm/kvm-amd.ko



检查KVM是否成功安装

[root@localhost opt]# virsh list --all
  Id 名称 状态


----------------------------------------------------     #说明安装成功

确认libvirtd是否正常启动

[root@localhost opt]# /etc/init.d/libvirtd restart
 正在关闭 libvirtd 守护进程: [确定]
 启动 libvirtd 守护进程: [确定]



修改qemu.conf配置

[root@vfeelit ~]# vi /etc/libvirt/qemu.conf
vnc_listen = "0.0.0.0" #修改vnc监听端口

3、配置网络桥接,

先关闭 NetworkManager 。

[root@localhost ~]# chkconfig NetworkManager off

[root@localhost ~]# service NetworkManager stop



进入目录 /etc/sysconfig/network-scripts,复制一份原有的ifcfg-eth0 为 ifcfg-br0

[root@localhost ~]# cp /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-br0

[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0



修改ifcfg-br0,内容如下:

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0
 DEVICE="br0"
 BOOTPROTO=static
 ONBOOT="yes"
 TYPE="Bridge"
 IPADDR=192.168.16.212
 GATEWAY=192.168.16.1
 NETMASK=255.255.255.0
 DNS1=8.8.8.8
 DEFROUTE=yes



修改 ifcfg-eth0, 内容如下:

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
 DEVICE=eth0
 TYPE=Ethernet
 ONBOOT=yes
 NM_CONTROLLED=no
 BOOTPROTO=static
 BRIDGE="br0"
 DEFROUTE=yes
 IPV4_FAILURE_FATAL=yes




重启网络服务即可。

[root@localhost ~]# /etc/init.d/network restart
 正在关闭接口 br0: [确定]
 正在关闭接口 eth0: [确定]
 关闭环回接口: [确定]
 弹出环回接口: [确定]
 弹出界面 eth0: [确定]
 弹出界面 br0: Determining if ip address 192.168.16.212 is already in use for device br0...



4、使用virt-install 工具安装 guest 系统。

a、创建硬盘映像文件

使用 qemu-img 命令创建

[root@localhost ~]# qemu-img create -f raw /var/lib/libvirt/images/test.img 8G
 Formatting '/var/lib/libvirt/images/test.img', fmt=raw size=8589934592



或使用 dd 命令创建
[root@localhost ~]# dd bs=1M count=8096 if=/dev/zero of=/var/lib/libvirt/images/test.img
记录了8096+0 的读入
记录了8096+0 的写出
8489271296字节(8.5 GB)已复制,45.4226 秒,187 MB/秒

qemu-img 是创建是文件格式是稀疏文件,优点是速度超快,由于是稀疏文件,性能可能会比第二种略差,通过如下命令查看详情

[root@localhost ~]# qemu-img info /var/lib/libvirt/images/test.img
 image: /var/lib/libvirt/images/test.img
 file format: raw
 virtual size: 7.9G (8489271296 bytes)
 disk size: 7.9G



b、通过iso文件安装系统

[root@localhost opt]# virt-install --name=centos64 --ram 1024 --vcpus=2 --disk path=/var/lib/libvirt/images/test.img,size=10 --accelerate --cdrom /opt/rhel-server-6.6-x86_64-dvd.iso --graphics vnc,password=123456,port=5920 --network bridge=br0 --force --autostart



开始安装......
创建域...... | 0 B 00:00
无法打开显示:
运行 'virt-viewer --help' 来查看可用命令行选项的完整列表

域安装仍在进行。您可以重新连接
到控制台以便完成安装进程。

1 可以通过virt-viewer查看安装状态:

[root@vfeelit virtual]# virt-viewer name

2 使用virt-install 工具安装虚拟机后,在目录/etc/libvirt/qemu/下生成xml 配置文件。

<domain type='kvm'>                                        虚拟机类型
     <name>centos</name>                                    虚拟机名称
     <uuid>54da30ed-150d-514e-9803-4dc01bd50488</uuid>      uuid唯一标示
     <memory unit='KiB'>1048576</memory>                    指定虚拟机内存大小,给出了单位
     <vcpu placement='static'>2</vcpu>                      虚拟机占用虚拟cpu个数,这里指物理cpu的核心数量
     <os>
       <type arch='x86_64' machine='rhel6.3.0'>hvm</type>   指定虚拟系统架构
       <boot dev='hd'/>                                     启动类型,从硬盘启动
     </os>
     <devices>
       <emulator>/usr/libexec/qemu-kvm</emulator>           驱动程序,同上,使用的是qemu-kvm
       <disk type='file' device='disk'>                     指定磁盘类型
       <driver name='qemu' type='raw' cache='none'/>        指定磁盘格式,这里是raw,也支持qcow2.
       <source file='/home/vms/centos.img'/>                img文件路径
       <target dev='hda' bus='ide'/>                        磁盘文件标示,驱动类型
       <address type='drive' controller='0' bus='0' target='0' unit='0'/>
       <interface type='bridge'>
         <mac address='52:54:00:11:57:e6'/>                 自动生成,可以手动指定。
         <source bridge='br0'/>                             桥接到哪一个接口
       </interface>
     </devices>
 </domain>



3 使用virsh工具管理生成的虚拟机

[root@vfeelit ~]# virsh start centos64            启动虚拟机 reboot  start  shutdown
[root@vfeelit ~]# virsh list                      列出当前运行的虚拟机
 Id    Name                           State
 ----------------------------------------------------
 1     centos64                       running



其他问题
1、图形化配置:从菜单中启动,或者运行virt-manager进入图形管理界面,比较简单,不过img的位置需要注意一下,kvm安装后会有一个默认位置,不注意的话容易占满空间。或者直接硬盘分区时单独给/var分一个区。

2、虚拟机重新配置:
虚拟机的配置文件保存在/etc/libvirt/qemu目录下,扩展名是xml。修改相应的文件即可重新配置虚拟机

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

4、开机自动启动虚拟机:
[root@vfeelit qemu]# virsh autostart Winxp

5、克隆KVM虚拟机:
[root@vfeelit ~]# virt-clone -o Winxp -n winxpclong -f /var/lib/libvirt/images/winxpclong.img
(-o 原始客体的名称,-n新客户端的名称,-f作为新客户端磁盘映像的新文件)

6、虚拟机意外关机报下述错误:
[root@vfeelit qemu]# virsh start winxp
错误:开始域 winxp 失败
错误:Unable to read from monitor: Connection reset by peer
解决方法:virsh managedsave-remove winxp

Virsh语法参考:

Autostart                         自动开始一个域
Create                            从一个 XML 文件创建一个域
Define                            从一个 XML 文件定义(但不开始)一个域
edit                              编辑某个域的 XML 配置
shutdown                          关闭一个域
start                             开始一个(以前定义的)非活跃的域
reboot                            重新启动一个域
suspend                           挂起一个域
resume                            重新恢复一个域
vncdisplay                        vnc 显示

使用save来备份当前虚拟机的状态:
[root@vfeelit images]# virsh save –bypass-cache RedHat /var/lib/libvirt/images/test.img –running
上面这个命令将RedHat的当前状态保存到/opt/vm2_save文件中。–running参数表示下次restore回来的时候能够自动启动RedHat。
这个命令会导致RedHat被关闭。

现在还原:必须先关闭虚拟机

[root@vfeelit images]# virsh shutdown RedHat
 [root@vfeelit images]# virsh restore /var/lib/libvirt/images/test.img –bypass-cache –running (还原时不要指定虚拟机名称)