Pages

Friday, 27 January 2012

在ubuntu中安装KVM

听讲XEN很快就要从LINUX内核中去掉,redhat和Ubuntu也大力的在推广KVM,所以在Ubuntu下整了一下KVM,相当容易使用,基本比Vmware还要容易,但性能好上很多倍,因为他是半虚拟的,很大程序上可以直接使用真实的硬件.
RedHat 红帽CTO Brian Steven在一次记者招待会说:“我们致力于Xen,RHEL 5有10年的生命周期,因此会有一个较大的交叉过渡。我们将在Red Hat 6中全面使用KVM,但KVM目前已经准备就绪,完全可以正式投入到数据中心和云中,不用再等待了!”
KVM要使用2.6.20以上的内核才行.Ubuntu到是不用担心,它基本一直使用的是最新的内核.

需要关心一点就是,你的硬件,CPU是不是支持半虚拟(VT/AMD-V),使用下面的命令可以查看是否支持.
$ grep -E '(vmx|svm)'   /proc/cpuinfo


我原来以为KVM很难装,没想到现在容易成这样了.太方便了:
$ sudo apt-get install kvm libvirt-bin ubuntu-vm-builder  bridge-utils kvm-pxe uml-utilities

安装KVM在ubuntu中的GUI管理软件,象我,拿ubuntu当桌面,就不使用命令…呵呵
$ sudo apt-get install virt-manager virt-viewer
需要设置一下网桥:
$ sudo /etc/init.d/networking stop

 我们来修改一下配置:
$ sudo vim /etc/network/interfaces

 静态IP和使用DHCP是不一样的,DHCP修改成下面这样:
auto br0

iface br0 inet dhcp

bridge_ports eth0

bridge_stp off

bridge_fd 5

bridge_maxwait 5



static:
auto br0

iface br0 inet static

address 192.168.0.xxx

network 192.168.0.0

netmask 255.255.255.0

broadcast 192.168.0.255

gateway 192.168.0.1

bridge_ports eth0

bridge_stp off

bridge_fd 5

bridge_maxwait 5

完事后
进入ubuntu的“应用程序”-> “系统工具” -> “虚拟系统管理”就可以全GUI来玩kvm啦

RedHat Centos 安装 KVM:
在 Centos 中安装 kvm 也一样很容易,
1. 安装 KVM 和 virtinst (一个创建 virtual machines 的工具 )
$ yum install kvm kmod-kvm qemu libvirt python-virtinst

 2. 装完后记的重起,重起后检查模块是否有加载
$ lsmod | grep kvm

kvm_amd                50452  0

kvm                   109264  1 kvm_amd

 也可以使用 virsh 来测试:
$ virsh -c qemu:///system list

 3. 安装桥接管理的工具
$ yum install bridge-utils

 4. 安装 GUI 的管理软件
$ yum install virt-manager

KVM 的高级管理
KVM 现在相当成熟,在三个比较常用管理程序(我所知道的),大家平时玩玩的话,就用 GUI 来管理就好了,GUI 都会我就不详细写了:

virt-manager: 这个我最常用,是 GUI 的,需要 x windows 的支持。这个是 RedHat 开发,大家想了解可以到  http://virt- manager.et.redhat.com/ 上看看

virt-install:python 写的文字介面的管理 kvm 的程序,这个也是Red Hat 开发的哦。

ubuntu-vm-builder:这个是 Canonical (Ubuntu)开发的文字的管理程序。

virt-install 的基本使用

(1. 安装 virt-install 和 图形化的连接软件 virt-viewer
$ sudo apt-get install python-virtinst virt-viewer
详细使用可以 man virt-install
(2. virt-install 安装虚拟系统
$ virt-install \

--connect qemu:///system \

--name= 虚拟机器的名字 \

--ram=设置内存的大小 [MB] \

--os-type=操作系统的类型 [linux ] \

--os-variant=操作系统的版本 [centos 5.4] \

--hvm [全虚拟化( hvm )与半虚拟化( paravirt  )选择其一] \

--paravirt  [全虚拟化( hvm )与半虚拟化( paravirt  )选择其一] \

--accelerate  [KVM 加速器] \

--cdrom=系统安装的CD路径 [*.iso] \

--file=虚拟硬盘的路径 [*.qcow2] \

--file-size=虚拟硬盘的大小 [GB] \

--bridge=br0 \

--vnc \

--noautoconsole  \

--debug

 注意 Windows 只能用有全虚拟化( hvm )与半虚拟化( paravirt  )中选择 hvm.hvm 的意思是指硬件辅助的虚拟化,就是需要所谓的 VT 支持的。

 建出来的虚拟机会在 /etc/libvirt/qemu/虚拟机器名称.xml 有个配置文件

(3. 使用 virt-install  启动虚拟的机器
进入 virsh 中,所有 virsh 的操作都要先进入这个
$ virsh

 管理启动
virsh# start 虚拟机器名字

virsh# list  --all

virsh# quit

(4. 安装管理查看 virt-install 安装后的系统是否正常
virt-viewer --connect qemu+ssh://帐号@虚拟机实体主机IP    要连接的虚拟机器名字

virt-install 的其它使用

在原来的基础上复制一个新的虚拟机器   
$ virt-clone  --connect=qemu:///system \

-o 旧的虚拟机器名称  -n 新的虚拟机器名称  -f  新的虚拟硬碟路径 [*.qcow2]

查看所有虚拟出的机器
virsh# list --all

dump 虚拟出的机器配置文件
virsh# dumpxml 虚拟出的机器名称  /tmp/虚拟出的机器配置文件 [*.xml]

使用现有的虚拟出的机器配置文件建立虚拟新机器:
virsh# define  /etc/libvirt/qemu/虚拟出的机器配置文件 [*.xml]

移除虚拟出的机器
virsh# undefine 虚拟出的机器名称

关闭虚拟出的机器
virsh# shutdown 虚拟出的机器名称

关掉虚拟出的机器的电源
virsh# destory 虚拟出的机器名称

KVM的小技巧
1.提升KVM的网络和硬盘IO在linux中的性能
官 方提供了一个叫kvm-guest-drivers-windows的网卡驱动很不错,虚拟机的启动参数那里加上model=virtio这个参数,界面 中也是可以设置的.硬盘也有virtio的驱动,记的使用.在Virt-manager 中可以选择 virtio disk.获得高性能的网络和磁盘操作
virtio的网卡驱动的地址: http://sourceforge.net/project/showfiles.php?group_id=180599&package_id=267943
virtio的硬盘驱动的地址:http://www.linux-kvm.com/sites/default/files/viostor.iso

2.和真实机器中资料共享
这个是超级方便的,不需要象VBox搞个文件夹,只要在Host的设置中直接给真实的Dev的块设备直接设定到Guest的配置中,然后在进入kvm中的系统,直接mount就行

3.转换VMWare的image让KVM能使用
我们先要安装一个小软件virt-goodies.
$ sudo apt-get install virt-goodies

然后使用vmware2libvirt来给VMWare VM的基本资料vmx转成KVM可以读入的XML. 如
vmware2libvirt -f myvm.vmx > myvm.xml

在转VMWare VM的disk image, 使用qemu-img转成KVM能读的文件.
qemu-img convert -f vmdk myvm.vmdk -O qcow2 myvm.qcow2

可能还需要修改一下vmx转成的xml,
disk中的target dev,在VMWARE是ide(target dev=’hda’ bus=’ide’)可能要修改成scsi(target dev=’sda’ bus=’scsi’),我们看能不能找到ROOT就知道是不是用对了;

bridge mode, 给interface type=’network’修改成interface type=’bridge’, 而source network=’default’修改成source bridge=’br0′.

qcow选项,则会创建QCOW(写时复制)格式

修改后给VM的配置加入到libvirtd中.
virsh -c qemu:///system define myvm.xml

virsh -c qemu:///system list --all

FAQ:

1.如果在安装的时候见到"FATAL: Error inserting kvm_intel"
这是因为没有在BIOS中打开virtualization.需要进入BIOS中打开,然后断电重起.进入系统后打modprobe kvm-intel来加载模块

   先在虚拟机中打开windows自己的远程桌面,然后给用户设定密码,然后运行 rundll32 netplwiz.dll,UsersRunDll 启 用windows的自动登录。(这三步必不可少,否则rdesktop是无法连上winxp的)
   重新启动虚拟机,当听到winxp后台登录的声音后,即可用rdesktop远程登录:

    rdesktop localhost:3389 -u *** -p *** -g 1280×700 -r sound:local

-u winxp的用户名, -p winxp的密码, -r sound:local  启用声音

现在可以看到桌面了吧。是不是灰常流畅呢?鼠标、键盘 都非常完美啊,剪贴板也可以公用哦。堪比装了tools的virtualbox,但是比后者占用的资源要少的多。
-------------------------------------------------------------------
在 2010年4月发布的RHEL 6.0 Beta版中 ,去掉了Xen,这也许是第一个不包含Xen Hypervisor的知名Linux发行版,之前有报道过Red Hat有可能会在RHEL 6.0中用KVM完全代替Xen,现在看来以前的消息一点不假。KVM 是指基于 Linux 内核的虚拟机(Kernel-based Virtual Machine)。增加 KVM 到 Linux 内核是 Linux 发展的一个重要里程碑,这也是第一个整合到 Linux 主线内核的虚拟化技术。在 KVM 模型中,每一个虚拟机都是一个由 Linux 调度程序管理的标准进程,你可以在用户空间启动客户机操作系统。一个普通的 Linux 进程有两种运行模式:内核和用户。 KVM 增加了第三种模式:客户模式(有自己的内核和用户模式)。
KVM 所使用的方法是通过简单地加载内核模块而将 Linux 内核转换为一个系统管理程序。这个内核模块导出了一个名为 /dev/kvm 的设备,它可以启用内核的客户模式(除了传统的内核模式和用户模式)。有了 /dev/kvm 设备,VM 使自己的地址空间独立于内核或运行着的任何其他 VM 的地址空间。设备树(/dev)中的设备对于所有用户空间进程来说都是通用的。但是每个打开 /dev/kvm 的进程看到的是不同的映射(为了支持 VM 间的隔离)。KVM安装 KVM 之后,您可以在用户空间启动客户操作系统。每个客户操作系统都是主机操作系统(或系统管理程序)的一个单个进程。 图 1 提供了一个使用 KVM 进行虚拟化的视图。

图 1 KVM 原理图
一、KVM 虚拟机的管理工具
准确来说,KVM 仅仅是 Linux 内核的一个模块。管理和创建完整的 KVM 虚拟机,需要更多的辅助工具。QEMU-KVM:在 Linux 系统中,首先我们可以用 modprobe 命令加载 KVM 模块,如果用 RPM 安装 KVM 软件包,系统会在启动时自动加载模块。加载了模块后,才能进一步通过其他工具创建虚拟机。但仅有 KVM 模块是远远不够的,因为用户无法直接控制内核模块去做事情,还必须有一个用户空间的工具。关于用户空间的工具,KVM 的开发者选择了已经成型的开源虚拟化软件 QEMU。QEMU 是一个强大的虚拟化软件,它可以虚拟不同的 CPU 构架。比如说在 x86 的 CPU 上虚拟一个 Power 的 CPU,并利用它编译出可运行在 Power 上的程序。KVM 使用了 QEMU 的基于 x86 的部分,并稍加改造,形成可控制 KVM 内核模块的用户空间工具 QEMU-KVM。所以 Linux 发行版中分为 内核部分的 KVM 内核模块和 QEMU-KVM 工具。这就是 KVM 和 QEMU 的关系。 Libvirt、virsh、virt-manager:尽管 QEMU-KVM 工具可以创建和管理 KVM 虚拟机,RedHat 为 KVM 开发了更多的辅助工具,比如 libvirt、libguestfs 等。原因是 QEMU 工具效率不高,不易于使用。Libvirt 是一套提供了多种语言接口的 API,为各种虚拟化工具提供一套方便、可靠的编程接口,不仅支持 KVM,而且支持 Xen 等其他虚拟机。使用 libvirt,你只需要通过 libvirt 提供的函数连接到 KVM 或 Xen 宿主机,便可以用同样的命令控制不同的虚拟机了。Libvirt 不仅提供了 API,还自带一套基于文本的管理虚拟机的命令-- virsh,你可以通过使用 virsh 命令来使用 libvirt 的全部功能。但最终用户更渴望的是图形用户界面,这就是 virt-manager。他是一套用 python 编写的虚拟机管理图形界面,用户可以通过它直观地操作不同的虚拟机。Virt-manager 就是利用 libvirt 的 API 实现的。

二、 安装配置KVM 相关软件
1 系统要求:
处理器 需求:需要一台可以运行最新linux内核的Intel处理器 (含VT虚拟化技术)或AMD处理器 (含SVM安全虚拟机技术的AMD处理器 , 也叫AMD-V)。可以使用如下命令检查:
# egrep (vmx|svm) --color=always /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 pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy misalignsse
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 misalignsse
如果输出的结果包含 vmx,它是 Intel处理器 虚拟机技术标志;如果包含 svm,它是 AMD处理器 虚拟机技术标志;。如果你甚么都得不到,那应你的系统并没有支持虚拟化的处理 ,不能使用kvm。另外Linux 发行版本必须在64bit环境中才能使用KVM。
2 安装软件
安装KVM模块、管理工具和libvirt (一个创建虚拟机的工 具),我们使用命令行安装:
#yum install kvm virt-manager libvirt
#/sbin/service libvirtd start
3 确定正确加载kvm模块
运行命令 lsmod | grep kvm 检查 KVM 模块是否成功安装。如果结果类似于以下输出,那么 KVM 模块已成功安装:
# lsmod | grep kvm
kvm_amd 69416 1
kvm 226208 2 ksm,kvm_amd
4 检查KVM是否成功安装
virsh -c qemu:///system list
将会显示如下结果:
# virsh -c qemu:///system list
Id Name State
----------------------------------
如果在这里显示的是一个错误的信息,说明有些东西出现了问题。

三、 使用virt-manager建立一个KVM虚拟机
virt-manager 是基于 libvirt 的图像化虚拟机管理软件,请注意不同的发行版上 virt-manager 的版本可能不同,图形界面和操作方法也可能不同。本文使用了红帽6企业版的 virt-manager-0.8.4-8。创建KVM虚拟机最简单的方法是通过virt-manager接口。从控制台窗口启动这个工具,从root身 份输入virt-manager命令,点击file菜单的"新建"选项virt-manager接口界面如图2。
使用virt-manager建立一个KVM虚拟机
图2 virt-manager接口界面
virt-manager显示两种虚拟化方法:Qemu/KVM或者Xen,这里并选择Qemu/KVM作为hypervisor如图3。
使用virt-manager建立一个KVM虚拟机
图3 选择Qemu/KVM作为hypervisor
红帽企业版 6.0相比上个版本简化了虚拟化配置步骤分成五步:
1 选择虚拟机名称和指定一种安装方法:通过网络安装服务器 或者本地CD/DVD驱动包括本地ISO文件(这种方法更简单)。
另外新版本还支持网络启动和导入之前建立的虚拟机磁盘如图4。
使用virt-manager建立一个KVM虚拟机
图4选择虚拟机名称和指定一种安装方法
2 输入本地ISO文件路径和文件名如图5
使用virt-manager建立一个KVM虚拟机
图5 输入本地ISO文件路径和文件名选择本地ISO文件
3设置虚拟机使用的内存 容量和处理器 数量如图6。
使用virt-manager建立一个KVM虚拟机
图6 设置虚拟机使用的内存 容量和处理器 数量
4配置虚拟机的存储方法。对于存储后端有两种选择:物理存储设备或者使用之前建立磁盘文件。如果出于简单测试,创建文件作为存储后端。当创建虚拟磁盘时,默认的10GB如图7。
使用virt-manager建立一个KVM虚拟机
图7 对于简易安装,选择一个文件作为存储备份后端
5 网络配置,在这里选择NAT方式。下面最后可看到虚拟机信息的概况如图8。
使用virt-manager建立一个KVM虚拟机
图8 虚拟机信息
说明:"在安装前自定义配置"选项提供一些高级自定义配置。在最后窗口点击完成按钮后,安装将自动开启。过程跟平时安装普通操作系统一样,不再 赘述,不久之后,你的第一台KVM虚拟机的客户机就启动并运行了。说明这里笔者在KVM 虚拟机中运行的是一个linux 发行版本BackTrack。BackTrack是精简版Linux系统以及破解软件。可以利用其破解软件 来搜寻和破解无线网络的密码。运行界面如图9。
使用virt-manager建立一个KVM虚拟机
图9 KVM虚拟机的客户机


四、 使用virsh执行高级管理任务
virsh的学习曲线非常陡峭。但是另一种可选方式virt-manager的缺陷还很明显,virt-manager需要在系统内运行,这会浪费资源并为别有目的的人提供额外的进攻点。virt-manager的另一大缺点是需要通过图形工作站 运行远程接入的方式,才能对服务器 上 的虚拟机进行管理。而virsh则可以通过命令行执行各种各样的管理任务。如先前所说virsh通过主命令和子命令管理每个虚拟机功能。要学习virsh 很困难,因为有许多命令。virsh通过主命令和子命令管理每个虚拟机功能。要查看所有命令,输入virsh help。你可能发现大量命令,不过每个命令都有帮助指南,只需要输入virsh help。例如使用virsh help uri,就可以看到所有关于virsh uri命令的帮助。不过一旦你获得一个很强的命令功能,就能获得收益。下面是virsh命令实例:
1创建一个名称是myWin7的windows 7虚拟机
使用命令:
# yum install virt-viewer
virt-install --name myWin7 --hvm --ram 1024 --disk path=/tmp/win7.img,size=10 --network network:default --vnc --os-variant vista --cdrom /dev/hda
Starting install...
Creating storage file... | 10.0 GB 00:00
Creating domain... | 0 B 00:00
Domain installation still in progress. Waiting for installation to complete.
下面安装将自动开启。过程跟平时安装普通操作系统一样,不再赘述。运行界面如图10。
使用virsh执行高级管理任务
图10 安装windows 7
(2)查看虚拟机
# virsh -c qemu:///system list
Id 名称 状态

1 myWin7 running
(3)关闭虚拟机
#virsh shutdown myWin7
(4)彻底摧毁一个虚拟机
#virsh destroy myWin7
一 KVM虚拟机简介   kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中。它使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码很少。KVM目前已成为学术界的主流VMM之一。  KVM的虚拟化需要硬件支持(如Intel VT技术或者AMD V技术)。是基于硬件的完全虚拟化。而Xen早期则是基于软件模拟的Para-Virtualization,新版本则是基于硬件支持的完全虚拟化。但Xen本身有自己到进程调度器,存储管理模块等,所以代码较为庞大。广为流传的商业系统虚拟化软件VMware ESX系列也是基于软件模拟的Para-Virtualization。  二 KVM虚拟机安装与使用  1 前期准备  1.1确定机器有VT  终端输入命令: grep vmx /proc/cpuinfo (INTEL芯片)  grep svm /proc/cpuinfo (AMD芯片)  不知道芯片的生产厂商则输入:egrep '(vmx|svm)' /proc/cpuinfo  如果flags: 里有vmx 或者svm就说明支持VT;如果没有任何的输出,说明你的cpu不支持,将无法成功安装KVM虚拟机。  1.2 确保BIOS里开启VT:  Intel(R) Virtualization Tech [Enabled]  如有必要,还需在BIOS中开启VT-d  1.3 确保内核版本较新,支持KVM  用uname –r查看内核版本,如果在2.6.20以下的linux版本,需升级内核。  2安装KVM  下面就Ubuntu和CentOS下安装使用KVM虚拟机做介绍:  Ubuntu 中用guest登陆,安装KVM的命令为:  sudo apt-get install kvm qemu qemu-kvm virt-manager kernel-package linux-source kqemu-source build-essential  kvm安装成功后会有/dev/kvm,如果无需图形管理器,只需要安装前三个即可。  再来查看下KVM是否安装成功,执行:virsh -c qemu:///system list  如果输入结果像下面这样的,那么成功了:  Connecting to uri: qemu:///system  Id Name State  
 注1:CentOS中安装时,先要选择Selinux为enalble,使用命令  #system-config-securitylevel-tui  可查看或修改selinux的状态。  注2: CentOS中用root登陆时则安装命令为:  Yum install kvm kmod-kvm qemu  再装入kvm模块:modprobe kvm-intel (Intel机器) 或者 modprobe kvm-amd (amd机器)  注3:可以用以下命令来检查是否装入kvm模块:  /sbin/lsmod | grep kvm  如果输出关于kvm版本的信息则已装入kvm模块  注4: 安装好后,可使用qemu-kvm命令,输入该命令,如果系统显示未知的命令,可查看/usr/libexec中是否有qemu-kvm可执行文件,如果有,将其拷贝到/bin目录下即可。如果确实按照上面的步骤进行了,却在/bin,/usr/libexec,/usr/bin,/usr/sbin里都找不到qemu-kvm可执行文件,可执行以下命令:  #yum provides "*/qemu-kvm"  注5:安装新内核后,可能有部分软件版本过低,不兼容。比如firefox因版本过低,无法启动。  CentOS下可使用如下命令更新该软件(以firefox为例):  #yum update firefox  3 在KVM下安装虚拟机  3.1用QEMU创建磁盘镜像  sudo qemu-img create –f qcow windows.img 8G  注:在CentOS和新版Qemu中为:qemu-img create –f qcow2 windows.img 8G  3.2使用KVM安装Guest VM  光盘安装:  sudo kvm –localtime –cdrom /dev/cdrom -m 512 -boot d win2.img  硬盘安装  sudo kvm –localtime –m 512 –hda windows.img –cdrom winxp.iso –boot d –clock –rtc –no-acpi  注:官方推荐使用 -no-acpi 参数,原因是 qemu/kvm不太支持,可能造成 cpu 的占用偏高。  注1:CentOS下硬盘安装为 qemu-kvm –localtime –m 512 –hda windows.img –cdrom winxp.iso –boot d –no-acpi 即需要去掉了-clock rtc选项,否则会出现无法初始化时钟。  注2:CentOS quest mouse: export SDL_VIDEO_X11_DGAMOUSE=0可解决VM中无法识别USB鼠标的问题。  注3: 安装win 7时,不能使用-no-acpi选项。  4 KVM启动Guest   sudo kvm –boot c –m 512  –hda windows.img  ② sudo kvm -boot c  -m 512  -hda /home/lm/kvm/winxp.img  -localtime  -net nic,vlan=0,macaddr=52-54-00-12-34-01 -net tap,vlan=0,df=h,ifname=tap0,script=no  -clock rtc  -soundhw es1370  -smp 2  注意:在KVM-87下,请去掉df=h  -m 512 分配512MB的内存  -hda /home/lm/kvm/winxp.img  -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 )  -smp 2 smp处理器个数为2个,如果你是4核处理器,后面的数字就为4  -clock rtc  使用rtc时钟(如果不开启此选项,WINXP可能会很慢.
---------------------------------------------------------------------------------------------------------------------------
kvm 详细教程

转载自
http://forum.ubuntu.org.cn/viewtopic.php?f=65&t=154792&sid=591087b7c7a8b9dcef3c39f297d78946
研 究了很久的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通.


----------------------------------------------------------
安装配置KVM虚拟机

虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
虚 拟化按照虚拟的方式可以分为软件虚拟,如vmware,他是直接提取awardBIOS的程序(当然是经过授权的)。另外是基于硬件的,cpu虚拟化。 CPU的虚拟化,又可以分为全虚拟化,和半虚拟化。AMD目前多已支持全虚拟化,而intel只有部分支持虚拟化。当然小机不在此次讨论之列。
为我们可以通过以下命令来查看CPU是否支持全虚拟化!
[root@jadeshow ~]# egrep ‘(vmx|svm)’ /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm lahf_lm tpr_shadow
flags : fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm lahf_lm tpr_shadow
下面进入本次讨论的重点,使用KVM来启动虚拟机。
KVM 实际上还是一种相对来说比较新的技术。目前存在各具功能的开源技术,例如 Xen、Bochs、UML、Linux-VServer 和 coLinux,但是 KVM 目前正在被大量使用。另外,KVM 不再仅仅是一个全虚拟化解决方案,而将成为更大的解决方案的一部分。
好下面我们来进行实际的操作。
首先查询以下包qemu-kvm virt-manager virt-viewer python-virtinst
是否安装。
rpm -q qemu-kvm virt-manager virt-viewer python-virtinst
然后依次执行以下命令:
yum install qemu-kvm virt-manager virt-viewer python-virtinst
yum install qemu-kvm virt-manager virt-viewer python-virtinst
yum groupinstall ‘Virtualization’
建立一个虚拟机:
这时候就可以通过X界面来建立一个虚拟机咯。
应用程序—>系统工具—–>虚拟器管理系统
这里选择使用什么方式启动,本地光盘(镜像)启动,网络安装,或者网络启动.我这里选择的光盘镜像启动.
之后就是非常简单的一步一步点下去了,然后就能进入系统安装阶段了.这里就不赘述了.
成功的关键是配置网络及路由(这个在网上流传的版本中没有提到)
请生成一个文件(qemu-ifup),将这个文件加上可执行属性,文件内容如下:
#!/bin/sh
set -x
switch=br0
if [ -n "$1" ];then
/usr/bin/sudo /usr/sbin/tunctl -u `whoami` -t $1
/usr/bin/sudo /sbin/ip link set $1 up
sleep 0.5s
/usr/bin/sudo /usr/sbin/brctl addif $switch $1
exit 0
else
echo “Error: no interface specified”
exit 1
fi
将这个文件保存在你的HOME目录下,或者其它的目录也行。
修改你的/etc/network/interfaces文件如下:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
auto br0
iface br0 inet static
bridge_ports eth0 //注意这个eth0,这是你的计算机的实际网卡,请根据你的网络修改,也可能跟我的这个一样。
address 192.168.1.242 //根据你的需要设置从这里到下面的参数,这个网络跟你的实现网络在一个子网内,不然无法桥接
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameserver 192.168.1.1 219.141.136.10
dns-search Office
此时,重新启动计算机即可。
你可能注意到, 这个文件里可能有关于eth0的配置,请删除它即可,也就是说,不能对eth0进行任何配置,这个接口在重新启动后,应该是没有配置IP的,否则不能工作。
重新启动完成后,请比照一下你的接口配置是否跟我的一样:
#ifconfig
br0 Link encap:以太网 硬件地址 00:21:5e:4e:33:e2
inet 地址:192.168.1.242 广播:192.168.1.255 掩码:255.255.255.0
inet6 地址: fe80::221:5eff:fe4e:33e2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1
接收数据包:48324758 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:25261650 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:0
接收字节:63199826111 (63.1 GB) 发送字节:5380518900 (5.3 GB)
eth0 Link encap:以太网 硬件地址 00:21:5e:4e:33:e2
inet6 地址: fe80::221:5eff:fe4e:33e2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1
接收数据包:48903854 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:28125512 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:1000
接收字节:64152739997 (64.1 GB) 发送字节:6185466883 (6.1 GB)
中断:16
请注意,只有br0有地址,而eth0是没有地址的,再比照一下你的路由表:
#route
内核 IP 路由表
目标 网关 子网掩码 标志 跃点 引用 使用 接口
localnet * 255.255.255.0 U 0 0 0 br0
default bogon 0.0.0.0 UG 100 0 0 br0
请注意,如果你的路由表与我的不一样,例如出现四行,即又加上了
localnet * ………………. eth0
default bogon ………………eth0
那么,你八成是不能成功桥接的,出现这样的问题应该是由于你的ETH0网络被配置了IP,处理的办法就是想办法去掉eth0的IP,可以使用这个方法:
#ifconfig eth0 0.0.0.0
比较一下,你的桥接网络接口:
#brctl show
bridge name bridge id STP enabled interfaces
br0 8000.00215e4e33e2 no eth0
tap0
tap1
tap2
应该有这行存在(可能还会出现其它的行,例如pan0),后面的tapX是不同的虚拟机的接口,这里可以看出,我桥接了三个虚拟接口到一个直接的接口。
如果你的IP地址配置与路由表跟我的一样,那么,应该是可以桥接成功的。
接下来就是启动你的虚拟机,启动前需要创建虚拟机的磁盘(即下面的u_ubuntu.img,可以参照网上的方法,这里就不重复了),启动虚拟机的方法:
kvm -hda u_ubuntu.img -boot c -net nic,model=virtio,macaddr=DE:AD:AF:22:33:22 -net tap,script=qemu-ifup -m 1024 -smp 2 -clock rtc -localtime
当然,有很的参数可用,我就不介绍了(其实我也不是很懂,嘿嘿),关键的问题就是macaddr和script两项,如果你有多个虚拟机,那么一样要配置不同的macaddr,script一定要指向你刚才保存的那个文件,可以使用绝对路径指明。
启动后,你应该可以正常安装操作系统了,安装完成后,如果虚拟机操作系统网络配置成DHCP,那么应该可以获取一个192.168.1.0网络内的地址,如果你不能获取地址,那么说明配置不成功。
在虚拟机工作的情况下,在宿主计算机上运行ifconfig,应该可以看到一个自动增加的接口tapX(其中X从0开始)。
小结一下:
1)eth0(宿主计算机连接到网络的真实网络接口)不能有IP地址!
2)路由表一定要正确,可以去找一找关于路由方面的介绍,了解一下这个路由信息的意思。
----------------------------------------------------------------------

基于GUI的kvm安装WindowsXP,并且在安装时加载virtio驱动。更新声音使用方法

有关kvm的使用说明其实不少,但基本都是命令行,对于新手来说不够直观,而且都没有提到关于virtio驱动的安装。于是就再发一篇。
使用virtio接口的虚拟硬盘和虚拟网络的性能不是默认的那个IDE接口能比的。

从安装虚拟机到运行虚拟系统,全部只要三次使用到命令行。
基于10.04,理论上也适用于9.10。
以下,开始。

确保CPU支持并开启虚拟化:
代码:
egrep '(vmx|svm)' /proc/cpuinfo

有红字(或者其他与众不同的颜色),并且在bios里开启虚拟化。
如果没有虚拟化,放弃吧……

确保源完整,可以在设置“软件源”,把第一个选项卡的所有选项都选中(源代码不用选)。然后新立得,先要在首选项里选中“把推荐的软件包视作依赖的软件包”,然后标记并安装virt-manager、virt-viewer,新立得会自动把kvm作为依赖标记的。

这里插一句:kvm已经和qemu合并了,源里”kvm“和”qemu“都是指向“qemu-kvm”的虚包,源里的版本已经够新的了。

要给virt-manager管理员权限,否则是无法自己创建虚拟网络的:
代码:
sudo gedit /usr/bin/virt-manager

当然你可以使用任何你喜欢的文本编辑器替换掉gedit。
然后把:
代码:
exec python "/usr/share/virt-manager/virt-manager.py" "$@"

修改成:
代码:
exec gksu python "/usr/share/virt-manager/virt-manager.py" "$@"

保存,关闭。

从“应用程序”的“系统工具”里运行“虚拟系统管理器”,如果顺利的话应该能看到localhost (QEMU),右键,详情,虚拟网络。
然后就自己创建虚拟网络了。前面几页的设定可以保持默认,注意“连接到物理网络”页面里要选择“转发到物理网络”,模式用NAT。
不要选择“路由的”除非你在路由后面并知道路由的子网掩码的意义。
完成虚拟网络设置之后选中虚拟网络的“自动启动”。
还是在localhost (QEMU)上右键,新建。
步骤1里:输入要创建的虚拟机的名称,下一步。
步骤2里:使用iso镜像,这个随便选,实际上我们并没有用这里选择的镜像来安装系统。
步骤3默认就行,反正之后可以另行设置。
步 骤4是重点。先选中“选择管理的或者其他现有储存”,浏览,新建卷。注意把名称里的后缀去掉(程序会自动添加一个后缀,如果不去掉就是两个后缀了……)格 式建议选qcow2,当然也可以默认。最大容量就是虚拟机的C盘大小,自己看着办吧……其他默认就好了。完成之后选择你刚才创建的文件,然后一定要去除“为虚拟机启用储存”的勾选框
步骤5里的高级选项选择刚才自己创建的虚拟网络,完成。
然后会弹出一个虚拟机的监视窗口,把它扔在那里吧。
下载适用于WindowsXP的virtio驱动软盘镜像。
http://www.linux-kvm.com/sites/default/files/viostor-31-03-2010-floppy.img
顺便下载一个virtio驱动光盘镜像,用于安装虚拟系统的网络驱动。
http://www.famzah.net/download/kvm/virtio-windows/24.09.2009/NetKVM-and-viostor.iso
附件是这两个的打包。
附件:
文件注释: 32、64位WindowsXP、2003用virtio驱动。
virtio-driver.7z [501.54 KiB]
被下载 15 次

接下来把系统安装到刚才创建的虚拟硬盘里:
代码:
sudo kvm -boot d -cdrom [Windows安装盘镜像的完整路径和文件名] -drive file=[虚拟硬盘的完整路径和文件名],if=virtio,boot=on -fda [virtio驱动软盘镜像的完整路径和文件名] -m 600

其中虚拟硬盘默认放在 /var/lib/libvirt/images/ 文件夹里,文件名默认和虚拟机的名称是一样的。驱动镜像是以img为后缀的那个,不要选错!
回车,F6(也就是在安装时从软盘加载额外的驱动),s,选择驱动。注意64位XP使用的是64位2003的驱动。
接下来就是安装XP了。中间会有提示是否继续安装没有徽标的驱动,点继续就可以了。
注意kvm是ctrl+alt来控制鼠标捕获的,另外这时运行的kvm对组合键(ctrl、shift之类)的传递有问题(以后用虚拟系统管理器的时候不会有这个问题),所以设置密码的时候尽量简单一些,八个“1”之类的……
安装完毕之后直接把虚拟XP关机吧,等虚拟机的窗口关闭之后就可以把终端关掉了。
回到刚才虚拟机的监视窗口,“查看”里选择“详情”。这里是管理虚拟机的硬件设定的地方。CPU数量和内存大小还是自己看着办。
接下来是重点:
IDE CDROM 1,也就是虚拟光驱。把原来的断开掉,连接,选那个virtio驱动光盘镜像(iso后缀),应用。
删除“NIC :xx:xx:xx”,也就是默认的网络接口。是的,点“删除”,因为我们要更换虚拟网卡的接口。
最下方的“添加硬件”,顾名思义。
我们接下来要添加虚拟硬件:硬盘、网卡。
添加硬件,选择“Storage”,前进。选中“文件”,浏览,选择你刚才创建的虚拟硬盘文件。然后是“目标”的“设备类型”,选择“Virtio Disk”,前进,完成。
添加硬件,选择“Network”,前进。“设备型号”选择“virtio”,“主机设备”选择你刚才创建的虚拟网络,前进,完成。
“Boot Option”里选“Hard Disk”,应用。
全部设定好之后,“虚拟机”,“运行”。
接下来就是在xp里装驱动了,它应该会有个向导,选择从光盘安装驱动就可以了。

测试了32、64位的XP和2003,方法相同。没有测试其他版本的windows,不知道驱动能不能用(估计不能……)

顺 便说一句,如果要虚拟linux系统的话,内核在2.6.25以上的一般都自带virtio驱动了,所以只要在新建虚拟机的步骤2选linux然后是你要 安装的发行版,选择了虚拟硬盘之后也不用去掉那个勾选框直接前进就可以安装系统了,接口默认就直接是virtio的了。
由此可见win的傲娇……

于是kvm发布了用于windows的vmwarevga虚拟显卡驱动,虽然我没感觉有什么变化,但是据说在可选分辨率上有改进,所以更新一下。
首先下载驱动:
32位:
http://www.linux-kvm.com/sites/default/files/vmwarevga32-kvm.iso
64位:
http://www.linux-kvm.com/sites/default/files/vmwarevga64-kvm-2.iso
附件是这两个的打包:
附件:
文件注释: vmwarevga驱动。
vmwarevga.7z [440.67 KiB]
被下载 7 次

方法:
首先像以前那样运行虚拟windows,然后在依然是虚拟机的监视窗口,“查看”里选择“详情”,在IDE CDROM1那里连接对应版本的iso,这样虚拟系统的光驱里就会有驱动光盘,让它自动播放,一路确定就好。
然后关闭虚拟电脑,把“详情”的“视频”里的“型号”改成“vmvga”就可以了。
至于要虚拟linux的话,直接改成“vmvga”就好了。

使用声音:
virt-viewer默认使用VNC来显示虚拟机的,但这个vnc没有声音。当然可以通过远程桌面来解决这个问题,但我测试下来远程桌面的效果不好,于是就又折腾了一下。
首先把虚拟声卡换掉。
把“详情”的“Sound:es1370”删掉,添加“Sound”选“ac97”,然后把“显示:vnc”删掉,添加“Graphics”,选择“本地 SDL 窗口”,确定。
以后启动虚拟机会在一个新的窗口里显示,而声音也能正常使用了。

另外几个参考网址:
http://open.eucalyptus.com/forum/how-create-windows-image
http://kiranmurari.wordpress.com/2010/03/29/uec-bundling-windows-image/
http://www.linux-kvm.org/page/Boot_from_virtio_block_device
-----------------------------------------------------------------------

Debian下的KVM安装笔记




新服务器是 AMD 平台,支持 AMD-V 硬件虚拟化,试玩了把 KVM,过程如下
安装 debian 下的 kvm 软件包
sudo aptitude install kvm
建立虚拟机的磁盘映像
kvm-img create -f qcow2 winxp.img 8G
启动虚拟机的安装
sudo kvm -vnc :0 -usb -usbdevice tablet -hda winxp.img -cdrom zh-hans_windows_xp_professional_with_service_pack_3_x86_cd_vl_x14-74070.iso -boot d

在 PC 上通过 VNC Viewer 连接到虚拟机的 GUI 上,完成虚拟机的安装 (安装过程中在需要按 F8 的时候,VNC Viewer 会弹出个类似右键菜单的列表,选中 “Send F8″ 即可。另外 VNC 中会出现 2 个鼠标,全屏显示 VNC Viewer 即可解决,重新回到窗口模式鼠标也正常。)。虚拟机里的 XP 安装好后设置允许远程访问,方便通过 remote desktop connection 连接。
建立 WAN 口的 bridge,虚拟机的网卡会加入到这个 bridge 中
sudo vi /etc/network/interfaces
auto lo br0

iface lo inet loopback

iface eth0 inet manual

iface br0 inet static
 address 123.45.67.89
 netmask 255.255.255.255
 gateway 123.45.67.1
 bridge_ports eth0
sudo /etc/init.d/networking restart
如果想让虚拟机网卡加入 LAN 的 bridge 中,参上上面建立 LAN 的 bridge,修改文件 /etc/kvm/kvm-ifup
sudo vi /etc/kvm/kvm-ifup
#!/bin/sh

#switch=$(ip route ls | awk '/^default / { for(i=0;i<nf;i++) { if ($(i) == "dev") print $(i+1) }}')
switch=br0
/sbin/ifconfig $1 0.0.0.0 up
/usr/sbin/brctl addif ${switch} $1
exit 0
最后启动安装好的虚拟机
sudo kvm -daemonize -localtime -M pc -m 256 -usb -hda /srv/kvm/winxp.img -net nic -net tap
在 PC 上通过远程桌面连接即可登录到虚拟机中的 XP。
--------------------------------------------------------------------
 debian6.0下,安装KVM ,设置网络桥接

环境:windows中VMware虚拟机安装debian6 GUI,debian安装qemu-kvm,qemu-kvm中安装Gentoo
实现目标:让KVM中的主机和debian位于同一个局域网中

一. 加载kvm模块

modprobe kvm
modprobe kvm_amd   #intel CPU 是 kvm_intel
实验环境是WMWare,硬件(CPU)是虚拟化出来的,执行条命令会出错,忽略错误继续

二. 安装qemu工具
apt-get install qemu-kvm
安装结束报错,忽略

三. 安装桥接网络的工具
apt-get install bridge-utils
apt-get install uml-utilities  (命令#tunctl要使用)

四. 配置网络
nano /etc/network/interfaces
内容:
auto lo 
iface lo inet loopback 
 
auto br0 
iface br0 inet static #dhcp 
bridge_ports eth0 
address 192.168.1.39 
netmask 255.255.255.0 
gateway 192.168.1.6 
#bridge_stp     off 
#bridge_maxwait 0 
#bridge_fd      0   (不知道这三行有何用)

五. 重启网络
/etc/init.d/networking restart

六. 加载TUN/TAP模块并设置桥接口
modprobe tun
tunctl   #创建虚拟网卡tapX (X代表数字0,1,2…本文使用的是tap0)
brctl addif br0 tap0   #将上一步创建的 tapX 加入网桥 br0
ifconfig tap0 promisc up    #启用tapX 并设置为promisc 模式
七. 创建虚拟硬盘,安装系统
kvm-img create disk.img 4G  #真实系统(非虚拟机中)可能是qemu-img命令
kvm -cdrom xp.iso -hda disk.img -boot d #无网络“开机”并从xp.iso启动,安装系统
# 或者使用下条命令联网安装系统,非dhcp需配置网络:IP,DNS,Gateway...
kvm -cdrom xp.iso -hda disk.img -net nic,macaddr=00:00:00:00:00:01 -net tap,ifname=tap0,script=no,downscript=no -boot d
接下来就进入安装界面,忽略不讲述

进入kvm虚拟机(这里是Gentoo ),配置网络后可以联网

八. 用已经安装了系统的disk.img启动虚拟机,并启用桥接网络
kvm -net nic,macaddr=00:00:00:00:00:01 -net tap,ifname=tap0,script=no,downscript=no disk.img
tapX对应于第6步创建的tapX, 如需创建多台guest OS,重复步骤6,7,8 即可。qemu-kvm 参数较多,如后台运行虚拟机,用vnc远程连接等方法可以参考man.