1 KVM 虚拟机的管理工具
准确的来说,KVM仅仅是Linux内核的一个模块,管理和创建完整的KVM虚拟机,需要更多的辅助工具。
QEMU-KVM:在Linux系统中,首先我们可以用modprobe命令加载KVM模块,如果用RPM安装KVM软件包,系统会在启动时自动加载模块,QEMU是一个强大的虚拟软件,它可以虚拟不同的构架
Virt-manager:尽管QEMU-KVM工具可以创建和管理KVM虚拟机,RedHat 为KVM开发了更多的辅助工具,比如 libvirt libguestfs等,原因是QEMU工具效率不高,不易于使用。
2 、安装配置 KVM 相关软件
2.1系统要求:
处理器需求:需要一台可以运行最新linux内核的Intel处理器(含VT虚拟化技术)或AMD处理器(含SVM安全虚拟机技术的AMD处理器,也叫AMD-V)
[root@kvm ~]# cat /etc/redhat-release
CentOS release 6.3 (Final)
2.2检查CPU:
[root@kvm ~]# egrep 'vmx|svm'   --color=always/proc/cpuinfo
如果输出的结果包含VMX,它是Intel处理器虚拟机技术标志:如果包含SVM,它是AMD处理器虚拟机技术的标志,如果你什么都没有得到,那应你的系统并没有支持虚拟化的处理,不能使用KVM,另处linux发行版本必须在64bit环境中才能使用KVM。
3 、安装 centos 6.2 后下载 163 源配置文件
http://mirrors.163.com/.help/CentOS6-Base-163.repo
# cd /etc/yum.repos.d/  #进入源目录
# cp CentOS-Base.repo CentOS-Base.repo.bak #备份源文件
用下载的163源配置文件替换CentOS-Base.repo文件内容
# yum update 系统升级
如果不提示错误,CentOS-Base.repo文件中
gpgcheck=0
4 、安装 KVM

 

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

 

[root@kvm ~]#vi /etc/sysconfig/selinux

 

SELINUX=disabled
[root@kvm ~]#reboot
5 、重启后确认 libvirtd 是否正常启动、重启。
[root@kvm ~]# /etc/init.d/libvirtd restart

 

Stopping libvirtd daemon:                               [FAILED]
Starting libvirtd daemon:                                [  OK  ]
6 、检查 KVM 是否加载成功
显示结果如下表示kvm模块已经加载,如果没有输出信息,则表示没有加载成功:
[root@kvm yum.repos.d]# lsmod | grep kvm
kvm_intel              52570  6
kvm                   314739  1 kvm_intel
7 、检查 KVM 是否成功安装
[root@kvm ~]# virsh  list   --all (--all关闭的也会显示)
Id    名称                         状态
----------------------------------------------------
 1     Win7                           running
 2     RedHat                         running
8 、各版本查询
[root@kvm ~]#  kvm --version
QEMU PC emulator version 0.12.1 (qemu-kvm-0.12.1.2), Copyright (c) 2003-2008 FabriceBellard
[root@kvm ~]# virt-install  --version
0.600.0
[root@kvm ~]# virsh --version
0.9.10
9 、修改 qemu.conf 配置

 

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

 

vnc_listen = "0.0.0.0"修改vnc监听端口
 
二、配置网络桥接
http://www.techotopia.com/index.php/Creating_an_RHEL_6_KVM_Networked_Bridge_Interface
已安装bridge-utils,添加修改配置文件来的更简单。以下是实际配置文件,eth0为物理网口,br0为桥接网口。
1 、安装 tunctl
# yum install -y tunctl
2 、禁用网络管理器:
# chkconfig NetworkManager off   和桥接有冲突,要关闭
# service  NetworkManager stop
3 、修改 eth0 为物理网口, br0 为桥接网口配置文件:
[root@CY-S01 network-scripts]# cat ifcfg-br0
DEVICE="br0"
TYPE="Bridge"
ONBOOT="yes"
BOOTPROTO=static

 

IPADDR=192.168.50.190

 

PREFIX=24

 

GATEWAY=192.168.50.1

 

DNS1=8.8.8.8

 

DELAY=0 

 

 

 

[root@CY-S01 network-scripts]#cat ifcfg-eth0

 

DEVICE="eth0"

 

NM_CONTROLLED="yes"
ONBOOT=yes
TYPE=Ethernet
BRIDGE="br0"
BOOTPROTO=none
IPADDR=192.168.50.190
PREFIX=24
GATEWAY=192.168.50.1
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
DNS1=202.106.46.151
HWADDR=00:1E:67:07:EC:30
[root@CY-S01 network-scripts]#
4 、最后重启网络
[root@CY-S01 network-scripts]# service network restart
5 、查看桥接网络
[root@CY-S01 network-scripts]# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.0025901b11a2       no              eth0
                                                        vnet0
virbr0          8000.525400aba808       yes             virbr0-nic
 
三、使用 virt-install 工具安装 guest 系统
[root@kvm /]# virt-install --name=qxm  --ram 1024 --vcpus=2
> --disk path=/var/lib/libvirt/p_w_picpaths/qxm.img,size=20  --accelerate
> --cdrom /mnt/cn_windows_7_ultimate_with_sp1_x86_dvd_u_677408.iso
> --graphics vnc,password=123456,port=5920,  --network bridge=br0  --force  --autostart
使用virt-install 工具,工具自动创建磁盘,默认是raw格式。
[root@CY-S01 vms]# qemu-img info centos.img
p_w_picpath: centos.img
file format:  raw
virtual size: 10G (10737418240 bytes)
disk size: 1.4G
1 、可以通过 virt-viewer 查看安装状态:
[root@kvm virtual]# virt-viewer name

 

 

[root@kvm virtual]# virt-viewer name
2 、使用 virt-install 工具安装虚拟机后,在目录 /etc/libvirt/qemu/ 下生成 xml 配置文件。
[root@kvm ~]# cd /etc/libvirt/qemu
[root@kvm ~]# cat centos.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'/>                                  桥接到哪一个接口
    </domain>
3 、使用 virsh 工具管理生成的虚拟机
A、[root@kvm ~]#  virsh start centos            启动虚拟机 reboot  start  shutdown
B、[root@kvm ~]# virsh list                      列出当前运行的虚拟机
Id    Name                           State
----------------------------------------------------
1     centos                         running
3     centos6332                     running
C、[root@kvm ~]# ll  /var/lib/libvirt/qemu
total 12
srwxr-xr-x 1 root root    0 Aug 22 09:53 centos.monitor
这里的文件,是libvirtd在重启后,虚拟机也随着自动重启。
D、动态查询kvm资源占用情况,每一台VM,对应一个qemu-kvm进程
[root@CY-S01 vms]#  top -d 1 | grep kvm

4 、截取的 kvm 进程信息
[root@kvm ~]#  ps -aux | grep  kvm
<!--[if !supportLineBreakNewLine]-->
<!--[endif]-->
附一 其他问题
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@kvm qemu]# virsh autostart Winxp
5、克隆KVM虚拟机:
[root@kvm ~]# virt-clone -o Winxp -n winxpclong -f /var/lib/libvirt/p_w_picpaths/winxpclong.img
(-o  原始客体的名称,-n新客户端的名称,-f作为新客户端磁盘映像的新文件)
6、虚拟机意外关机报下述错误:
[root@kvm 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@kvm p_w_picpaths]# virsh  save  --bypass-cache RedHat  /var/lib/libvirt/p_w_picpaths/test.img  --running
上面这个命令将RedHat的当前状态保存到/opt/vm2_save文件中,这个文件我看了一下,597M.
--running参数表示下次restore回来的时候能够自动启动RedHat
这个命令会导致RedHat被关闭。
 
现在还原:必须先关闭虚拟机
[root@kvm p_w_picpaths]# virsh shutdown RedHat
[root@kvm p_w_picpaths]# virsh restore /var/lib/libvirt/p_w_picpaths/test.img --bypass-cache --running (还原时不要指定虚拟机名称)