Debian Squeeze KVM虚拟机安装笔记(1):基础

基于内核的虚拟机KVM(Kernel-based Virtual Machine)是linux平台上的全虚拟化解决方案

KVM需要包含虚拟化支持的x86硬件,intel VT或者AMD-V。KVM使用修改后的QEMU作为前端工具,QEMU通过/dev/kvm设备与KVM交互。自kernel版本2.6.20 KVM随主线内核一起发行。

前提条件(prerequisite)

可以使用KVM的前提条件是CPU支持虚拟化技术,Intel VT或者AMD-V

1
$ egrep '(svmvmx)' /proc/cpuinfo

如果有输出则说明CPU支持硬件虚拟化,SVM(Secure Virtual Machine)是AMD CPU支持硬件虚拟化的标志,VMX是INTEL CPU支持硬件虚拟化的标志

KVM安装

1
$sudo apt-get insall qemu-kvm

从squeeze开始KVM的包名改为qemu-kvm,kvm只是个占位dummy包

创建vdisk

1
$qemu-img create -f qcow2 client.qcow2 60G

创建一个60G的qcow2格式的虚拟磁盘文件,更多参数见man qemu-img

桥接网络

KVM支持很多网络类型,但是使用最方便的还是桥接网络,设置桥接网络,系统中必须存在以下三个命令
/sbin/ip
/usr/sbin/brctl
/usr/sbin/tunctl
所以需要安装一下包

1
$sudo apt-get install bridge-utils uml-utilities

编辑/etc/network/interfaces文件增加网络桥,增加的网络桥接口名字为br0,将主机网络接口桥接到此网络桥
1 # This file describes the network interfaces available on your system
2 # and how to activate them. For more information, see interfaces(5).
3
4 # The loopback network interface
5 auto lo
6 iface lo inet loopback
7
8 # The primary network interface
9 #allow-hotplug eth0
10 #iface eth0 inet static
11 #   address 192.168.0.18
12 #   netmask 255.255.255.0
13 #   network 192.168.0.0
14 #   broadcast 192.168.0.255
15 #   gateway 192.168.0.1
16 #   # dns-* options are implemented by the resolvconf package, if installed
17 #   dns-nameservers 211.137.191.26
18 #   dns-search localdomain
19
20 auto bond0
21 iface bond0 inet manual
22 #    address 192.168.0.18
23 #    netmask 255.255.255.0
24 #    network 192.168.0.0
25 #    broadcast 192.168.0.255
26 #    gateway 192.168.0.1
27     slaves eth0 eth1
28     bond-mode balance-rr
29     bond-miimon 100
30
31 auto br0
32 iface br0 inet static
33     address 192.168.0.18
34     netmask 255.255.255.0
35     network 192.168.0.0
36     broadcast 192.168.0.255
37     gateway 192.168.0.1
38     bridge_ports    bond0
39     bridge_stp  off
40     bridge_maxwait  0
41     bridge_fd   0   
42
43 #auto tap0
44 #iface tap0 inet manual
45 #up ifconfig $IFACE 0.0.0.0 up
46 #down ifconfig $IFACE down
47 #tunctl_user yourusername

第38行 bridge_ports bond0,此处将主机的bonding接口bond0加入网络桥,如果没有网络接口聚合此处一般应为eth0
第47行将youeusername改为你登陆主机的用户名

使用桥接网络,客户机必须使用主机的一个tap设备将客户机的网络接口连接到主机的网络桥,tap设备可以用两种方式来设置

一种是静态方式,直接把tap设备的配置写道/etc/network/interfaces文件中,并将tap接口加入网络桥,将配置文件43-47行前的注释符#去掉,并将第38行改为如下
bridge_ports bond0 tap0
增加更多的tap接口依次类推

另一种为动态方式,网络配置文件中不写任何tap设备的配置,而由KVM的脚本/etc/kvm/kvm-ifup来动态完成tap接口的创建,以后创建客户机是会提到怎么用。

半虚拟化驱动Virtio

Virtio是KVM/Linux的I/O虚拟化框架,以增强KVM的IO效率,是与其他虚拟化平台的半虚拟化(Paravirtualized)类似的东西,主要应用于磁盘设备和网络接口设备。主流的linux发行版已经默认支持Virtio,如果客户机是linux则无需其他设置,直接可以使用Virtio设备,但是如果客户机是windows,则需要在客户机安装Virtio设备驱动,甚至在windows开始安装之前需要提前加载块设备驱动。windows Virtio驱动可从Fedora下载

如何安装客户虚拟机下篇再议。