在2010年4月发布的RHEL6.0版本中,去掉了XEN,这也许是第一个不包含Xen Hypervisor的知名linux发行版。KVM是指基于Linux内核的虚拟机(Kernel-base Virtual Machine),增加到Linux内核是Linux发展的一个重要里程碑,这也是第一个整合到Linux主线内核的虚拟化技术。在KVM模型中,每一个虚拟机都是一个由Linux调度程序管理的标准进程,你可以在用户空间启动客户机操作系统,一个普通的Linux进程有两种运行模式:内核和用户,KVM增加了第三种模式:客户模式(有自己的内核和用户模式)。
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/images/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
image: centos.img
file format: raw
virtual size: 10G (10737418240 bytes)
disk size: 1.4G
1
、可以通过
virt-viewer
查看安装状态:
[root@kvm virtual]# virt-viewer name
2
、使用
virt-install
工具安装虚拟机后,在目录
/etc/libvirt/qemu/
下生成
[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
附一
:
其他问题
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/images/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 images]# virsh save --bypass-cache RedHat /var/lib/libvirt/images/test.img --running
上面这个命令将
RedHat
的当前状态保存到
/opt/vm2_save
文件中,这个文件我看了一下,
597M.
--running
参数表示下次
restore
回来的时候能够自动启动
RedHat
这个命令会导致
RedHat
被关闭。
现在还原:必须先关闭虚拟机
[root@kvm images]# virsh shutdown RedHat
[root@kvm images]# virsh restore /var/lib/libvirt/images/test.img --bypass-cache --running
(还原时不要指定虚拟机名称)