设为首页 收藏本站
查看: 1439|回复: 0

[经验分享] 了解-KVM

[复制链接]

尚未签到

发表于 2015-10-10 10:57:12 | 显示全部楼层 |阅读模式
研究了很久的KVM,感觉是我用过的最快的虚拟机。对比常用的虚拟机,Vmware的功能全面,设置简单,但其速度不是很好;VirtualBox的效率虽然比Vmware高一些,但是存在不少缺点,感觉在运行时比较抢CPU,现在virtualbox已经支持smp,和虚拟化技术,但整体效率还是没有KVM高(但是图形效率作的不错);KVM(Kernel-based
Virtual Machine),基于内核的虚拟机,是我用过的最快的虚拟机,需要CPU支持虚拟化技术,并且在BIOS里打开虚拟化选项,效率可达到物理机的80%以上,对SMP的支持很好
。所以现在强烈吐血卖命推荐KVM。(注:在原文最下面添加了版虚拟化驱动(virtio)的使用方式)

(使用磁盘方式以更新,请大家注意!!!)

没有废话,以下是在UBUNTU 10.04.3 64BIT下的方法

获得KVM

KVM的网站:http://sourceforge.net/projects/kvm/files/

下载最新的qemu-kvm-1.0.tar.gz

解压:

代码:
tar -xzvf qemu-kvm-1.0.tar.gz


需要用到的包:

在 UBUNTU 10.04中 ,可以使用
代码:
sudo apt-get build-dep qemu-kvm
来解决依赖关系。

三步曲:

代码:
cd qemu-kvm-1.0

/configure --prefix=/usr/local/kvm

make

sudo make install


安装好以后加载KVM模块

代码:
sudo modprobe kvm

sudo modprobe kvm-intel  //如果你的是INTEL处理器就用这个

sudo modprobe kvm-amd  //如果你的是AMD处理器就用这个  实例说明
  执行./kvm.sh start(即会执行脚本fwbr start)
  文件名kvm.sh


  

main()
{
if [ $1 == start ]; then
sudo modprobe kvm-intel
/home/ygm/wbq/kvm/scripts/fwbr start
elif [ $1 == stop ]; then
/home/ygm/wbq/kvm/scripts/fwbr stop
sudo modprobe -r kvm-intel
sudo modprobe -r kvm
else
echo $1 is not valid param!
fi
return 0
}
main $@
  fwbr文件内容如下:执行脚本fwbr start即执行start()函数
  brctl addbr fwbr0  (建立一个逻辑网段,名称为fwbr0)


  ifconfig fwbr0 up 1.0.0.254 netmask 255.255.255.0
broadcast 1.0.0.255 (启动网桥并
给网桥接口分配一个 IP 地址)



  
  

start()
{
sudo brctl addbr fwbr0
sudo ifconfig fwbr0 up 1.0.0.254 netmask 255.255.255.0 broadcast 1.0.0.255
return 0
}
stop()
{
sudo ifconfig fwbr0 down
sudo brctl delbr fwbr0
return 0
}
main()
{
if [ $1 == start ]; then
start
elif [ $1 == stop ]; then
stop
else
echo $1 is not valid param!
fi
return 0
}
main $@

  

这样就装好了。



下面介绍配置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,ifname=tapo,script=no  使用网络,并连接到一个存在的网络设备tap0,注意mac地址一定要自己编一个,特别是如果你虚拟了多个系统并且要同时运行的话,不然就MAC冲突了,在
  



代码:
-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 -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 10.04.1 64bit



其实KVM的安装和使用都很方便简单的,大家要理解KVM各个参数的含义。最关键的就是KVM的网络桥接的设置,在这里大家要多看软件自身的文档,会有很大的帮助。

以上是KVM的最基础的实现方法,望大家多看文档,以便掌握更多更灵活的功能。



BTW:

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



注:Ubuntu 10.04 LTS 下的安装源里的KVM的方法(qemu-kvm 0.12.3):

直接

代码:
sudo apt-get install qemu-kvm


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



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



添加:半虚拟化驱动使用方式如下

WIN系统需要下载的驱动程序:

http://www.linux-kvm.com

在左手边有一个Windows Guest Drivers,下载cdrom image和floppy image

使用版虚拟化驱动(virtio)可以得到更好的磁盘性能和网络性能,使用版虚拟化驱动的时候,KVM的启动参数如下(安装WIN时):

代码:
sudo /usr/local/kvm/bin/qemu-system-x86_64 -m 512 -drive file=/home/lm/kvm/winxp.img,if=virtio,boot=on,cache=writeback -localtime -net nic,vlan=0,model=virtio,macaddr=52-54-00-12-34-01 -net tap,vlan=0,ifname=tap0,script=no -boot d -cdrom /home/lm/iso/winxp.iso
-fda=/disk/virtio-win-1.1.11-0.vfd -smp 2


说明一下新的参数:

代码:
在file=/home/lm/kvm/winxp.img,if=virtio,boot=on,cache=writeback中


添加了if=virtio,通过virio来使用磁盘

代码:
在 -net nic,vlan=0,model=virtio,macaddr=52-54-00-12-34-01中


添加了model=virtio,通过virtio来使用网络

代码:
-fda=/disk/virtio-win-1.1.11-0.vfd


驱动程序的软盘镜像,-fda为添加一个软盘驱动器



在安装WINDOWS的时候需要注意:在虚拟机启动从光盘引导启动WINDOWS安装的时候(最开始的时候)会提示你,按F6选择第三方驱动程序,按F6以后过几秒钟,它会出现选择第三方驱动的画面,按下S,会让你选择你要加载的第三方驱动。(网络太慢,图传不上来,大家可参考:http://www.linux-kvm.org/page/WindowsGuestDrivers/viostor/installation)

在WINDOWS安装完成以后,还要安装virtio网络驱动程序,修改KVM启动参数:

代码:
sudo /usr/local/kvm/bin/qemu-system-x86_64 -m 512 -drive file=/home/lm/kvm/winxp.img,if=virtio,boot=on,cache=writeback -localtime -net nic,vlan=0,model=virtio,macaddr=52-54-00-12-34-01 -net tap,vlan=0,ifname=tap0,script=no -boot c -cdrom /home/lm/iso/virtio-win-1.1.11-0.iso
-smp 2


启动虚拟机,启动好WIN系统以后,在WIN中安装网卡驱动程序(在设备管理器中安装),驱动程序就在虚拟机的光驱中。有时在安装过程中会出现问题,那么去掉cache=writeback重新安装试试。

现在主流的LINUX系统的内核都集成了virtio驱动,所以在使用半虚拟化驱动安装LINUX的时候可以直接安装,无需加载virtio驱动来安装。



注:

如果你使用的是raw文件系统或LVM分区,则应该将cache=writeback改为cache=none

建议大家使用LVM分区方式,这样虚拟机的磁盘性能可以接近物理机的磁盘性能。关于LVM的创建大家可以去查找相关文章,在这里给大家一个KVM使用LVM分区的示例:

代码:
sudo /usr/local/kvm/bin/qemu-system-x86_64 -m 512 -drive file=/dev/vg0/lv1,if=virtio,boot=on,cache=none -localtime -net nic,vlan=0,model=virtio,macaddr=52-54-00-12-34-01 -net tap,vlan=0,ifname=tap0,script=no -boot c -smp 2




virt-manager图形管理界面使用方法:

1.安装qemu-kvm,virt-manager,bridge-utils

代码:
sudo apt-get install qemu-kvm bridge-utils virt-manager




2.修改网络为桥接模式:

编辑/etc/network/interface

代码:
sudo vim /etc/network/interface


修改其内容,如:

代码:
auto lo

iface lo inet loopback



auto eth0

iface eth0 inet manual



auto br0

iface br0 inet static

bridge_ports eth0

address 192.168.1.8

netmask 255.255.255.0

gateway 192.168.1.1

就这两段哦,相比上面的,少了TAP段



重启networking服务(如果原来你使用network-manager来管理网络,那么需要停止network-manager):

代码:
sudo /etc/init.d/network-manager stop          //停止network-manager服务

sudo /etc/init.d/networking start                   //启动networking服务,需要耐心等待一下



这时可以ifconfig看以下br0有没有出现你设定的IP地址,也可以用brctl show来看一下eth0有没有桥接到br0。



启动vrit-manager

代码:
sudo virt-manager

  这里要使用超级用户身份启动,所以要在终端里使用sudo命令启动,如果直接点GNOME菜单中的虚拟系统管理器,那么只能链接到用户模式(除非你新建一个链接,使用SSH方式从本机链接到本机)
  


  好了,开始win7安装之旅吧

sudo qemu-img create -f raw mywin7.img 20G





//需要指定media=cdrom,再安装驱动

sudo qemu-system-x86_64 --enable-kvm -drive file=/home/ygm/mywin7/mywin7.img,

if=virtio -m 1024 -net nic,model=virtio -net user -cdrom /home/ygm/2008/win7_sp1_x86.iso

-drive file=/home/ygm/2008/virtio-win-0.1-81.iso,index=3,media=cdrom -rtc base=localtime,

-usbdevice tablet -soundhw ac97 -cpu host -vga vmware









ygmxp.sh启动脚本如下:

KVMPATH=/home/ygm/mywin7

SERIALDEV=pty

sudo kvm -hda $KVMPATH/mywin7.img \

-smp 2 -boot c -m 1024 -localtime \

-net nic,vlan=0,model=virtio,macaddr=52:54:04:00:00:45 -net tap,vlan=0,ifname=win7_net0,\

script=$KVMPATH/kvm-ifup0,downscript=$KVMPATH/kvm-ifdown0

# -nographic -serial $SERIALDEV \







#解释####################

-nographic  启动没有界面,通过远程桌面访问

-serial pty 可以通过minicom -s访问win7并进行配置





kvm-ifup0文件内容如下:

#!/bin/sh

# NOTE: For this script to operate properly, it is expected that

#       you have a br0  

# tunctl -t tap 创建一个名为tap的虚拟网卡

# tunctl -d tap 删除一个名为tap的虚拟网卡

# brctl addif fwbr0 tap 将名为tap的虚拟网卡挂接在桥fwbr0上

# brctl addif delif tap 将名为tap的虚拟网卡从桥fwbr0上删除



BRIDGE=fwbr0

/usr/sbin/tunctl -t $1

/sbin/ifconfig $1 0.0.0.0 up

/usr/sbin/brctl addif $BRIDGE $1





kvm-ifdown0文件内容如下:

#!/bin/sh

# NOTE: For this script to operate properly, it is expected that

#       you have a br0



BRIDGE=fwbr0

/sbin/ifconfig $1 down

/usr/sbin/tunctl -d $1

/usr/sbin/brctl delif $BRIDGE $1

#########################

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-125020-1-1.html 上篇帖子: 使用ConVirt管理基于KVM的虚拟机 – 安装篇 下篇帖子: 利用libvirt管理KVM虚拟机
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表