VirtualBox从USB设备启动方法

研究了很久的KVM,感觉是我用过的最快的虚拟机。对比常用的虚拟机,Vmware的功能全面,设置简单,但其速度不是很好;VirtualBox的效率虽然比Vmware高一些,但是存在不少缺点,感觉在运行时比较抢CPU,现在virtualbox已经支持smp,和虚拟化技术,但整体效率还是没有KVM高(但是图形效率作的不错);KVM(Kernel-based Virtual Machine),基于内核的虚拟机,是我用过的最快的虚拟机,需要CPU支持虚拟化技术,并且在BIOS里打开虚拟化选项,效率可达到物理机的80%以上,对SMP的支持很好。所以现在强烈吐血卖命推荐KVM。
(使用磁盘方式以更新,请大家注意!!!)
没有废话,以下是在UBUNTU 804.4 64BIT下的方法
获得KVM:
KVM的网站:http://sourceforge.net/projects/kvm/files/
下载最新的qemu-kvm-0.12.4.tar.gz
解压:
代码:
tar -xzvf qemu-kvm-0.12.4.tar.gz

需要用到的包:
代码:
sudo apt-get install gcc libsdl1.2-dev zlib1g-dev libasound2-dev linux-kernel-headers pkg-config libgnutls-dev libpci1 pciutils-dev

在 UBUNTU 10.04中 ,可以使用
代码:
sudo apt-get build-dep qemu-kvm
来解决依赖关系。
三步曲:
代码:
cd qemu-kvm-0.12.4
./configure --prefix=/usr/local/kvm
make
sudo make install

安装好以后加载KVM模块
代码:
sudo modprobe kvm
sudo modprobe kvm-intel  //如果你的是INTEL处理器就用这个
sudo modprobe kvm-amd  //如果你的是AMD处理器就用这个

这样就装好了。

下面介绍配置KVM桥接网络的方法: \\特别注意,大部分不能桥接无线网卡。。。只能桥接PCI网卡。。。。
安装桥接工具:
代码:
sudo apt-get install bridge-utils

安装创建TAP界面的工具:
代码:
sudo apt-get install uml-utilities

编辑网络界面配置文件(
代码:
sudo vi /etc/network/interfaces
),根据你的情况加入以下内容:
代码:
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 lm      \\lm是我的用户名,在这里换为你的用户名

auto br0
iface br0 inet static       \\当然这里也可以使用DHCP分配
bridge_ports eth0 tap0
address 192.168.1.3
netmask 255.255.255.0
gateway 192.168.1.1


激活tap0和br0: //有些时候会不奏效,但重启后就行了
代码:
sudo /sbin/ifup tap0
sudo /sbin/ifup br0

好了以后ifconfig看一下,多了一个tap0和br0, br0上的IP地址就是你本机的IP地址。

KVM的使用方法:
KVM的使用方法具体可以参考
代码:
/usr/local/kvm/bin/qemu-system-x86_64 --help

下面具体举几个例子:
创建虚拟磁盘(用qemu-img命令):
代码:
mkdir kvm
cd kvm
/usr/local/kvm/bin/qemu-img create -f qcow2 winxp.img 10G

创建虚拟机:
代码:
sudo /usr/local/kvm/bin/qemu-system-x86_64 -m 512 -drive file=/home/lm/kvm/winxp.img,cache=writeback -localtime -net nic,vlan=0,macaddr=52-54-00-12-34-01 -net tap,vlan=0,ifname=tap0,script=no -boot d -cdrom /home/lm/iso/winxp.iso -smp 2 -soundhw es1370


这里对各个参数说明一下:
代码:
-m 512

分配512MB的内存给GUEST OS
代码:
-drive file=/home/lm/kvm/winxp.img,cache=writeback

使用虚拟磁盘的文件和路径,并启用writeback缓存。
代码:
-localtime

使用本地时间(一定要加这个参数,不然虚拟机时间会有问题)
代码:
-net nic,vlan=0,macaddr=52-54-00-12-34-01 -net tap,vlan=0,df=h,ifname=tapo,script=no

使用网络,并连接到一个存在的网络设备tap0,注意mac地址一定要自己编一个,特别是如果你虚拟了多个系统并且要同时运行的话,不然就MAC冲突了,在KVM-87下去掉df=h
代码:
-boot d

从光盘启动 (从硬盘启动则为 -boot c )
代码:
-cdrom /home/lm/iso/winxp.iso

使用的光盘镜像,如果要使用物理光驱的话就是 -cdrom /dev/cdrom
代码:
-smp 2 

smp处理器个数为2个,如果你是4核处理器,后面的数字就为4(如果不开启此选项,则只能以单核模式运行)

开始启动装系统了吧?是不是非常的快?如果你机器可以的话大概在15分钟左右就把XP装好了。
启动装好的虚拟机(很简单,上面的命令改两个参数就行):
代码:
sudo /usr/local/kvm/bin/qemu-system-x86_64 -m 512 -drive file=/home/lm/kvm/winxp.img,cache=writeback -localtime -net nic,vlan=0,macaddr=52-54-00-12-34-01 -net tap,vlan=0,ifname=tap0,script=no -boot c -smp 2 -soundhw es1370


然后在客户端里设置好IP地址就可以使用了,但是KVM的显卡能力不行,可以通过rdesktop远程连接解决
代码:
rdesktop 192.168.1.4:3389 -u administrator -p ****** -g 1280x750 -D -r sound:local    \\分辨率可以自行设定,是不是比VirtualBox的无缝连接模式要爽??



补充:
如果同时运行多个GUEST OS ,则网络设置要改一下,在/etc/network/interfaces 里加几个tap界面就行了,每个GUEST OS单独使用一个TAP,比如说现在要同时运行3个GUEST OS ,则配置文件如下:
代码:
auto tap0
iface tap0 inet manual
up ifconfig $IFACE 0.0.0.0 up
down ifconfig $IFACE down
tunctl_user lm      \\lm是我的用户名,在这里换为你的用户名

auto tap1
iface tap1 inet manual
up ifconfig $IFACE 0.0.0.0 up
down ifconfig $IFACE down
tunctl_user lm      \\lm是我的用户名,在这里换为你的用户名

auto tap2
iface tap2 inet manual
up ifconfig $IFACE 0.0.0.0 up
down ifconfig $IFACE down
tunctl_user lm      \\lm是我的用户名,在这里换为你的用户名

auto br0
iface br0 inet static       \\当然这里也可以使用DHCP分配
bridge_ports eth0 tap0 tap1 tap2
address 192.168.1.3
netmask 255.255.255.0
gateway 192.168.1.1

启动GUEST OS
代码:
sudo /usr/local/kvm/bin/qemu-system-x86_64 -m 512-drive file=/home/lm/kvm/winxp.img,cache=writeback -localtime -net nic,vlan=0,macaddr=52-54-00-12-34-01 -net tap,vlan=0,ifname=tap0,script=no -boot c -smp 2 -clock rtc -soundhw es1370


把ifname=tap0换为你要tap1或者tap2就行了,MAC也要改噢。。

要注意,系统重启后要重新加载kvm内核模块:
代码:
sudo modprobe kvm
sudo modprobe kvm-amd   //如果使用AMD处理器
sudo modprobe kvm-intel   //如果是用INTEL处理器

当然,你也可以修改系统相关设置在启动时自动加载该模块。
同理,可以用此方法安装LINUX。装完了可以对比一下,是不是比VB和VM要爽得多呢?

其他比如像USB连接问题可以参考论坛里的帖子

我已经在我的系统里同时运行了4个CentOS 4.8 1个winxp sp3 1个win2003 sp2 5个FreeBSD 8.0
速度太快了,难以置信。
系统配置为:Athlon X2 5000+ 8G RAM 跑的Ubuntu 8.04.4 64bit

其实KVM的安装和使用都很方便简单的,大家要理解KVM各个参数的含义。最关键的就是KVM的网络桥接的设置,在这里大家要多看软件自身的文档,会有很大的帮助。
以上是KVM的最基础的实现方法,望大家多看文档,以便掌握更多更灵活的功能。

BTW:
现在已经找到了原来磁盘性能糟糕的原因,按照以往的方法是用 -hda disk.img 的方法来使用虚拟磁盘,现在版本更新以后时候 -drive file=/home/lm/kvm/winxp.img,cache=writeback 来使用虚拟磁盘,请广大使用KVM的用户注意这里的变化。
-hda / hdb 参数主要用户使用物理硬盘上的一个分区。

注:Ubuntu 10.04 LTS 下的安装方法(qemu-kvm 0.12.3):
直接
代码:
sudo apt-get install qemu-kvm

网络配置如上,是一样的。

大家注意一个问题,如果你虚拟的是WIN2003,那么切勿在-net参数中使用model=e1000,否则HOST和GUEST之间不能PING通

最后由 liangmenglm 编辑于 2010-06-28 10:57,总共编辑了 25 次

作者: liangmenglm   发布时间: 2008-10-09

系统配置为:Athlon X2 5000+ 4G RAM 跑的Ubuntu 8.04.1 64bit

这配置跑啥不快?没可比性。。。

作者: runpin   发布时间: 2008-10-09

怎么没有可比性?对比VMWARE和VirtualBox ,比比就知道了。。。。看看同时跑11个GUEST OS ,谁更有优势。。。

作者: liangmenglm   发布时间: 2008-10-09

就算跑单个系统,性能也非常有优势,除了图形性能。

作者: liangmenglm   发布时间: 2008-10-09

创建虚拟机那一步老是提示:
Unable to find any suitable alarm timer.
Terminating
怎么回事?

作者: huzhiyongbc   发布时间: 2008-10-10

好象是-clock rtc的问题

作者: huzhiyongbc   发布时间: 2008-10-10

把clock rtc 去掉就可以了。。

作者: liangmenglm   发布时间: 2008-10-10


楼主这帖子应该加精,置顶
沉沦了就可惜了
先copy一份放到家里,哈哈

作者: 飞雪笑   发布时间: 2008-10-10


另:
兄弟们kvm -m 512 -hda /dev/sda 看看
我的是直接启动本机系统,居然还可以这样
我的双系统,在KVM里直接启动本机的XP,哈哈

友情提示:不要启动正在运行着的KVM的这个LINUX系统哦,否则出问题别后悔

作者: 飞雪笑   发布时间: 2008-10-10

飞雪笑 写道:
:em02
另:
兄弟们kvm -m 512 -hda /dev/sda 看看
我的是直接启动本机系统,居然还可以这样
我的双系统,在KVM里直接启动本机的XP,哈哈

友情提示:不要启动正在运行着的KVM的这个LINUX系统哦,否则出问题别后悔

这个发现帅,把XP安装在U盘上直接用。不错,不错!而且原生的XP磁盘性能要好于qcow2下的XP

作者: chengzh   发布时间: 2008-10-14

大家可以单独划分出一个分区来装虚拟操作系统,这样磁盘性能会更好的。

作者: liangmenglm   发布时间: 2008-10-14

飞雪笑 写道:
:em02
另:
兄弟们kvm -m 512 -hda /dev/sda 看看
我的是直接启动本机系统,居然还可以这样
我的双系统,在KVM里直接启动本机的XP,哈哈

友情提示:不要启动正在运行着的KVM的这个LINUX系统哦,否则出问题别后悔


请问你是怎么做到的?我这样启动会直接默认进入linux而不是windows。即使我在grub里设置默认启动windows也不行,grub只是闪一下就没有了,然后就启动了linux了。

作者: xjpvictor   发布时间: 2008-11-03

xjpvictor 写道:
飞雪笑 写道:
:em02
另:
兄弟们kvm -m 512 -hda /dev/sda 看看
我的是直接启动本机系统,居然还可以这样
我的双系统,在KVM里直接启动本机的XP,哈哈

友情提示:不要启动正在运行着的KVM的这个LINUX系统哦,否则出问题别后悔


请问你是怎么做到的?我这样启动会直接默认进入linux而不是windows。即使我在grub里设置默认启动windows也不行,grub只是闪一下就没有了,然后就启动了linux了。

你把grub等待时间设置长一点嘛

作者: 飞雪笑   发布时间: 2008-11-04

飞雪笑 写道:
xjpvictor 写道:
飞雪笑 写道:
:em02
另:
兄弟们kvm -m 512 -hda /dev/sda 看看
我的是直接启动本机系统,居然还可以这样
我的双系统,在KVM里直接启动本机的XP,哈哈

友情提示:不要启动正在运行着的KVM的这个LINUX系统哦,否则出问题别后悔


请问你是怎么做到的?我这样启动会直接默认进入linux而不是windows。即使我在grub里设置默认启动windows也不行,grub只是闪一下就没有了,然后就启动了linux了。

你把grub等待时间设置长一点嘛


我设置成5秒,但是仍然只是闪一下就没了。。

作者: xjpvictor   发布时间: 2008-11-04

原来是我没有读windows分区的权限,改了fstab就好了。

但是为什么windows没办法启动,会自动蓝屏呢?

作者: xjpvictor   发布时间: 2008-11-04

请问如果做集群的模拟啊?近来想试试用kvm来做做集群!请指点一二!谢谢!

作者: platoon   发布时间: 2008-11-05

那硬件驱动是不是得重新装?

作者: i18n   发布时间: 2008-11-06

我顶呀 用

作者: 神之徒   发布时间: 2008-11-07

看起来安装设置全命令行的,有像vbox一样图像的吗

作者: ffsxsy   发布时间: 2008-11-09

到底用qemu-system-x86_64 启动虚拟机, 还是用kvm 启动虚拟机啊?
似乎都可以,kvm好像还快点 ?!

作者: sw2wolf   发布时间: 2008-11-10

好东西,收藏。

作者: malcolm   发布时间: 2008-11-10

xjpvictor 写道:
原来是我没有读windows分区的权限,改了fstab就好了。

但是为什么windows没办法启动,会自动蓝屏呢?

偶的不是蓝屏,偶的是出现NTLDR is missing.很奇怪,单独启动windows是一点问题都没有,就是kvm里不行。汗!

作者: chengzh   发布时间: 2008-11-11

platoon 写道:
请问如果做集群的模拟啊?近来想试试用kvm来做做集群!请指点一二!谢谢!

可以的呀,只要设置好桥接网络,很容易就可以做到的。

作者: liangmenglm   发布时间: 2008-11-12

ffsxsy 写道:
看起来安装设置全命令行的,有像vbox一样图像的吗

有,但是配置那个相当麻烦,最终也全是命令行的。只是对虚拟己的管理是图形界面的。直接把命令写成一个脚本,也是很方便的。

作者: liangmenglm   发布时间: 2008-11-12

sw2wolf 写道:
到底用qemu-system-x86_64 启动虚拟机, 还是用kvm 启动虚拟机啊?
似乎都可以,kvm好像还快点 ?!

按本教程上的方法是用qemu-system-x86_64启动,如果是直接APT-GET安装的那应该是KVM启动。

作者: liangmenglm   发布时间: 2008-11-12

用了 Vbox 感觉还可以 呵呵 既然有更好的 那我就去试一下

作者: code9   发布时间: 2008-11-12

我用Ghost还原Winxp 到 KVM虚拟机里的 速度 是20mb 比 Vbox 速度 差老远 老远
当然 Ghost 还原无论是在 kvm 还是 vbox 都是无法启动的 呵呵

只是觉得好玩 就都试了一下

作者: code9   发布时间: 2008-11-12

还有 我的 thinkpad r61 在kvm里面 无法用 方向键 怎么办?

作者: code9   发布时间: 2008-11-12

code9 写道:
还有 我的 thinkpad r61 在kvm里面 无法用 方向键 怎么办?


这个问题我没有碰到过,不过你可以看看qemu-system-x86_64 --help的帮助,有个 -k language 的参数说明。

作者: liangmenglm   发布时间: 2008-11-13

code9 写道:
我用Ghost还原Winxp 到 KVM虚拟机里的 速度 是20mb 比 Vbox 速度 差老远 老远
当然 Ghost 还原无论是在 kvm 还是 vbox 都是无法启动的 呵呵

只是觉得好玩 就都试了一下


找个比较耗CPU的程序试试,你就明白什么是区别了。。。
而且比磁盘速率也是不能这样比的。

作者: liangmenglm   发布时间: 2008-11-13

刚装好VBOX就看到此文,回去一定试一试,先谢谢楼主牛人。

作者: hyxuzhimin   发布时间: 2008-11-14

我的系统是8.10的
我做到这一步。编辑保存interfaces
代码:
sudo vi /etc/network/interfaces

代码:
auto tap0
iface tap0 inet manual
up ifconfig $IFACE 0.0.0.0 up
down ifconfig $IFACE down
tunctl_user hyxuzhiming      \\lm是我的用户名,在这里换为你的用户名

auto br0
iface br0 inet static       \\当然这里也可以使用DHCP分配
bridge_ports eth0 tap0
address 192.168.0.4
netmask 255.255.255.0
network 192.168.0.1
broadcast 192.168.0.255
gateway 192.168.0.1


然后
代码:
sudo /sbin/ifup tap0

代码:
sudo /sbin/ifup br0

出现
hyxuzhiming@hyxuzhiming-desktop:/etc/network$ sudo /sbin/ifup tap0
/etc/network/interfaces:8: too many parameters for iface line
/sbin/ifup: couldn't read interfaces file "/etc/network/interfaces"

hyxuzhiming@hyxuzhiming-desktop:/etc/network$ sudo /sbin/ifup br0
/etc/network/interfaces:8: too many parameters for iface line
/sbin/ifup: couldn't read interfaces file "/etc/network/interfaces"
我重启之后还是如此,看样子是ifup看不懂我写的interfaces啊。请楼主帮帮忙哦。

作者: hyxuzhimin   发布时间: 2008-11-15

楼上的,你的eth0 的配置呢?

作者: liangmenglm   发布时间: 2008-11-15

原来的被我用这个替代了哦,可能是eth0吧。
不过现在还能上网。家里是路由器上网。
附件:

.jpg [ 8.57 KiB | 被浏览 1355 次 ]

作者: hyxuzhimin   发布时间: 2008-11-15

呵呵。挺好的教材,我把他添加到wiki了。不知道可不可以。

作者: uyghurix   发布时间: 2008-11-15

-clock rtc出现如下错误:

Available alarm timers, in order of precedence:
rtc
Unable to find any suitable alarm timer.
Terminating

作者: sw2wolf   发布时间: 2008-11-16

sw2wolf 写道:
-clock rtc出现如下错误:

Available alarm timers, in order of precedence:
rtc
Unable to find any suitable alarm timer.
Terminating


去掉-color rtc或者用root权限运行

作者: xxb   发布时间: 2008-11-16

大家注意了,KVM-78、79这两个版本虽然修正了很多BUG和增加和很多功能,但是存在缺陷,磁盘性能方面有问题!

作者: liangmenglm   发布时间: 2008-11-18

加上-smp 2后, 虚拟的XP比不用-smp 2慢多了!!!

$cat /proc/cpuinfo
processor : 0
vendor_id : AuthenticAMD
cpu family : 15
model : 107
model name : AMD Athlon(tm) 64 X2 Dual Core Processor 3600+
stepping : 1
cpu MHz : 1000.000
cache size : 512 KB
physical id : 0
siblings : 2
core id : 0
cpu cores : 2
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch ts fid vid ttp tm stc 100mhzsteps
bogomips : 2010.65
clflush size : 64

processor : 1
vendor_id : AuthenticAMD
cpu family : 15
model : 107
model name : AMD Athlon(tm) 64 X2 Dual Core Processor 3600+
stepping : 1
cpu MHz : 1000.000
cache size : 512 KB
physical id : 0
siblings : 2
core id : 1
cpu cores : 2
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 1
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch ts fid vid ttp tm stc 100mhzsteps
bogomips : 2010.65
clflush size : 64

作者: sw2wolf   发布时间: 2008-11-18

SMP在这里解释为:多路对称处理器
我测试的结果为不加SMP选项的时候只有一个CPU在工作,加上SMP 2选项后是两个CPU,在多任务下差别感觉还是明显的。并没有出现速度变慢的现象,不知道楼上用的是哪个版本?

作者: liangmenglm   发布时间: 2008-11-18

liangmenglm 写道:
SMP在这里解释为:多路对称处理器
我测试的结果为不加SMP选项的时候只有一个CPU在工作,加上SMP 2选项后是两个CPU,在多任务下差别感觉还是明显的。并没有出现速度变慢的现象,不知道楼上用的是哪个版本?

我也是“不加SMP选项的时候只有一个CPU在工作,加上SMP 2选项后是两个CPU”, 加上后用rdesktop进入XP都要慢很多,不知什么原因?

$modinfo kvm
filename: /lib/modules/2.6.24-21-rt/extra/kvm.ko
license: GPL
author: Qumranet
version: kvm-78
srcversion: 113693662C15CDD7FA74FCF
depends:
vermagic: 2.6.24-21-rt SMP preempt mod_unload 586
parm: oos_shadow:bool

$ modinfo kvm-amd
filename: /lib/modules/2.6.24-21-rt/extra/kvm-amd.ko
license: GPL
author: Qumranet
version: kvm-78
srcversion: E098BCDE042C01189771F46
depends: kvm
vermagic: 2.6.24-21-rt SMP preempt mod_unload 586
parm: npt:int

作者: sw2wolf   发布时间: 2008-11-19

按LZ的网桥模式设置后,客户机网络设置为:IP192.168.1.100 sub:255.255.255.0 gate:192.168.1.1 dns:202.96.134.133

只能ping通主机192.168.1.3,无法ping通路由器IP192.168.1.1,也无法上网。

请问LZ该如何解决?谢谢!

作者: boy9907   发布时间: 2008-11-26

楼上的,能不能看一下你的interface ?

作者: liangmenglm   发布时间: 2008-11-27

代码:
open /dev/kvm: No such file or directory
Could not initialize KVM, will disable KVM support

楼主帮忙看下

作者: chenwl   发布时间: 2008-11-27

对于我们这些新手们,简直是不敢想象,太复杂了,收藏先,以后再慢慢研究

作者: wenfangzheng   发布时间: 2008-11-28