原文地址:http://forum.ubuntu.org.cn/viewtopic.php?f=65&t=130210 

写写自己的一下心得,也算给自己留个笔记好查,若有不对之处,请指正。 

--------------------------------------- 
KVM官方地址: http://kvm.qumranet.com/kvmwiki 
KVM的Changelog: http://kvm.qumranet.com/kvmwiki/ChangeLog, 可以知道最新的版本是多少,做了那些改变。 
KVM下载地址在sourceforge.net上: http://sourceforge.net/project/showfile ... _id=180599 
KVM的Howto文档: http://kvm.qumranet.com/kvmwiki/HOWTO 
Kqemu: http://sourceforge.net/projects/kqemu/ 
Qemu: http://fabrice.bellard.free.fr/qemu/index.html 
---------------------------------- 
安装前准备: 
1. 首先要确认CPU是否支持VT技术,用 
egrep '(vmx|svm)' /proc/cpuinfo 
查看一下,比如我的是intel T7500,查询结果是: 
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr lahf_lm ida 
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr lahf_lm ida 
2. 确认主板的BIOS有VT选项切已经打开。 

如果上述条件都有了,那么我们就开始安装: 
1. 使用新立德源来安装: 
直接在源里查找kvm和qemu进行安装,我的8.04 ubuntu新装后,自动就已经安装了相关的包。 
2. 自己手动编译安装: 
1)在sourceforge.net上下载最新的版本,现在kvm-68.tar.gz 
2)解压到目录下,然后执行./configure --enable-alsa就可以了,你也可以通过--prefix=<dir>来指定安装的路径 
默认的安装路径是/usr/local/bin.可以通过./configure --help来看看具体的参数选择适合自己的编译 
3)./configure完后执行make进行编译 
4)编译成功后,执行:sudo make install进行安装,kvm主要有2个ko,一个是针对Intel的kvm-intel.ko,一个是针对 
AMD的kvm-amd.ko,安装的时候会根据你的cpu类型加载。 
自己编译的kvm会自带qemu的编译安装,不需要我们单独的去编译qemu,安装完成后,可以通过ls /usr/bin/qemu*来查看 
可以看到很多qemu开头的文件。OK,接下来我们就可以安装系统了。 

系统安装: 
我的环境是ubutn8.04然后以在其上面安装windows为例。 
1. 确定你有一个xp的iso文件或者光盘,没有就去下载一个吧 
2. 我们先要用qemu-img命令创建一个虚拟磁盘: 
sudo qemu-img create -f qcow2 winxp.img 10G 
create意思是创建一个新的磁盘,-f指定该磁盘的类型,可以创建raw的,也可以创建vmware兼容的,这里选择qcow2,qemu 
自己的类型来安装XP,接下里的参数就是虚拟磁盘的文件名,可以放在你喜欢的任何地方,然后就是磁盘初始大小,一般5G,10G 
都可以,qemu的磁盘大小是随着需要可以自动的增大的,所以初始可以选择小点。 
3. 虚拟磁盘创建好了,我们就可以安装系统了 
从kvm的官方网站上可知,无论386还是64位的机器都用qemu-system-x86_64, 
sudo qemu-system-x86_64 -hda winxp.img -cdrom /path/to/winxp.iso -boot d -m 384 -no-acpi 
-hda指定了XP的硬盘是那个虚拟磁盘,这里用我们刚刚创建的winxp.img 
-cdrom指定cdrom是那一个,可以用iso文件,也可以用机器的光驱,我们选择用iso文件,如果用光驱尝试-cdrom /dev/cdrom 
-boot指定XP启动的时候从磁盘,硬盘,光驱还是网路上启动,我们安装的时候选择从光盘启动,所以用d 
-m虚拟机使用的内存大小,单位是MB,默认是128mb,我用的是1024,因为我内存大,呵呵。 
-no-acpi由于qemu支持不太好会导致系统很慢,所以我们暂时禁止掉。 
具体的其他参数可以用man来查看qemu-system-x86_64的说明。 
接下来就是XP的安装,这个我想大家都会了,在copy文件的时候大家稍微要点耐心,偶尔感觉慢点。 
如果一切顺利,XP还是很快就安装完了(具体时间没有测试)。由于加了-no-acpi所以安装中每次的reboot都需要自己关掉kvm然后 
再用上诉的命令运行,安装完后也是用上述命令运行,这个时候你可以去掉-cdrom参数如果你不再需要的话。 
接下来就是需要配置相应的文件了。 

系统配置: 
1.显示配置: 
qemu使用SDI接口来显示客户系统,这里我们有两个选择,一个是qemu本身来显示,二是通过VNC来显示。 
默认情况下是由qemu自己显示,要使用vnc的话我们需要加上-vnc :1参数,因此kvm运行命令就变成: 
sudo qemu-system-x86_64 -hda winxp.img -boot d -m 384 -no-acpi -vnc :1 
你也可以-vnc :2用过vnc的人就知道那个数字是什么意思,也就是一个标识,这样的话kvm运行时就没有 
任何的输出了,我们直接用vncviewer :1来连接kvm里的vncserver进行显示。 
进入XP系统后,显卡是默认的显卡只支持1024*768大小的显示,如果我们想调整到更大,启动时加上参数-std-vga就可以了,进入XP后可以 
调整显卡到更高的屏幕参数,如果客户机是linux,还可以支持opengl,详细的设置可参考官方的说明:http://kvm.qumranet.com/kvmwiki/HOWTO_VMGL 

2. 鼠标设置
默认的qemu在窗口模式下会发现鼠标很慢,但是如果调整成全屏模式就没有这个问题,鼠标移动很平滑,很顺畅。如果是VNC的模式会发现 
总是有两个鼠标,而且移动很慢,这个时候只要我们在qemu启动的时候加上-usbdevice tablet就可以解决VNC下的问题了。 

3. 声卡设置
如果需要声音,只要在启动的时候加上参数:-soundhw all就可以,也可以用qemu -soundhw ?列出所支持的声卡硬件,用-soundhw <sound card> 
选用指定的硬件。 

4. 网络设置 
首先在kvm的sourceforge下载页面: http://sourceforge.net/project/showfile ... _id=180599可以看到除了kvm还有kvm-guest-drivers-windows的驱动,下载此驱动,然后想办法放到虚拟机中(通过共享,或者直接在虚拟机下载)在kvm启动参数中增加-net nic,model=virtio参数,然后重新启动xp,进入xp后就会提示你有新设备需要安装,弹出驱动安装窗口,从下载的kvm-guest-driver中选择合适的驱动程序进行安装即可。这样安装的网卡速度上更快,几乎可以接近物理网卡的速度,具体我也没有测试前后差别有多大,不过网上应该能找到,反正使用起来感觉还不错,特别是用KVM跑服务器的话,该驱动 
就更应该安装了。 

qemu的网络配置有3种,更VMware所支持的一样:nat, host-only, bridge. 
1)nat方式: 
这是最简单的一种,直接在启动参数中加上-net user即可,主机打开DHCP功能,客户机通过DHCP获取IP,该置下客户机可以上网,但不能跟主机通讯。 
2)host-only
使用tap/tun虚拟出一个网卡,需要内核支持tap/tun模块(一般都支持),还需要配置iptables转发,因为tap网卡上的ip不能和主机上ip在同一个网段。客户使用该网卡可以跟主机通讯也可以上网,但局域网内的其他机器不能直接访问客户机,需要主机通过端口转发或者其他方式来访问。具体配置可以参见: 
http://cisco7200-dynamips-dynagen-pemu. ... p?tid=1544 
我的简单配置(内核需要支持tap/tun): 
(1)修改/etc/sysctrl.conf, 将net.ipv4.ip_forward=1打开,也就是ip转发功能打开,修改完后需要reboot机器。 
(2)建立一个脚本kvm-ifup.sh,内容很简单: 
#!/bin/bash 
sudo ifconfig $1 172.0.100.1 netmask 255.255.255.0 up 
该脚本就是配置tap虚拟网卡设备的ip。$1通常会是tap0,根据你在qemu启动参数中给定的名字而定。 
(3)在qemu启动参数中给定相关的虚拟网卡设备名,和相关的设备初始化脚本,也就是上面的这个脚本: 
sudo qemu-system-x86_64 -hda /virtualOS/winxp.img -m 1024 -no-frame -localtime -no-acpi -usb -net nic,model=virtio -net tap,ifname=tap0,script=/home/chao/kvm-ifup.sh -usb -usbdevice tablet -std-vga 
(4)在客户机中,手动的配置ip,网关和DNS,跟tap虚拟网卡的ip同一网段,而网关就是虚拟网卡的ip,比如我的xp配置: 
IP: 172.0.100.101 
MASK: 255.255.255.0 
GATEWAY:172.0.100.1 
(5)配置iptables的NAT: 
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE 
我是放在一个启动脚本里,每次启动kvm会执行一下,也可以在主机系统启动的时候就添加这条规则。 
3)桥接模式: 
这种应该是功能最全的一种,虚拟客户机的ip和主机处在同一个网段,客户机就如局域网中的一台主机一样,既可以和主机通讯也可以上网,同时网路中的其他主机也可以访问客户机而不需要主机转发,不过如果在无线网卡上做桥接会遇到一定的问题,很可能就不成功,反正我尝试的结果就是失败,客户机可以ping主机但就是不能ping其他的地址,网上查了一下跟无线网卡驱动有一定的关系(见http://www.linuxfoundation.org/en/Net:Bridge),最后只有放弃了,但以太网卡上我测试是没有问题的。具体配置可以参照:http://linux.chinaunix.net/bbs/viewthre ... tid=788174 

5. USB设备 
KVM是通过qemu来支持USB设备的,可以在启动的时候就指定需要连接的USB设备,也可以系统启动后动态的添加删除.通过qemu的help可知,使用qemu的usb_add host:xxx:xxx来添加usb设备,那么如何知道对应的host:xxx:xxx呢,有2种方法: 
1)在host主机ubuntu中执行lsusb得到这些信息 
比如在我机器上ipod的信息如下: 
Bus 006 Device 002: ID 05ac:1204 Apple Computer, Inc. iPod [Photo] 
Bus 006 Device 001: ID 1d6b:0002 
Bus 001 Device 001: ID 1d6b:0002 
.... 
05ac:1204就是我们需要的了。 
2)进入虚拟机后,通过ctrl+alt+2调出qemu控制台,输入info usb来列出相关的信息,在我的机器上
Device 4.2, speed 12 Mb/s 
Class e0: USB device 044e:300d, UGX 
Device 2.11, speed 480 Mb/s 
Class 00: USB device 05ac:1204, iPod 
... 
很有可能你在执行上述命令的时候会遇到这样的错误: 
Could not open /dev/bus/usb/devices 
可以参考:https://bugs.launchpad.net/ubuntu/+source/qemu/+bug/156085去解决,主要就是把 
/etc/init.d/mountdevsubfs.sh脚本中的以下几行打开(默认被注释掉了) 
#
# Magic to make /proc/bus/usb work
#
mkdir -p /dev/bus/usb/.usbfs
domount usbfs "" /dev/bus/usb/.usbfs -obusmode=0700,devmode=0600,listmode=0644
ln -s .usbfs/devices /dev/bus/usb/devices
mount --rbind /dev/bus/usb /proc/bus/usb
 
然后手工执行: 
$ sudo /etc/init.d/mountdevsubfs.sh start 
或者重启机器就ok了。 
取得了上述USB设备的信息后,可以在kvm启动的时候就连接指定的USB设备,通过启动参数-usbdevice host:xxx:xxx 来添加相应设备。也可以在kvm的客户系统启动后添加,在客户系统中按ctrl+alt+2(ctrl+alt+1回到客户系统)调出qemu控制台,通过usb_add host:xxx:xxx来添加设备,通过info usb可以查看已经添加的usb设备信息,通过usb_del来删除连接的usb设备。 

问题: 
我尝试ipod,结果失败,感觉xp中认为当前的usb接口是1.1不是2.0。每次用usb_add后,客户系统都会要等一定的时间加载设备,这个期间客户系统几乎不能用,看来还有待改进。


_________________
XP on Thinkpad T43 
ubuntu on Thinkpad X61 with XP on KVM