|
环境:ubuntu 11.04
准备工作
检查CPU是否支持虚拟化
如果支持VT的话,Intel会打印出vmx,AMD会打印出svm。
$ egrep '(vmx|svm)' /proc/cpuinfo检查内核是否编译了kvm支持
kvm支持从linux 2.6.20已被集成到内核中,成为内核的一部分。
$ lsmod |grep kvm 检查设备 /dev/kvm 的权限,如果你不想使用root权限,需要把你的用户加入kvm用户组:
$ sudo usermod -aG kvm jqian安装kvm管理组件
$ sudo apt-get install kvm安装网络工具
用于桥接网络,依赖工具tunctl;如果不需要桥接,可以不用安装。
$ sudo apt-get install bridge-utilities uml-utilities安装虚拟机
打算虚拟一个Windows XP。
创建磁盘文件
虚拟机磁盘文件可以有很多格式,qcow2、raw、vdi、vmdk等。官方推荐qcow2+virtio,其性能和raw基本接近。qcow2的优点是根据磁盘使用量自增长,不需要一次性分配;raw的优点是便于移植,且能直接挂载到本地,不用开启虚拟机即可访问虚拟机数据。
$ qemu-img create -f qcow2 winxp.img 10G 安装虚拟机
$ kvm -no-acpi -m 512 -cdrom /store1/Public/WinISO/WindowsXP_PRO_SP3_VOL.iso -hda winxp.img -boot d 其中,
- -M pc选择模拟PC机型,可用-M ?得到机型列表;
- -hd(a|b|c..)指定硬盘镜像文件;
- -boot d表示从光盘启动,-boot c表示从硬盘启动;
- -no-acpi表示禁止电源管理;
- -m 512设置虚拟机内存大小。
运行虚拟机
直接运行
$ kvm -m 512 winxp.img -boot c 这是最简单的运行方法,执行后将出现一个Windows运行窗口。网络默认是工作在NAT方式,虚拟机DHCP得到的地址一般是10.0.2.x,主机作为网关地址是10.0.2.2,你可以通过samba协议共享主机内容。
kvm的图形性能很差,所以,直接访问虚拟机鼠标移动速度很慢,基本不可用,只用于测试虚拟机是否安装成功,或进行简单的设置。
后台运行
$ kvm -M pc -m 512 -smp 2 -hda winxp.img -net nic -net user -usb -localtime -daemonize -nographic -vnc 127.0.0.1:0 -redir tcp:3389::3389 -soundhw all 其中,
- -net nic -net user即默认的NAT方式,KVM充当虚拟机的网关和防火墙,这种方式下一般需要搭配-redir参数,后者用于重定向端口号,否则无法从外部访问虚拟机网络,
- -redir tcp:3389::3389重定向虚拟机的3389端口到主机的网络界面上,可以在远程使用RDP协议登录虚拟机,
- -smp 2表示使用两个CPU核心;
- -vnc :0开启vnc远程访问;
- -daemonize在后台运行虚拟机;
- -nographic不显示图形界面;
- -soundhw all开启声卡。
此时,可以使用vncviewer访问虚拟机,但鼠标性能还是较差:
$ vncviewer 127.0.0.1:0 最佳的办法是使用RDP协议访问,需要先直接访问Windows开启远程桌面支持;然后,使用RDP客户端访问宿主机IP加端口号,即可远程访问后台运行的虚拟机,比如:
$ rdesktop host-ip:3389 -g 1024x768 -u "Julian Qian" -p password -r sound:local 这种方式比直接登录虚拟机界面速度要快很多,也比VirtualBox之类的虚拟机方案方便快捷很多,就好像你有一台远程主机一样。
桥接网络
桥接可以使得虚拟机和主机在同一个子网内。
增加桥接设备
编辑 /etc/network/interface,增加虚拟网卡设备tap0和桥接设备br0。
auto eth0 iface eth0 inet manual auto tap0 iface tap0 inet manual up ifconfig $IFACE 0.0.0.0 up down ifconfig $IFACE down tunctl_user jqian auto br0 iface br0 inet static address 192.168.1.150 netmask 255.255.255.0 gateway 192.168.1.1 bridge_ports eth0 tap0 bridge_stp off bridge_fd 0 bridge_hello 0 bridge_maxwait 0 这里把实际网卡eth0和虚拟网卡tap0都加入了网桥设备br0,所以eth0和tap0都不用再设置IP地址。
另外,检查一下设备/dev/net/tun的访问权限,也许需要把你的用户加入uml-net用户组:
$ sudo usermod -aG uml-net jqian 激活网卡设备后可以用brctl命令检查,可以看到eth0和tap0都桥接到了br0上:
$ brctl show bridge name bridge id STP enabled interfaces br0 8000.00012e36c181 no eth0 tap0 禁止netfilter
kvm通过VLAN向处于同一VLAN的虚拟机发送数据包。如果没有特别指定VLAN,默认就是VLAN0。如果虚拟机没法接收到数据包,应该查看 /proc/sys/net/bridge,禁止netfilter相关设置。
$ cd /proc/sys/net/bridge $ for f in bridge-nf-*; do sudo echo 0 > $f; done 或者,编辑 /etc/sysctl.conf,增加如下内容:
# Disable netfilter on the bridge interface for KVM # Solution is associated with launchpad bug number 573461 net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0 运行虚拟机
由于此时虚拟机会分配到和宿主机相同子网的IP地址,所以,最好先直接登录虚拟机取消DHCP,设置固定IP,然后再后台运行虚拟机。
$ kvm -no-acpi -M pc -m 512 -smp 2 -drive file=/home/jqian/winxp.img,cache=none,if=virtio -net nic -net tap,ifname=tap0,script=no -rtc base=localtime,clock=host -vnc :0 -daemonize -usb -soundhw es1370 其中,
- -net nic -net tap表示使用TAP网络设备;
- -drive和-rtc都是新的参数格式,用法类似。
连接USB设备
目前好像没有看到自动挂载usb设备的方法,只能手动加载。
可以在主机上用lsusb,或者在虚拟机的控制台里运行info usbhost,得到设备的verdorID:productID。
控制台挂载
挂载USB设备的话,启动kvm时需要加上-usb参数。如果以图形界面启动,直接按下Ctrl-Alt-2,进入控制台;如果以vnc后台启动,需要远程使用vncviewer连上vnc server,然后按下Ctrl-Alt-2,进入控制台。
在控制台内,你也可以查询USB设备信息,使用命令 usb_add 挂载设备。
(qemu) info usbhost husb: using sys file-system with /dev/bus/usb Device 1.1, speed 480 Mb/s Hub: USB device 1d6b:0002, EHCI Host Controller Device 2.1, speed 480 Mb/s Hub: USB device 1d6b:0002, EHCI Host Controller Device 3.1, speed 12 Mb/s Hub: USB device 1d6b:0003, xHCI Host Controller Device 1.2, speed 480 Mb/s Hub: USB device 8087:0024 Device 2.2, speed 480 Mb/s Hub: USB device 8087:0024 Device 3.2, speed 480 Mb/s Hub: USB device 2109:0811, USB 2.0 Hub Device 2.3, speed 480 Mb/s Class 00: USB device 1307:0165, USB Flash Disk (qemu) usb_add host:1307:0165 挂载完成后,按下Ctrl-Alt-1,返回虚拟机界面。
|
|
|