Chinaunix首页 | 论坛 | 博客
  • 博客访问: 115250
  • 博文数量: 41
  • 博客积分: 984
  • 博客等级: 军士长
  • 技术积分: 430
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-12 09:57
文章分类

全部博文(41)

文章存档

2010年(41)

分类:

2010-05-11 11:28:10

前言 
最近迷上 ubuntu 了,花了一周的时间把工作移到 ubuntu 上面。但是还是不能放弃Winows,因此尝试虚拟机。我先后安装了 vmware 6.03, VirtualBox 1.5.6, 和 kvm 0.91。最后得出结论:kvm最快!前题!!!你的CPU必须支持VM!!! 

KVM的优点 
常用的虚拟机我都试过了吧,总的来说,kvm具有以下优点。 
1,速度,这是我最看中的。kvm的cpu效率和磁盘效率绝对是最优秀的。 
2,稳定,这也是我看中的,目前的感受是最稳定的,不比 vmware 差。virtualbox我想大家都运到过qq问题。 
3,扩展性,kvm是一个新的项目,以后回逐步在图形效率,3d和硬件上面得到linux最基础的支持。 

KVM的缺点 
1,使用不太方便。很多人惧怕命令行的东西,但是稍微注意一下,会发现命令行是那么的清晰和简单。 
2,目前有些功能不太完善,比如图形性能,usb等。本文的最后有说明。 
3,你的cpu需要支持vt技术,否则不能体现 kvm 的优势。 

可能很多人在初次安装 kvm 后,一使用就放弃了。觉得鼠标移动都很不平滑,这的确是kvm目前最大的问题!但是鼠标是图形性能,记住,kvm在运算性能和磁盘性能上面基本上是最优秀的。下面我来给大家介绍如何用已有的方法去缓解鼠标这个弱点。 

KVM 和 qemu 的关系 
首先介绍一下 qemu 和 kvm 的关系。细节我就不多说了。 
1,kvm 不是 qemu 的插件。我在开始的时候一直以为kvm只是一个插件。记住,kvm基本是一个独立的系统,只不过借用了qemu的代码和操作界面。也就是说,你在命令行中如果使用 qemu 的地方,只需要题换成 kvm,其他的参数基本都不用修改就可以运行,这样的效率是 qemu 的很多倍。所以,如果你想用好 kvm,去看看 qemu 的说明吧。 
2,如果要用kvm,你的cpu必须支持 vm 技术,否则和 qemu 的效率基本相同。 

如何判断你的cpu是否支持 vm 技术? 
首先使用 
代码:
egrep '(vmx|svm)' /proc/cpuinfo

如果没有任何的输出,说明你的cpu不支持,不用往下看了;-)
如果支持,你可以在输出中找到 vmx 的字样。看看我的
代码:
danny@danny-laptop:~$ egrep '(vmx|svm)' /proc/cpuinfo
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
danny@danny-laptop:~$ egrep '(vmx|svm)' /proc/cpuinfo
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


安装和配置
注意,大多BIOS缺省是关掉了vt支持的,你需要首先设置你的bios,我使用的是x61,缺省就是关闭的。

接下来安装 kvm 包,使用“新得利”吧,细节就不说了。不过还需要下载 qemu包。因为 kvm 没有包含建立虚拟磁盘的工具。kvm应该根据你的cpu类型自动激活内核模块,反正我的是这样的。接下来你需要在终端运行一下kvm,如果没有任何错误信息,那么恭喜你,你可以使用kvm了。

把你的用户加入到 kvm 组,使用系统管理当中的“用户和组管理”,这里略去细节。也可以使用命令行

代码:
adduser xxx kvm


如果你需要虚拟机访问物理磁盘,需要把你的用户添加到 disk 组。

代码:
adduser xxx disk


xxx是你的登录名。

建立磁盘映像文件,使用

代码:
qemu-img create -f qcow2 WindowsXP.img 10G


细节请看相关命令行说明。

你应该准备了 windows xp 的安装 iso 映像包吧。
然后使用下面命令打开虚拟机进行安装了。
代码:
kvm -M pc -m 512 -soundhw es1370 -hda /home/danny/kvm/WindowsXP.img -localtime -net nic,vlan=0 -net user,vlan=0 -cdrom /media/tools/winxp.iso  -boot d

-m 512 是虚拟机的 ram 大小
-hda /home/danny/kvm/WindowsXP.img 是你刚刚建立的虚拟磁盘 C盘
-cdrom /media/tools/winxp.iso 是安装光盘的位置 D盘
-boot d 是从光驱启动
这里注意一下,官方推荐使用 -no-acpi 参数,原因是 qemu/kvm不太支持,可能造成 cpu 的占用偏高。我没有用这个参数,一用就退出,但是CPU使用很正常。你们可以尝试先加上这个参数。
其他参数自己看看文档吧。

速度怎么样?是不是你见过最快的虚拟机?这里注意一下,切换方式和 vmware 一样,都使用 ctrl+alt 切换。如果出现显示冲突,你多半需要关闭你的桌面特效。linux总是给我们不经意的惊喜。

安装完了吧,怎么样?鼠标很慢?启动时间很快吧。试试其他的一些消耗CPU而不需要什么图形性能的程序你就知道kvm的效率了。

下面看看我的桌面效果,鼠标的问题也解决了。

剩下的问题题明天再解决,今天有事,先离开了。

回帖请注意:
1。把你自己的问题描述清楚
2。请不要废话

使用远程桌面
继续。。。。。。。。。。。
看样子已经有人安装成功了,下一步经过简单的操作,我们实现来消除鼠标的问题。

首先确定你的虚拟机没有运行,然后运行以下的代码
代码:
kvm -M pc -m 512 -hda /home/danny/kvm/WindowsXP.img -hdb /dev/sda5 -hdc /dev/sda7 -hdd /dev/sda8 -net nic -net user -usb -localtime -vnc 127.0.0.1:0 -daemonize -redir tcp:3389::3389

解释一下,
1,-hda /home/danny/kvm/WindowsXP.img 你的系统虚拟磁盘
2,-hdb /dev/sda5 -hdc /dev/sda7 -hdd /dev/sda8 这个根据你自己进行选择,kvm可以加载你系统的分区。注意,分区是独享的,也就是说如果在 kvm 中加载了分区,这几个分区在宿主机(unbutu)中将无法访问。我这几个分区是Windows 下的分区,在 Ubuntu下也没有什么用。
3,-net nic -net user 使用简单网络访问,可以使得虚拟机上网,或者是访问宿主机。但是宿主机不能访问虚拟机(很奇怪的问题)。
4,-usb 使能 USB 支持,我没有成功。不知道为什么。
5,-localtime 时间同步,你不希望你的虚拟机是另外的时间吧。
6,-daemonize 后台运行,不显示图形界面,这个我后面要解释。
7,-vnc 127.0.0.1:0 打开远程桌面支持,这个可不是Windows的远程桌面哦。
8,-redir tcp:3389::3389 把虚拟机的远程桌面服务器端口映射到宿主机的端口,这个才是等同windows的远程桌面。

运行了吧,怎么突然退出而没有任何反应?因为虚拟机已经在后台运行了。你有两种方式查看虚拟机的界面。
1,使用远程桌面工具,地址 localhost , 端口 5900。
2,使用远程终端,地址 localhost 端口 3389
如果你的虚拟机还没有配置远程桌面,请现用第一种方式访问虚拟机界面,然后设定虚拟机(我的是XP)远程桌面方式,然后就可以了。

下一步是整合虚拟机到你的桌面,就和我的贴图一样,使用以下命令
代码:
rdesktop localhost:3389 -u danny -p xxxxxx -g 1024x720 -D -r sound:local


-u 后面的是用户名,-p 后面的是密码。-r sound:local 是启用声音,-D 是消除远程终端窗口的边框。怎么样,桌面出来了吧?应该还有登录的声音哦。这里也应该知道 1024x720 的道理了吧。这个值根据你自己的屏幕大小来调整。

这种方式下,可以享受 kvm 的所有效率,同时,鼠标是不是很快了。另外,几乎可以避免所有的键盘冲突。但是如果在虚拟机中看电影的話可能比较痛苦。

如何升级到 kvm 74
Ubuntu 源中的kvm版本是62的,太老了,很多新的特性都不支持。现在我们来看看如何升级到 kvm 74 的最新版本。
1。首先确定你已经安装了ubuntu官方源中的 kvm。如果直接使用我提供的 kvm 74,不会把 /dev/kvm 的权限设置成 kvm 组,比较麻烦。因此建议你按照前面所描述的,首先安装和设置官方源中的kvm
2。去launchpad.net下载最新编译好的kvm。我比较菜,不会自己编译。虽然提供了相应的源,但是我觉得最好是下载deb安装。因为launchpad.net提供的源中还包含了其他的很多包,有些包的升级可能对你的系统造成影响。因此,为了把影响控制在一定范围内,我强烈建议下载安装。下载地址是 有三个版本
kvm_74+dfsg-0ubuntu2~ppa3g_i386.deb
kvm_74+dfsg-0ubuntu2~ppa3h_i386.deb
kvm_74+dfsg-0ubuntu2~ppa3i_i386.deb
其中,kvm_74+dfsg-0ubuntu2~ppa3h_i386.deb 是hardy的,h 代表 hardy 下载后直接安装。

使用kvm 74 中的USB自动识别
kvm 中的USB支持一直是很麻烦的。新版本的kvm可以支持USB设备的自动加载和卸载。现在我们就来看看是如何做的。

首先我们需要让kvm识别USB设备。这里需要编辑两个文件。
代码:
sudo gedit /etc/init.d/mountdevsubfs.sh


找到 Magic to make /proc/bus/usb work 这个地方,把下面的注解符号删除,最后的结果应该是下面这样。
代码:
   #
   # 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/us


然后,编辑 fstab 文件
代码:
sudo gedit /etc/fstab


在文件的最后一行加上
代码:
none /proc/bus/usb usbfs devmode=666 0 0 

这样让所有用户可以访问 USB 设备。这种方式有安全隐患,也可以把 USB 访问的权限分配给一个组,这里我就不多说了。

重新启动Ubuntu,kvm应该可以认识 USB 设备了。

kvm 不可能把所有的 USB 设备全部转让给客户机运行,因此,必须给kvm说明那些usb会让客户机控制。这里需要使用到的是USB的vid和pid。每个 usb 设备都有这两个id,vid 代表生产商,pid代表产品。你可以通过下面的命令来察看USB设备的这两个参数
代码:
lsusb


结果的方式是
代码:
Bus 006 Device 001: ID 0000:0000  
Bus 005 Device 001: ID 0000:0000  
Bus 004 Device 001: ID 0000:0000  
Bus 003 Device 001: ID 0000:0000  
Bus 002 Device 001: ID 0000:0000  
Bus 001 Device 007: ID 0a5c:2110 Broadcom Corp. 
Bus 001 Device 006: ID 0483:2016 SGS Thomson Microelectronics Fingerprint Reader
Bus 001 Device 001: ID 0000:0000  


如果是 ID 0000:0000 表示没有设备, 
像 ID 0a5c:2110 Broadcom Corp. 表示vid是 0a5c,pid是2110 

在启动kvm的命令中加入 -usbdevice host:0a5c:2110 就可以让客户机自动识别USB。当然也可以加入 -usbdevice host:0a5c:* 这样的命令,使得客户机识别所有 pid是0a5c的USB设备。原则上不要使用 -usbdevice host:*:* 这样的参数,否则你的Ubuntu不能识别USB设备了。 

遗留问题 
以下是遗留的问题,希望有朋友可以解决。 
1,偶尔看看电影什么的,需要使用PPStream。切换到真实的 windows 太麻烦。希望通过 ppstream 的网络共享,在宿主上播放。 

好了,希望大家使用 kvm 愉快,并且多多交流一下经验。如果你有什么好的经验,可以PM给我,让我们一同来完善这个帖子。


附件:
Screenshot-3.png 
阅读(1214) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~