QEMU是一个开源的虚拟化软件,能够用KVM来加速,是比较不错的虚拟化方案,在这里简单地记录下安装过程。
KVM需要CPU的支持才能使用(Intel VT或者AMD-V),用下面的命令检查CPU是否支持。如果不支持,检查下是否是主板没有开启。
$grep lvm /proc/cpuinfo $grep vmx /proc/cpuinfo
在fedora里可以直接从yum源安装qemu和kvm,建议使用最新版本的fedora,这样qemu和kvm的版本会比较新,本文的操作环境是在fedora 19。QEMU默认是不支持spice的,如果需要spice的支持,需要自己编译安装,在configure的时候加上--enable-spice选项,自己编译软件会遇到很多依赖问题,总结了一个qemu-spice的安装脚本,自动帮你安装需要的依赖,而且有USB重定向的支持。
$yum install qemu-kvm $modprobe kvm $lsmod | grep kvm
后边配置网络的时候需要一些工具。
$yum install bridge-utils $yum install tunctl $modprobe tun
创建一个虚拟磁盘镜像,作为虚拟机的磁盘,可以创建raw,cloop,qcow等格式,详细的介绍见这里。
$qemu-img create -f raw guestdisk.img 30G
$qemu-system-x86_64 -m 2048 -smp 2 -enable-kvm -drive file=guestdisk.img -cdrom yourISOname.iso -boot d
安装的时候可以直接从光驱读取安装文件,也可以先把光驱的文件拷贝到磁盘。
$dd if=/dev/cdrom of=yourISOname.iso
qemu的网络有多种模式,具体可以查看qemu man手册中的Network options, 这里使用的方式是创建一个网桥,然后通过tap设备来使虚拟机能够访问网络。总结的脚本如下。
#!/bin/sh #delete network device IP configuration sudo ifconfig p3p1 0.0.0.0 up promisc #add a bridge sudo brctl addbr br0 #bind interface with the bridge sudo brctl addif br0 p3p1 #set STP on sudo brctl stp br0 on #config bridge and start it sudo ifconfig br0 192.168.1.210 netmask 255.255.255.0 up #config route sudo route add default gw 192.168.1.1 echo "test local network 10sec later........." sleep 10s #test local network ping -c 3 www.baidu.com #close firewall service iptables stop
如果想要恢复到之前的网络配置,可以使用如下脚本。
#!/bin/sh sudo ifconfig br0 down #unbind network interface sudo brctl delif br0 p3p1 #delete bridge sudo brctl delbr br0 ifconfig p3p1 up echo "test local network.........." #test network ping -c 3 www.baidu.com
网络配置好之后(如果不需要网络,不用配置也可以)就可以启动虚拟机了。经过一段时间的使用,总结了下面的脚本。
#!/bin/sh switch=br0 tapdevice=$1 vncPort=$2 if [ -n $tapdevice ];then if [ ${tapdevice:0:3} = tap ];then #create a tap device /usr/bin/sudo /usr/sbin/tunctl -t $tapdevice /usr/bin/sudo /sbin/ip link set $tapdevice up sleep 0.5s #plug tap device into bridge /usr/bin/sudo /usr/sbin/brctl addif $switch $tapdevice else echo "Error: '$tapdevice' is not a tap device" exit 1 fi else echo "Error: no interface specified" exit 1 fi set -x qemu-system-x86_64 -enable-kvm -localtime -usb\ -m 2048\ -cpu host\ -smp 2\ -soundhw all\ -boot c\ -drive file=yourIMG.img -net nic,model=virtio \ -net tap,ifname=$tapdevice,vhost=on,vhostforce=on,vnet_hdr=on,script=no,downscript=no\ -usbdevice tablet \ -sdl \ -vnc :$vncPort #pull out tap device form bridge sudo brctl delif $switch $tapdevice #delete tap sudo tunctl -d $tapdevice
将脚本保存后,在terminal启动脚本即可。客户机的网络配置可以选择dhcp或者配置静态IP。
$./script.sh tap0 0