1.安装和配置

使用随系统自带的KVM


sudo apt-get installqemu-kvm 安装此组件,客户机驱动:Linux客户机的驱动包含在内核中;Windows客户机的驱动需要下载。

手工构建KVM

安装QEMU的依赖包:

sudo apt-get install gcc libsdl1.2-dev zlib1g-dev libasound2-dev linux-kernel-headers   pkg-config libgnutls-dev libpci-dev


注意:2.6.29以上版本的内核,可以和任何版本的qemu-kvm搭配使用

构建和安装用户空间组件


tar xzf qemu-kvm-release.tar.gz
cd qemu-kvm-release
./configure --prefix=/usr/local/kvm
make
sudo make install




构建和安装KVM内核模块


如果你使用旧版本内核,或者内核精简了KVM,则需要此步骤:

tar xjf kvm-kmod-release.tar.bz2
cd kvm-kmod-release 
./configure
make 
sudo make install



启用内核模块

# 对于Intel CPU
sudo /sbin/modprobe kvm-intel
# 对于AMD CPU
sudo /sbin/modprobe kvm-amd


第一台虚拟机


要创建虚拟机,首先要创建一个虚拟磁盘,然后从光驱启动此虚拟机:

mkdir -p ~/Vmware/KVM
 
# 以qcow2格式创建一个16G的虚拟磁盘,注意,默认不会预先分配空间
qemu-img create -f qcow2 ~/Vmware/KVM/centos7-base.img 16G
 
# 指定光盘镜像,从光驱启动虚拟机
# -hda 第一块硬盘的镜像
# -cdrom 光驱的镜像,你可以把宿主的/dev/cdrom传入,这样可以使用物理光驱
# -boot 指定启动顺序,d表示第一个光驱,c表示第一块硬盘
# -m 为虚拟机分配多少内存,默认单位M,默认128M
qemu-system-x86_64 -enable-kvm -hda ~/Vmware/KVM/centos7-base.img  -boot d -m 512
                   -cdrom ~/Software/OS/CentOS-7-x86_64-Minimal-1503-01.iso



上述命令执行完毕之后,会弹出一个窗口,该窗口相当于虚拟机的显示器。你可以在其中完成操作系统的安装。安装完毕后,执行下面的命令,即可启动虚拟机:

qemu-system-x86_64 -enable-kvm -hda ~/Vmware/KVM/centos7-base.img -m 512




配置CPU


使用选项  -cpu  选项可以选择客户机使用的CPU,执行  qemu-system-x86_64 -cpu help  可以列出QEMU支持的CPU名称、可用的CPUID标记。

你可以这样配置一个CPU:

-cpu SandyBridge,+erms,+smep,+fsgsbase,+pdpe1gb,+rdrand,+f16c,+osxsave,+dca,+pcid,+pdcm,\
     +xtpr,+tm2,+est,+smx,+vmx,+ds_cpl,+monitor,+dtes64,+pbe,+tm,+ht,+ss,+acpi,+ds,+vme


SMP配置


共享内存子系统以及总线结构。在PC机上QEMU最多可以模拟255个CPU。


你可以这样配置SMP:  -smp 1,sockets=1,cores=1,threads=1  。这个配置表示主板上有一个CPU插槽、1个CPU、每个CPU具有1核心、每个核心具有1个硬件线程(超线程)。



配置磁盘


你可以在宿主机上创建一个磁盘镜像文件,然后供客户机使用。客户机磁盘I/O都将针对此文件。镜像文件可以有几种格式。


Raw镜像


格式简单,性能较好。

你的文件系统(例如Ext3)必须支持稀疏文件(sparse file),才能避免不必要的磁盘空间占用。稀疏文件是一种高效使用磁盘空间的技术,当文件大小很大,而其绝大部分块都是空白(未使用)的时,可以基于文件元数据来表示那些空白的块(而不是真实的硬盘空间)。

创建Raw镜像:

qemu-img create -f raw hda.img 1G
 
# 查看镜像信息
qemu-img info hda.img 
# image: hda.img
# file format: raw
# virtual size: 1.0G (1073741824 bytes)
# disk size: 0



你也可以使用dd命令产生Raw镜像,例如:

# 产生非稀疏文件:块大小1MB,写入1024个块,虚拟大小1G,实际大小1G
dd if=/dev/zero of=hda.img bs=1024k count=1024
# 产生稀疏文件:块大小1MB,写入0个块,虚拟大小1G,实际大小0
dd if=/dev/zero of=hda.img bs=1024k count=0 seek=1024



创建qcow2镜像


你可以这样创建一个qcow2镜像:

qemu-img create -f qcow2 hda-back.img 16G



转为backing file


然后,在未来某个时刻把它作为backing file使用:

qemu-img create -f qcow2 -o backing_file=hda-back.img hda.img



压缩、加密和扩展


镜像hda.img在一开始是空白的,所有数据都是从hda-back.img中获取,一旦发生写入操作,hda.img就开始有数据而hda-base.img保持不变。

使用下面的命令可以压缩一个qcow2镜像:

qemu-img convert -c -f qcow2 -O qcow2 hda.img hda.compressed.img




使用下面的命令可以为一个qcow2镜像设加密:


qemu-img convert -o encryption -f qcow2 -O qcow2  hda.img hda.encrypted.img
# 提示输入密码



使用压缩镜像启动虚拟机时,必须在Monitor中输入密码才可以。

使用下面的命令,可以扩展一个qcow2镜像的大小:

qemu-img resize hda.img +10G


注意:扩大得到的空间,不会被分区或者格式化。



格式转换


你可以把一个镜像的格式在Raw和qcow2之间进行转换:



# 把Raw格式的hda.img转换为qcow2格式的hda.qcow2
qemu-img convert -f raw -O qcow2 hda.img hda.qcow2