标签 Kvm 下的文章

vbox 与 kvm 的区别

vbox 与 kvm 的区别:
vbox 是由 qemu 改写而成,包含大量 qemu 代码。可以使用于 不支持 虚拟化的cpu。值得说的一点:vbox 在图形方面比较好,能进行2D 3D加速。cpu控制不理想(估计是因为图形支持的缘故)。操作上有独立的图形界面,易于上手。
kvm 是linux内核包含的东西,使用qemu作为上层管理(命令行)。cpu 必须支持虚拟化。性能,作为服务器很好,可是图形能力十分的差。即使放电影,图像也是像刷油漆一样,一层一层的。cpu使用率控制很好。 控制上比较简洁,功能比较丰富:比如使用 “无敌功能”所有更改指向内存,你的镜像永远保持干净。 “母镜像”功能让你拥有n个独立快照点。 还有很多参数。另外,kvm作为内核级的虚拟机,刚开始发展关注的公司比较多——但是还没有达到商业应用的水平。
总体而言:在支持 虚拟化的情况下,vbox 和 kvm 的性能差不多,主要是面向对象不同:kvm使用于服务器,vbox使用于桌面应用。
***********************************************
关于kvm:
kvm是开源软件,全称是kernel-based virtual machine(内核级虚拟机)。是x86架构且硬件支持虚拟化技术(如 intel VT 或 AMD-V)的linux 全虚拟化 解决方案。它包含一个为处理器提供底层虚拟化 可加载的核心模块kvm.ko(kvm-intel.ko 或 kvm-AMD.ko)。
kvm还需要一个经过修改的QEMU软件(qemu-kvm),作为虚拟机上层控制和界面。
kvm能在不改变linux或windows镜像的情况下同时运行多个虚拟机,(ps:它的意思是多个虚拟机使用同一镜像)并为每一个虚拟机配置个性化硬件环境(网卡、磁盘、图形适配器……)。
在主流的linux内核,如2.6.20以上的内核均包含了kvm核心。
KVM官方地址: http://kvm.qumranet.com/kvmwiki
KVM的Changelog: http://kvm.qumranet.com/kvmwiki/ChangeLog, 可以知道最新的版本是多少,做了那些改变。
KVM下载地址在sourceforge.net上: http://sourceforge.net/project/showfile … _id=180599
KVM的Howto文档: http://kvm.qumranet.com/kvmwiki/HOWTO
Kqemu: http://sourceforge.net/projects/kqemu/
Qemu: http://fabrice.bellard.free.fr/qemu/index.html
**************************入门篇(基于ubuntu9.10)
基本知识:
qemu是独立虚拟软件,能独立运行虚拟机(根本不需要kvm)。kqemu是该软件的加速软件。kvm并不需要qemu进行虚拟处理,只是需要它的上层管理界面进行虚拟机控制。虚拟机依旧是由kvm驱动。
所以,大家不要把概念弄错了,盲目的安装qemu和kqemu。
安装准备:
查看你的硬是否支持虚拟化。
命令:
egrep ‘(vmx|svm)’ /proc/cpuinfo
要有 vmx 或 svm 的标识才行。总的说来,AMD在虚拟化方面作得更好一些。
使用intel cpu的朋友还需要进入bios进行设置——因为我的是AMD,所以设置方法不敢乱说。
安装kvm:
打开新立得软件库,安装kvm。系统会自动安装相关的软件包,包括qemu-kvm。什么kvm-AMD 或 kvm-intel模式系统都自动处理好了。现在大多文章都是2008年写的,已经过时了,可惜好多人只知道复制,好多设置已经不需要了,有些跟官方的完全冲突。
创建虚拟镜像:
命令(先cd 到你要保存镜像的位置):
kvm-img create xxx.img 2G
由于是要安装xp精简系统,2G已经足够大了(安装下来只要700M)。xxx 代表名字,想取什么都可以。最好是连续的英文.默认格式为raw,当然你可以自己设定,比如(-f qcow2)加在 create 后面即可。(.img这个后缀是我随便编的,kvm对后缀名没有要求)
其它格式如下:
Supported formats: cow qcow vmdk cloop dmg bochs vpc vvfat qcow2 parallels nbd host_cdrom host_floppy host_device raw tftp ftps ftp https http
安装虚拟机系统:
命令(先cd 到你要保存镜像的位置):
kvm -hda xxxx.img -cdrom /path/to/boot-media.iso -boot d -m 512
说明几点:/path/to/boot-media.iso 只是个举例。具体为你的系统盘镜像位置。-m 为虚拟机内存大小,单位是M默认(不写这个选项)为128M。当然,自己看着给吧。
建议如果虚拟的是xp系统,把页面缓存给关了。
使用虚拟机最简单的命令:
命令(先cd 到你要保存镜像的位置):
kvm -m 1024 -hda xxx.img
由于默认内存是128M,所以不得不指定一下,要不连-m 1024都可以省了。此时是没有声卡的,当然也可加上声音选项。cpu默认是一颗,网络默认启动(为net-内部端口映射)(可以上网,但是主机识别不了,它也无法连接主机)。
你可以使用:
kvm -m 1024 -hda /xxx/xxx/xxx.img
你也可以把它作为桌面“创建启动器”的命令使用。每次轻轻一点就可使用了。
****************************中级篇
命令:
kvm –help
命令:
kvm-img –help
看看具体的选项说明,需要什么功能就在“最简单命令”后面加就是了——特别简单、功能又很多。用的满意了,可以做成“程序启动器”。或者打开gedit,把命令保存进去,把文件名改为xxx.sh。再把属性改为“可执行”,要用就点击。
比如:kvm -m 1024 -hda xxx.img -xxx xx -xxxx xxx -xxxxxx -xxx
现在分功能讲解
1,文件共享
我们希望虚拟机能和主机对一些文件夹进行共享操作。类似于vbox的共享文件夹。
首先安装 samba 。这是linux的共享功能软件,支持windows系统的访问。记住不是samba4
然后,新建一个文件夹,属性。共享选项,把所有选项开启。应用。接受系统的权限的更改。
好了,默认在虚拟机的网上邻居,就能找见了。没有?看看整个网络(侧边任务)。
简单吧,kvm早已升级了。根本不需要什么配置。
关于权限:你是否有“无法访问,权限不够……”的问题?主机无法修改共享文件“你不是该文件的创建者”?
那是因为linux的权限相当的严格,必须要放权别人才能访问、修改。
如果上级文件夹(无论哪个)不让读取(比如: 其它;文件夹访问 无),那么就会出现无法访问的情况。你要设置上级文件夹权限为(其它;文件夹访问 访问文件)就可以了,不必完全放权。
因为安全考虑,我的用户文件夹(其它;文件夹访问 无)。所以一开始就出了权限问题。我的解决办法是使用命令:
sudo gnome-open /home/
在home中再新建一个文件夹,在属性上,把创建者改为非root(改为经常使用的普通用户),组群:sambashare。权限全为:创建和删除。
经测试,外网虽然能显示共享文件夹,却无法访问——保证只有虚拟机可以访问。(我使用了ufw防火墙)
windows虚拟机在共享文件夹中创建的文件,主机是无法更改的。要设置权限:
我的电脑-打开-工具-文件夹选项-查看
把“使用简单的文件共享”选项去掉。在文件(夹)属性——安全:知道怎么弄了吧。
linux的文件夹系统权限作的十分的好。比如你把其它非受权文件夹的链接复制到共享文件夹,依然无法访问。windows那种权限的随意性,看见就想哭。
多说一点:我的电脑右键,可以把共享文件夹设置为网络硬盘。相当于移动硬盘,可以方便的安装软件,保存资料。
2。无敌模式(-snapshot)
-snapshot write to temporary files instead of disk image files
意思是不更改镜像文件,启动后的所有改动均不会往镜像文件上写。临时文件存放在内存中了,具体是cached。
同样的功能,在vbox要独立安装软件。效率可想而知……
在命令后面空格加上:
-snapshot
即可
3.高速网络(-net nic,model=virtio -net user)
表 2. 虚拟网络模块的性能差异
虚拟网络模块 网络传输速度(ssh) 客户机操作系统 网络状态
rtl8029 200-300KB/s SLES10SP2 (kernel 2.6.16-60) 不稳定
e1000 4.8-5.4MB/s SLES10SP2 (kernel 2.6.16-60) 稳定
virtio 10.6-11.1MB/s SLES11 (kernel 2.6.27-19) 稳定
驱动下载地址:
http://sourceforge.net/projects/kvm/files/
名字是 kvm-driver-disc 的 NETKVM-20081229.iso
具体可能有变化,使用命令:
kvm -m 1024 -hda xp.img -cdrom /home/cat650/linux/kvm/NETKVM-20081229.iso -enable-kvm -net nic,model=virtio -net user
其中:-cdrom是加载光驱的意思。网络默认设置是 (-net nic -net user) 这里由于要指定virtio模块所以要把命令加上。然后自动安装驱动就行了。听说速度接近真实网卡——明显是为打造虚拟服务器配置的。
以后在启动虚拟机命令后面加上-net nic,model=virtio -net user就可以了。
4.高速虚拟
VirtIO paravirtual 是 Linux 虚拟机平台上统一的虚拟 IO 接口驱动。通常主机为了让客户机像在真实环境中一样运行,需要为客户机创建各式各样的虚拟设备,如磁盘,网卡,显卡,时钟,USB 等。这些虚拟设备大大降低了客户机的性能。如果客户机不关注这些硬件设备,就可以用统一的虚拟设备代替他们,这样可以大大提高虚拟机的性能。这个统一的标准化接口在 Linux 上就是 VirtIO 。需要注意的是 VirtIO 运行在 kernel 2.6.24 以上的版本中才能发挥它的性能优势。另外 KVM 项目组也发布了 Windows 平台上的 VirtIO 驱动,这样 windows 客户机的网络性能也可以大大提高了。
下载地址:http://www.linux-kvm.org/page/WindowsGuestDrivers/Download_Drivers
viostor是磁盘的虚拟驱动。
带图片的参考:http://www.linux-kvm.org/page/WindowsGuestDrivers/viostor/installation
命令:把-hda xxx.img 替换为-drive file=/home/cat650/virt/xp.img,if=virtio,boot=on
意思是使用virtio磁盘系统,并作为启动盘(默认是boot=off,作为附加的第二硬盘)。第一次使用的时候记得挂载viostorXXXX.img,来安装驱动。
5.使用金手指“母镜像”功能
要求,镜像格式为 qcow2 。作用:在“母镜像”的基础上,建立一个新的镜像。虚拟机操作这个新镜像时不会对“母镜像”进行任何更改(只读“母镜像”),新镜像只保存由于操作产生的与“母镜像”的数据差异(大小很小)。由此实现超越“快照”“还原点”的金手指功能(数量没有限制)。
命令(先cd 到你要保存镜像的位置):
kvm-img create -b xp.img -f qcow2 xp.test
其中xp.img是“母镜像”(参数 -b xxx),xp.test是新镜像——只能用 qcow2 格式。
新镜像的使用:正常使用即可。
6.镜像格式转换,镜像信息查询
能转换的格式有:raw,qcow2,qcow,cow,vmdk,cloop
如果你记不清你创建的镜像是什么格式的,可以使用命令(先cd 到你要保存镜像的位置):
kvm-img info xxx.img
关于格式的优缺点,请参看高级篇
转换命令(先cd 到你要保存镜像的位置):
kvm-img convert -f raw -O qcow2 xp.img xp.qco
注意:-O是字母o的大写。
这条命令举例的意思是:把名为xp.img格式为raw的镜像转换成新镜像xp.qco格式为qcow2
其它格式”vmdk”是 VMware 3 / 4 兼容镜像格式。
*******************************深入了解
1.kvm-img 命令
用法:kvm-img 后续命令 [命令选项]
后续命令如下
check [-f fmt] filename
create [-F base_fmt] [-b base_image] [-f fmt] [-o options] filename [size]
commit [-f fmt] filename
convert [-c] [-f fmt] [-O output_fmt] [-o options] [-B output_base_image] filename [filename2 […]] output_filename
info [-f fmt] filename
snapshot [-l | -a snapshot | -c snapshot | -d snapshot] filename
部分内容详解:
filename
镜像的文件名(比如:xp.img cat.raw……后缀名随便取,或者不取)
base_image
只读的镜像——有点像“母镜像”。在“母镜像”基础上创建的镜像只储存对“母镜像”的修改。
output_base_image
forces the output image to be created as a copy on write image of
the specified base image; “output_base_image” should have the same
content as the input’s base image, however the path, image format,
etc may differ
base_fmt
base_image(母镜像) 的格式. 参考 fmt
fmt
指镜像格式。建议大多数情况让系统自动选择(不使用该选项)。
主要格式如下:
“raw”
Raw disk image format (默认).该格式精简,易被多种虚拟机接受。
如果你的系统支持 holes (如 linux 的 ext2 ext3 ext4? windows 的 NTFS),那么它将有效节约空间(比如你创建的磁盘是2G,虚拟系统只使用了800M,那么它实际也只占用800M的空间)。使用命令“kvm-img info 镜像文件名”,将显示实际使用的大小。linux用户还可以使用“ls -ls”命令直接查看。
“qcow2”
QEMU 镜像格式, 使用最多的格式. 创建的镜像比较小(用多少就占多少),对于系统文件不支持 holes 的(比如windows系统下使用qemu)很有帮助。可进行AES加密,zlib基本压缩,并支持多种VM的快照(snapshots)。
“qcow”
古老的 QEMU 镜像格式. Left for compatibility.
“cow”
User Mode Linux Copy On Write image format. Used to be the only
growable image format in QEMU. It is supported only for
compatibility with previous versions. It does not work on
win32.不能运行win32.
“vmdk”
VMware 3 / 4 兼容镜像格式
“cloop”
Linux Compressed Loop image, useful only to reuse directly
compressed CD-ROM images present for example in the Knoppix CD-
ROMs.
size
镜像文件的大小比特. 一般单位使 “M” (megabyte, 1024k) 、 “G” (gigabyte, 1024M)、 T (terabyte, 1024G) 。 “b” is ignored.
output_filename
生成的镜像文件名
output_fmt
生成的镜像文件格式

kvm中的virtio的安装

依赖条件
内核版本>=2.6.25
操作步骤
创建一个磁盘,并通过附加”-hda “参数创建一个虚拟机并安装操作系统。
在Guest OS中,更新内核至2.6.25版本以上。(包含virtio dirvers)
在Guest OS中,修改/boot/grub/device.map文件的”(hd0) /dev/sda” 至”(hd0) /dev/vda”。
在Guest OS中,修改/boot/grub/menu.lst文件的”root=/dev/sda1″ 至”root=/dev/vda1″。如果root使用了UUID,则不需要执行此步骤。
通过改变”-hda ,if=virtio,boot=on”使半虚拟化生效。
参考网址
http://www.linux-kvm.org/page/Virtio
http://www.linux-kvm.org/page/Boot_from_virtio_block_device

KVM架构及其优点

Linux 既有良好的灵活性,在虚拟化方面同样出色。但是最近,随着内核虚拟机(KVM)的出现,Linux 虚拟化的前景发生了变化。KVM 是构成主流 Linux 内核(V2.6.20)一部分的第一个虚拟化解决方案。KVM 支持 Linux 客户操作系统的虚拟化 —— 甚至支持其硬件对虚拟化敏感的 Windows 系统的虚拟化。了解 Linux KVM 的架构并了解它与内核的紧密集成为何会改变您使用 Linux 的方式。
简介
虚拟化 概念很早就已出现。简单来说,虚拟化就是使用某些程序,并使其看起来类似于其他程序的过程。将这个概念应用到计算机系统中可以让不同用户看到不同的单个系 统(例如,一台计算机可以同时运行 Linux 和 Microsoft Windows)。这通常称为全虚拟化(full virtualization)。
虚拟化也可以使用更加复杂的格式,其中单个计算机看上去具有多个架构(对于一个用户 来说,它是一个标准的 x86 平台;对于另外一个用户来说,它是 IBM Power PC 平台)。这种虚拟化形式通常被称为 硬件仿真。
最后,更加简单的一种虚拟化是操作系统虚拟化,其中一台计算机可以运行相同类型的多 个操作系统。这种虚拟化可以将一个操作系统的多个服务器隔离开来(这意味着全都必须使用相同类型和版本的操作系统)。
虚拟化和准虚拟化(para-virtualization)
虚拟化最常使用的两种方法是全虚拟化 和准虚拟化。使用全虚拟化,在虚拟化的操作系统和硬件之间存在一个层,用于决定访问。这个层称为系统管理程序 或虚拟机监视器(VMM)。准虚拟化与之类似,但是系统管理程序会以一种更具协作性的方式进行操作。这是因为每个客户操作系统都了解自己正在虚拟化模式中 运行,因此每个系统都与系统管理程序协作,来实现底层硬件的虚拟化。
全虚拟化的例子包括商业虚拟化解决方案 VMware,以及商业 IBM zSeries 计算机上使用的 IBM System z9 Virtual Machine(z/VM)操作系统。准虚拟化的例子有 Xen 和 User-Mode-Linux (UML)。 KVM 也被认为是一个全虚拟化解决方案,不过我们稍后再介绍这个问题。
虚拟化的工作原理
我们首先简要介绍一下虚拟化技术及其涉及的元素。虚拟化解决方案的底部是要进行虚拟 化的机器。这台机器可能直接支持虚拟化,也可能不会直接支持虚拟化;那 么就需要系统管理程序 层的支持。系统管理程序,或称为 VMM,可以看作是平台硬件和操作系统的抽象化。在某些情况中,这个系统管理程序就是一个操作系统;此时,它就称为主机操作系统,如 图 1 所示。
图 1. 虚拟化的分层抽象
系统管理程序之上是客户机操作系统,也称为虚拟机(VM)。这些 VM 都是一些相互隔离的操作系统,将底层硬件平台视为自己所有。但是实际上,是系统管理程序为它们制造了这种假象。
目前使用虚拟化解决方案的问题是,并非所有硬件都可以很好地支持虚拟化。较老的 x86 处理器根据执行范围对特定指令会产生不同结果。这就产生了一个问题,因为系统管理程序应该只能在一个最受保护的范围中执行。由于这个原因,诸如 VMWare 之类的虚拟化解决方案会提前扫描要执行的代码,从而将这些指令替换为一些陷阱指令(trap instruction),这样系统管理程序就可以正确地处理它们。Xen 可以支持一种协作的虚拟化方法,它不需要任何修改,因为客户机知道自己正在进行虚拟化,并已经进行了修改。KVM 会简单地忽略这个问题,如果您希望进行虚拟化,就强制必须在更新的硬件上运行。
刚开始会觉得这有些不方便,但是考虑到目前上市的较新机器都可以支持虚拟化(例如 Intel VT 和 AMD SVM),用不了多久,这将成为标准方法而不是少数例外情况。
KVM 系统管理程序
考虑到虚拟化技术的发展时间并不长,KVM 实际上还是一种相对来说比较新的技术。目前存在各具功能的开源技术,例如 Xen、Bochs、UML、Linux-VServer 和 coLinux,但是 KVM 目前正在被大量使用。另外,KVM 不再仅仅是一个全虚拟化解决方案,而将成为更大的解决方案的一部分。
KVM 所使用的方法是通过简单地加载内核模块而将 Linux 内核转换为一个系统管理程序。这个内核模块导出了一个名为 /dev/kvm 的设备,它可以启用内核的客户模式(除了传统的内核模式和用户模式)。有了 /dev/kvm 设备,VM 使自己的地址空间独立于内核或运行着的任何其他 VM 的地址空间。设备树(/dev)中的设备对于所有用户空间进程来说都是通用的。但是每个打开 /dev/kvm 的进程看到的是不同的映射(为了支持 VM 间的隔离)。
KVM 然后会简单地将 Linux 内核转换成一个系统管理程序(在安装 kvm 内核模块时)。由于标准 Linux 内核就是一个系统管理程序,因此它会从对标准内核的修改中获益良多(内存支持、调度程序等)。对这些 Linux 组件进行优化(例如 2.6 版本内核中的新 O(1) 调度程序)都可以让系统管理程序(主机操作系统)和 Linux 客户操作系统同时受益。但是 KVM 并不是第一个这样做的程序。UML 很久以前就将 Linux 内核转换成一个系统管理程序了。使用内核作为一个系统管理程序,您就可以启动其他操作系统,例如另一个 Linux 内核或 Windows 系统。
KVM
安装 KVM 之后,您可以在用户空间启动客户操作系统。每个客户操作系统都是主机操作系统(或系统管理程序)的一个单个进程。 图 2 提供了一个使用 KVM 进行虚拟化的视图。底部是能够进行虚拟化的硬件平台(目前指的是 Intel VT 或 AMD-SVM 处理器)。在裸硬件上运行的是系统管理程序(带有 KVM 模块的 Linux 内核)。这个系统管理程序与可以运行其他应用程序的普通 Linux 内核类似。但是这个内核也可以支持通过 kvm 工具加载的客户操作系统。最后,客户操作系统可以支持主机操作系统所支持的相同应用程序。
图 2. 使用 KVM 的虚拟化组件
记住 KVM 只是虚拟化解决方案的一部分。处理器直接提供了虚拟化支持(可以为多个操作系统虚拟化处理器)。内存可以通过 kvm 进行虚拟化(这在下一节中将会讨论)。最后,I/O 通过一个稍加修改的 QEMU 进程(执行每个客户操作系统进程的一个拷贝)进行虚拟化。
KVM 向 Linux 中引入了一种除现有的内核和用户模式之外的新进程模式。这种新模式就称为客户 模式,顾名思义,它用来执行客户操作系统代码(至少是一部分代码)。回想一下内核模式表示代码执行的特权模式,而用户模式则表示非特权模式(用于那些运行 在内核之外的程序)。根据运行内容和目的,执行模式可以针对不同的目的进行定义。客户模式的存在就是为了执行客户操作系统代码,但是只针对那些非 I/O 的代码。在客户模式中有两种标准模式,因此客户操作系统在客户模式中运行可以支持标准的内核,而在用户模式下运行则支持自己的内核和用户空间应用程序。客 户操作系统的用户模式可以用来执行 I/O 操作,这是单独进行管理的。
在客户操作系统上执行 I/O 的功能是由 QEMU 提供的。QEMU 是一个平台虚拟化解决方案,允许对一个完整的 PC 环境进行虚拟化(包括磁盘、图形适配器和网络设备)。客户操作系统所生成的任何 I/O 请求都会被中途截获,并重新发送到 QEMU 进程模拟的用户模式中。
KVM 通过 /dev/kvm 设备提供了内存虚拟化。每个客户操作系统都有自己的地址空间,并且是在实例化客户操作系统时映射的。映射给客户操作系统的物理内存实际上是映射给这个进程 的虚拟内存。为了支持客户物理地址到主机物理地址的转换,系统维护了一组影子页表(shadow page table)。处理器也可以通过在访问未经映射的内存位置时使用系统管理程序(主机内核)来支持内存转换进程。
实例化新客户操作系统
新客户操作系统的实例化是由一个名为 kvm 的工具提供的。这个工具可以与 kvm 模块协同工作,使用 /dev/kvm 来加载客户操作系统,将它与虚拟磁盘(主机操作系统中的一个普通文件)关联起来,然后启动客户操作系统。
通过一组在 /dev/kvm 设备上执行的 ioctls 可以提供控制支持。当第一次打开这个特殊文件时,就会创建一个新的 VM 对象,它与一个虚拟 CPU 关联在一起。您然后可以使用几个 ioctls 来创建一个虚拟 CPU,检查 kvm 版本,创建内存区域,然后启动一个虚拟 CPU。您可以使用 kvm 命令实现这种功能。在接下来的几节中,我们将介绍 kvm 命令,并给出几个受支持的 ioctls 的示例。
使用 KVM
如果硬件支持的话,使用 KVM 实际上非常简单。您需要一个具有虚拟化支持的处理器。通过查看 /proc/cpuinfo 可以知道系统是否支持虚拟化。这个文件指定了是否支持 vmx(Intel)或 svm(AMD)扩展。
接下来,您需要一个启用了 KVM 支持的 Linux 内核。您可以在 Device Drivers > Virtualization 下的内核配置中完成这种配置。还必须启用处理器对环境的支持。另外,还必须具有 kvm 和 qemu 用户空间应用程序。
有了启用了虚拟化支持的引导内核,接下来的一个步骤是为客户操作系统创建一个磁盘映 像。您可以使用 qeumu-img 来完成此操作,如下所示。注意这个映像的大小是 4GB,但是使用 QEMU 的写时复制格式(copy-on-write,qcow)时,整个文件将根据需要增长,而不是完全占据这 4 GB 的空间。 $ qemu-img create -f qcow vm-disk.img 4G
复制代码在创建虚拟磁盘之后,就可以将客户操作系统加载到其上。下面的例子假设客户 操作系统是在 CD-ROM 上。除了使用 CD-ROM ISO 映像来填充虚拟磁盘之外,还必须在结束时启动这个映像。 $ kvm -no-acpi -m 384 -cdrom guestos.iso -hda vm-disk.img -boot d
复制代码Ari Kivity 已经编写了一组测试工具来测试 KVM,而不需要全部的设备模型。下面的代码片断(来自于 kvm-12/user/main.c)从较高的层次上查看了 VM 的启动(请参见 清单 1)。控制特性是由内核中的 ioctls 提供的(具体来说,在 ./linux-2.6.20/drivers/kvm/kvm_main.c 文件中)。
对 kvm_init 的调用会打开 /dev/kvm 设备,检查版本号(由 KVM 内核模块导出),然后分配一个 KVM 上下文对象并填充一些回调函数。kvm_create 函数会建立并映射两个内存区域,然后使用 ioctl(KVM_CREATE_VCPU)创建一个虚拟 CPU(VCPU)。
load_file 函数然后会将映像加载到给定的 VM 的地址空间中,然后调用 kvm_run 执行该 VM(使用 ioctl KVM_RUN)。尽管这个过程非常简单,但是它解释了如何使用 KVM 实例化新客户操作系统。
清单 1. 测试 KVM 系统管理程序的应用程序片断 int main()
{
void *vm_mem;
kvm = kvm_init(&test_callbacks, 0);
if (!kvm) {
fprintf(stderr, “kvm_init failedn”);
return 1;
}
if (kvm_create(kvm, 128 * 1024 * 1024, &vm_mem) < 0) { kvm_finalize(kvm); fprintf(stderr, “kvm_create failedn”); return 1; } if (ac > 1)
if (strcmp(av[1], “-32”) != 0)
load_file(vm_mem + 0xf0000, av[1]);
else
enter_32(kvm);
if (ac > 2)
load_file(vm_mem + 0x100000, av[2]);
kvm_show_regs(kvm, 0);
kvm_run(kvm, 0);
return 0;
}
KVM 是解决虚拟化问题的一个有趣的解决方案,但是由于它是第一个进入内核的虚拟化解决方案,很难想象它会很快用于服务器虚拟化。还有其他一些方法一直在为进入 内核而竞争(例如 UML 和 Xen),但是由于 KVM 需要的修改较少,并且可以将标准内核转换成一个系统管理程序,因此它的优势不言而喻。
KVM 的另外一个优点是它是内核本身的一部分,因此可以利用内核的优化和改进。与其他独立的系统管理程序解决方案相比,这种方法是一种不会过时的技术。KVM 两个最大的缺点是需要较新的能够支持虚拟化的处理器,以及一个用户空间的 QEMU 进程来提供 I/O 虚拟化。但是不论好坏,KVM 位于内核中,这对于现有解决方案来说是一个巨大的飞跃。

KVM

KVM:Kernel-based Virtual Machine的简写,是rhel5.4推出的最新虚拟化技术,目前红帽只支持在64位的rhel5.4上运行kvm,同时硬件需要支持VT技术,使用kvm虚拟机的时候需要关闭SELinux;
Red Hat从2009年6月中旬开始在部分企业级用户那里开始了对Red Hat Enterprise Virtualization(RHRV)的beta测试。RHEV是Red Hat去年收购虚拟化厂商Qumranet获得的一项hypervisor技术。Citrix通过收购获得的Xen就是因为Linux hypervisor而被人们所熟知。不过Red Hat的KVM被认为是将成为未来Linux hypervisor的主流。 Red Hat产品和技术总裁Paul Cormier表示:“KVM最大的好处就在于它是与Linux内核集成的。未来几年人们的关注焦点仍然集中在hypervisor上。hypervisor是操作系统的一项功能,自然能够被用户所接受。微软和Red Hat操作系统的不同中间件和管理功能将起到重要的作用。”
从Linux 2.6.20开始内核中已经开始集成KVM。因此,由Fedora社区开发的Fedora也开始支持KVM。Linux 2.6.20之后的Linux发行版本的内核中也都将KVM作为基本的hypervisor。
Red Hat从进行beta测试的Red Hat Enterprise Linux(RHEL)5.4也开始装载了KVM。Red Hat日本营销本部部长中井雅也先生解释说:“为了确保企业用户的稳定性,我们进行了严格的beta测试。这对与开源社区合作的Red Hat来说是很不寻常的。由此看来,这表明Red Hat非常重视KVM基本的虚拟化性能。”
Xen和kvm一样,都是虚拟化开源软件,拥有同样出色的架构设计和性能。Xen和kvm都用于构建IaaS层。

虚拟化技术

虚拟化技术

虚拟化技术