强悍的KVM!

Add a comment May 31st, 2008

作品采用署名-非商业性使用-相同方式共享 3.0 许可协议进行许可。转载请注明出自逆时

VBOX->VMware->KVM

我的虚拟机使用路线….
好吧,VBOX用得挺久,只是当时台机垃圾,受不了慢速..也就不用了.
本本刚用VMware,感觉还不错..
but,VMware的速度还是不能满足我的需求..so,转战传说中的KVM.

不如我们先看看我刚用上KVM时候激动的饭否记录..–>

VMware不能满足我的需求。。。转战KVM。 2008-05-26 18:09

KVM好强大…速度好快…. 2008-05-26 18:09

安装虚拟XP过程中,ubuntu使用竟然很流畅…. 2008-05-26 18:16

10分钟….XP安装好了?!VMware的时候用了40分钟才安装好…………. 2008-05-26 18:20

内存占用:264.CPU使用率很低.. 2008-05-26 18:21

P.S.1:文章比较长..是断断续续的写的,可能有错误.请包涵并指出,谢谢^^
P.S.2:以下所述内容部分有参考+抄袭ubuntu forum上的: [教学]使用最快速的虚拟机 KVM(我也给补充了很多很多内容噢>.<)

好了..回到正题,写KVM的使用.

什么是KVM呢?

KVM 是新兴的虚拟化项目,最早由 Avi Kivity 等人开发,并于 2006 年 8 月推向社区,10 月被 Linux 社区接受。它以其代码简单、易于理解掌握以及不需要重新安装等优点很快受到了业界的欢迎与及 Linux 项目创始人 Torvalds 的支持,并于 2006 年底被集成进 Linux 2.6.20 版内核,从此成为了 Linux 的一个组成部分

在这里先说好了.
要使用KVM,你的CPU必须支持VM技术!!
判断方法如下:

egrep '(vmx|svm)' /proc/cpuinfo

如果没有任何的输出,说明你的cpu不支持….以下所写的,你可以当作娱乐来看了….
我的输出:

leewings@leewings-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 mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_good pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch
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 rep_good pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch

我这边显示的是svm据说,有的机器是会出现vmx的.是不是因为CPU框架不同呢?vmx是Intel的?我用的AMD..

接下来,继续废话吧..

相对于老大哥VBOXVMware,KVM实在年轻..
KVM项目从产生到收录到Linux内核中仅用了几个月的时间,在如此短的时间取得这么大的进步是很惊人的,可见,它是很强悍的..!
用了一下,就会明显感觉到KVM的最闪亮的优点:速度快!
这点从我们饭否记录里就可以明显感觉到了….

值得一提的是,作为一个年轻、热门的,写进内核的项目,KVM肯定会逐步在硬件等方面得到linux最基础的支持.
这个是什么一个概念啊..有多少项目能有这样的支持了?这优势..

不过….KVM不像2个老大哥一样”简单”操作..
主要是因为..它是使用命令行操作的..

呃..一开始我也怕了….
因为本人认为用命令行是件麻烦的事情,而本人最怕的就是麻烦..
结果,这么长时间使用ubuntu,我发现使用命令行是那么的清晰简单,也是最安心最稳定的.~
so,硬着头皮耍下去!!

linux里还有另外一个命令行操作的虚拟化技术:qemu.其实,这个我也没怎么了解..

据说,qemuKVM之间存在着这样的关系:

1,kvm 不是 qemu 的插件。记住,kvm基本是一个独立的系统,只不过借用了qemu的代码和操作界面。也就是说,你在命令行中如果使用 qemu 的地方,只需要qemu换成 kvm,其他的参数基本都不用修改就可以运行,这样的效率是 qemu 的很多倍。所以,如果你想用好 kvm,去看看 qemu 的说明吧。

2,如果要用kvm,你的cpu必须支持 vm 技术,否则和 qemu 的效率基本相同。

重点来了!!
让我们安装KVM吧~

sudo apt-get install kvm qemu

之所以要把qemu也装上,是因为KVM没有包含建立虚拟磁盘的工具….无语.

接下来,要使用KVM,你肯定要有运行它的权限啦.
将你加入KVM组吧.

sudo adduser yourusername kvm

另外,如果要让虚拟机能访问你的物理磁盘,你得将你加入多一个组:

sudo adduser yourusername disk

接下来..ctrl+alt+backspace吧~

重新登录之后呢,就可以创建磁盘啦.
便于管理,我们要先在用户目录下建一个kvm目录,进入之.

qemu-img create -f qcow2 WindowsXP.img 8G

参数说明:

  • -f qcow2 :磁盘的格式
  • WindowsXP.img :磁盘名字..
  • 8G :摆明是大小设定..

这样就可以了.其他参数可以自己敲”qemu-img”+enter,慢慢看啦.“

安装XP登场!

安装是很快的..准备好iso之后..

kvm -M pc -m 256 -soundhw es1370 -hda /home/leewings/kvm/WindowsXP.img -localtime -net nic,vlan=0 -net user,vlan=0 -cdrom /media/ACER/MY SKY/Download/ISO/Windows/DeepinXP-V5.9f.iso -boot d -no-acpi

windows xp的安装界面.~~
可以看出,KVM的”界面”真简洁啊..
安装是快速流畅的….真强悍.

先说几个关于安装的关键参数,还有一些常用的,下面会说滴~

  • -m 256 虚拟机内存大小
  • -soundhw es1370 声卡支持
  • -hda /home/leewings/kvm/WindowsXP.img 刚刚建立的虚拟磁盘C盘
  • -cdrom /media/ACER/MY SKY/Download/ISO/Windows/DeepinXP-V5.9f.iso 安装光盘的位置D盘(好吧,我的路径很深..)
  • -boot d 从光驱启动
  • -no-adpi 官方推荐使用这个参数,原因是qemu/kvm不太兼容,可能造成cpu的占用偏高.不过,有的人用不了这个参数….那就不用吧…..我成功使用,嘿嘿

安装好之后,可以先随便乱用一下..那速度..VBOXVMware根本无法比拟….真棒!!

有点不爽诶..USB不能用?!鼠标很卡??!好吧..
先说关于鼠标卡,我们换种方式来使用吧~~

记得很久以前我说过的rdesktop么?我们又要用它啦~

首先要在XP里作如下设定:

  • 给你的用户加个密码..我的是123456.嘿嘿….多好
  • 打开你的远程桌面支持..
  • 控制面版->用户帐户->更改用户登录或注销的方式,“使用欢迎屏幕”和“使用快速用户切换”都勾上
  • 关机然后你会看到一个神奇的画面….这个,是N年前的电脑才出现过的..

    呃..我的截图没有窗口的….其实,它是有窗口的~
    不如..我们直接按叉叉呀.~
    其实,可以在终端->”CTRL+C”
    然后别急..我们来解决USB的问题.

  1. 「系统」→「系统管理」→「用户和组」→「管理组」新增群组「usbusers」,并将允许使用KVM的使用者都勾选起来。
  2. 打开终端,
    sudo gedit /etc/udev/rules.d/40-permissions.rules
  3. 在打开的文件中寻找:
    SUBSYSTEM=="usb_device"

    将其补充成:

    SUBSYSTEM=="usb_device", GROUP="usbusers", MODE="0664"
  4. 由于 ubuntu中预设关闭usbfs的支援,so..
    sudo gedit /etc/init.d/mountdevsubfs.sh
  5. 开启后,寻找:
    1
    2
    3
    4
    5
    6
    7
    
    # 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

    将最后四行的#去掉,如下所示:

    1
    2
    3
    4
    5
    6
    7
    8
    
    # 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
    搞定!!!!!!!

还是别急..我们再来解决网卡桥接的问题..

    下面是我在Ubuntu8.04下设定kvm(适用于所有虚拟机)中桥接模式的过程,桥接模式可以使Host OS 和Guest OS在区域网路中处于平行地位。

    安装所需工具uml-utilities,bridge-utils(已有)

    sudo apt-get install uml-utilities
  1. 为Host OS建立桥接界面(Bridge)和虚拟网卡设备(tap device)这样作的原故,是使将来取得IP是由桥接界面(bridge),而不是由ethx(真实的有线网卡)或tapx(虚拟网卡)来取得IP将下面的文本保存成文件,有需要按自己的情况修改一两个地方。
    另存为在/etc/init.d/virtualbridgedrun

    sudo gedit /etc/init.d/virtualbridgedrun
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    # Virtual Bridging
     
    # Create a tap device with permission for the user running kvm
    # 建立一个使用者(user)有权限的设备tap0,user为自己用户名
    tunctl -t tap0 -u user
    chmod 0666 /dev/net/tun
     
    # Bring up ethX and tapX in promiscuous mode
    # 将ethx和tapx网卡界面设为混杂模式(Promiscuous)
    ifconfig eth0 0.0.0.0 promisc
    ifconfig tap0 0.0.0.0 promisc
     
    # Create a new bridge and add the interfaces to the bridge.
    # 建立新的桥接界面(bridge),並把 eth0, tap0加入bridge
    brctl addbr br0
    brctl addif br0 eth0
    brctl addif br0 tap0
     
    # 下面是两种获取IP的方式,可以自由选择,把不需要的注释掉就好了。
    # 将bridge设成静态IP。XXX都分别对应IP、子网掩码、网关。
    # 注意,以下设定不能与eth0的相同,不然都不能上网....
    # 唠叨多一句,自动获取IP的方式我从来没成功过..都会和eth0冲突,两边都不能上网了....
    #ifconfig br0 XXX.XXX.XXX.XXX netmask XXX.XXX.XXX.XXX up
    #route add default gw XXX.XXX.XXX.XXX
    # 将bridge设成动态DHCP分配IP。
    # dhclient br0
  2. 给上面的文件加上可执行权限
    sudo chmod +x /etc/init.d/virtualbridgedrun
  3. 再建立一个可执行文件
    sudo gedit /etc/init.d/virtualbridge

    添加如下内容:

     /etc/init.d/virtualbridgedrun &

    给它加上可执行权限

    sudo chmod +x /etc/init.d/virtualbridge
  4. 在/etc/rc2.d目录下做一个指向/etc/init.d/virtualbridge的链接
    cd /etc/rc2.d/
    sudo ln -sf ../init.d/virtualbridge S999virtualbridge
     #取名S999开头是为了让它最后启动

    重新启动电脑之后,就完成KVM桥接网路模式的设定了.
    输入ifconfig看看吧,多了个tap0噢~
    马上启动Guest吧 !Guest的网路设定和Host是独立平行的。

好吧,搞定所有前奏了.
终于需要启动你的虚拟机了,..

kvm -M pc -m 256 -hda /home/leewings/kvm/WindowsXP.img -hdb /dev/sda -net nic -net tap,ifname=tap0,script=no -usb -localtime -redir tcp:3389::3389

P.S.:普通联网方式:

kvm -M pc -m 256 -hda /home/leewings/kvm/WindowsXP.img -hdb /dev/sda -net nic -net user -usb -localtime -redir tcp:3389::3389

稍等..其实就是等到登录界面………

然后,再起一个终端

rdesktop localhost:3389 -u administrator -p 123456 -g 1280x800 -D -r sound:local

windows..它出现啦!鼠标很平滑..~嘿嘿

好了,现在解释一下参数吧.

下面是KVM的参数.

  • -hda /home/leewings/kvm/WindowsXP.img 之前创建并安装了XP的虚拟磁盘
  • -hdb /dev/sda 让kvm加载我的系统分区.这个命令加载的是全部的分区..可以根据自己的情况调节的.
  • -net nic -net user 使用简单网络访问,可以让虚拟机上网.
  • -usb 使能 USB 支持.
  • -localtime 时间同步,你该不会希望你的虚拟机是另外的时间吧?!
  • -redir tcp:3389::3389 把虚拟机的远程桌面服务器端口映射到宿主机的端口,这个等同windows的远程桌面.

下面是rdesktop的参数

  • localhost:3389 虚拟机的网络IP(如果是普通方式,直接就是”localhost”;如果是桥接,第一次要到guest里面查看IP地址..):端口
  • -u administrator 用户名,像我这种直接安装精简版ISO的,一般都是administrator啦..
  • -p 123456 密码..我刚设定的123456
  • -g 1280×800 显示分辨率,根据需要来调整咯
  • -D 消除远程终端窗口的边框
  • -r sound:local 启用声音.注意:不能与KVM参数中的”-soundhw es1370″共用!

这种方式,可以享受KVM的所有效率,它真的快到不行啊..,
同时,鼠标是不是很快了?另外,几乎可以避免所有的键盘冲突.多好,嘿嘿~

不过,我们知道,用rdesktop连接,只能断开不能关机..
那如果加入了”-nographic(不启动图形界面)”参数,我要关机怎么办?那我们要去查看虚拟机的界面.
方法有2:

  • 使用远程桌面工具,地址 localhost 端口 5900.
  • 使用远程终端,地址 localhost 端口 3389.

使用上了,肯定就把我常用的软件给弄上啦~

对于VBOXVMware无缝模式,我还是恋恋不舍….怎么办?!

    只需要一个小改动^^看我的~

  1. 在XP,下载SeamlessRDP,并解压到C盘根目录下,C:seamlessrdp,然后就登出吧
  2. ubuntu,通过rdesktop,用seamlessrdpshell.exe这个东西调用虚拟机上的软件,只把软件界面搞到本地来用.在我这里打开IE的命令如下:
    rdesktop -A -s "C:seamlessrdpseamlessrdpshell.exe C:Program FilesInternet ExplorerIEPLORER.EXE" guestip:3389 -u administrator -p 123456  -r sound:local

      创建了4个启动器

    • 桥接模式的windows xp
      kvm -M pc -m 256 -hda /home/leewings/kvm/WindowsXP.img -hdb /dev/sda -net nic -net tap,ifname=tap0,script=no -usb -localtime -redir tcp:3389::3389
    • 使用SeamlessRDP的rdesktop
      kvm -M pc -m 256 -hda /home/leewings/kvm/WindowsXP.img -hdb /dev/sda -net nic -net user -usb -localtime -redir tcp:3389::3389
    • 普通联网模式的windows xp
      rdesktop guestip:3389 -A -s "C:seamlessrdpseamlessrdpshell.exe C:Program FilesInternet ExplorerIEPLORER.EXE" -u administrator -p 123456  -r sound:local
    • 普通的rdesktop
      rdesktop localhost:3389 -u administrator -p 123456 -g 1280x800 -D -r sound:local

tips:不知道为什么,KVM使用SeamlessRDP的rdesktop不是很稳定..很容易就退出………..以前在vbox中是不会出现的..囧

这样一来,我的虚拟机就配置好了..花了一个星期时间….主要是因为上课/写作业等事情,要断断续续的来做..
…累..

呼..搞定了!
真爽!!这速度,以后使用就好舒坦了..

本来想附上自己翻译的KVMrdesktop参数表..
但是,目前对于我来说..水平有限….只能当草稿存起来了..
同志们就自己敲KVMrdesktop自己看E文的参数表吧..~

就这样吧,我要休息了..

PS.来自xjx的补充:

如果出现 open /dev/kvm: No such file or directory, 可能有人的内核还没有加入kvm支持, 增加一个加入 kvm 到内核的命令, 这个是在 http://forum.ubuntu.org.cn/vie…..0ee2315c7a 看到的.

命令:

modprobe kvm_intel 或者kvm_amd
  1. May 31st, 2008 at 21:10 | #1
    vilinov

    intel和amd的遗愿啊……

  2. May 31st, 2008 at 23:46 | #2

    总体来说感觉写得挺不错,很有条理,步骤很清晰,不过我依照你的步骤发现WindowsXP.img是在/home/username/之下,iso在硬盘上的也可直接安装,只需改改路径。
    自vista刚出时在台式xp下使用了vmware之后便没用过其他虚拟机,这次试了一下kvm,很好很强大,装完进入系统啥驱动也不用装(我这本子的XP驱动贼难找),打开ie6直接上网,这次可以在本子上慢慢回味xp了,集成sp3的msdn英文版。

  3. June 1st, 2008 at 00:08 | #3

    …..好吧,注意这句话:

    重新登录之后呢,就可以创建磁盘啦.
    便于管理,我们要先在用户目录下建一个kvm目录,进入之.

    呵呵,这样,img就保存在/home/username/kvm/下了~~

    “iso在硬盘上的也可直接安装”
    我的就是在硬盘上的..嘿嘿

  4. June 1st, 2008 at 09:55 | #4

    恩, 很厚道.

  5. June 1st, 2008 at 09:58 | #5

    太帅了啊…

  6. June 10th, 2008 at 10:06 | #6
    xjx

    超级感谢!
    楼主你太帅了!

    如果出现 open /dev/kvm: No such file or directory, 可能有人的内核还没有加入kvm支持, 增加一个加入 kvm 到内核的命令, 这个是在 http://forum.ubuntu.org.cn/vie.....0ee2315c7a 看到的.

    命令:
    modprobe kvm_intel 或者kvm_amd

  7. June 11th, 2008 at 19:33 | #7

    谢谢你噢。

    你补充的内容已添加^^

  8. October 16th, 2008 at 21:35 | #8
    bundur

    在终端模式执行XP时,需要关机可以在XP中运行 cmd
    c:/>shutdown -s -f -t0

    这样就可以直接关机了,而不是“断开”

  9. October 17th, 2008 at 13:17 | #9

    呵呵.
    这个是 CMD 的命令了诶…..
    我不了解 CMD …. 所以不知道呢~~
    谢谢提醒^^

  10. October 17th, 2008 at 16:19 | #10
    bundur

    shutdown -s -f -t0

    将这个命令写到一个文本文件中,另存为 ‘关机.bat’ 放在桌面上或工具栏里,要关机时点它执行就可以了。

    我也在试用 KVM 现在有一个问题就是桥接后,KVM中的虚拟机可以访问外部的主机,而外部网络中的主机都访问不了它,同样的方法在 VirtualBox 中是正常的,可访问的,连 wLan0 都可以桥接

  11. October 17th, 2008 at 17:11 | #11
    bundur

    呵呵,我自己搞错了,端口忘记开了,因为原先是开的,后来升级了被自动关了。就是还有问题,设置桥接后,不管我再用 -net user在KVM中的XP都不认了,还是原先的桥接IP,这时因为前台的桥没有了,就变孤岛了,这问题很怪。我是一直在用VMware,前阵子VirtualBox升级到1.6.4现在又升级到2.0.2,就改用VirtualBox了,因为VMware升级到6.5后反而不流畅了,所以放弃了,后又听说 KVM 集成到内核了,也就赶赶时髦结果,KVM一安装,VMware和VirtualBox冲突都不能用了!哈哈!

  12. October 17th, 2008 at 17:21 | #12
    bundur

    对不起,上面命令:shutdown -s -f -t0 有错
    就是 -t和后面的0中间要加一空格即:shutdown -s -f -t 0

  13. October 17th, 2008 at 19:58 | #13

    好吧, 呵呵. 谢谢你哦^^~

    奇怪, 我 KVM 和其他两个都不冲突的说….

    不过呢, 不好意思哦, 我现在没空研究 KVM 了..
    呵呵, 明天要比赛呢~~ 然后一个月后的比赛更重要….. 呵呵.~~~~

    如果有幸, 我比赛后我们再一起研究吧^^ 我打算到时候用 Debian 了..`~

  14. October 18th, 2008 at 12:45 | #14
    bundur

    我是从Debian转到Ubuntu的,三年前用的是Debian
    KVM 和 VirtualBox 是冲突的,网上也很有人反映了

  15. October 18th, 2008 at 19:55 | #15

    好吧….. 可能是我当时没注意吧 :-)

    Ubuntu 太慢了…. 而且, 很多东西都帮你定制好了.. 呵呵.
    想用下 Debian, 锻炼下~
    本来想用 Gentoo 的, 但是没那么多时间去研究~ 所以还是决定用 Debian 了.

  16. November 1st, 2008 at 01:09 | #16
    dayong

    ubuntu8.10的usb权限问题已不是如上所说的了

  17. November 1st, 2008 at 10:18 | #17

    呵呵.. 这篇文章是 8.04 的时候写的了..“~~
    8.10, 我已经不在用 ubuntu 了.. 所以, 不知道什么时候才能维护这篇文章咯..“`~

  18. November 26th, 2008 at 12:57 | #18
    tnsdcs

    那你现在用啥?

  19. November 14th, 2009 at 20:59 | #19

    只能用安装版的XP Ghost按道理也行 一般操作是对虚拟硬盘分区 然后激活主分区 就是使C盘处于活动 就能用Ghost安装xp了 以前这方法在VM下行得通 不知道用kvm能不能这样 用ghost来装xp呢~~~~博主有时间研究一下~~~

  1. No trackbacks yet.
Comments feed