一 .KVM 简介

KVM (名称来自英语: Kernel-basedVirtual Machine 的缩写,即基于内核的虚拟机) , 是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一个hypervisor。KVM在2007年2月被导入Linux 2.6.20核心中,以可加载核心模块的方式被移植到FreeBSD及illumos上。

KVM在具备Intel VT或AMD-V功能的x86平台上运行。它也被移植到S/390,PowerPC与IA-64平台上。在Linux内核3.9版中,加入ARM架构的支持。

关于KVM:

1).KVM是开源软件,全称是kernel-based virtual machine(基于内核的虚拟机)。
2).是x86架构且硬件支持虚拟化技术(如 intel VT 或 AMD-V)的Linux全虚拟化解决方案。
3).它包含一个为处理器提供底层虚拟化 可加载的核心模块kvm.ko(kvm-intel.ko或kvm-AMD.ko)。
4).KVM还需要一个经过修改的QEMU软件(qemu-kvm),作为虚拟机上层控制和界面。
5).KVM能在不改变linux或windows镜像的情况下同时运行多个虚拟机,(它的意思是多个虚拟机使用同一镜像)并为每一个虚拟机配置个性化硬件环境(网卡、磁盘、图形适配器……)。
6).在主流的Linux内核,如2.6.20以上的内核均已包含了KVM核心。

――――摘自 WIKI 百科

KVM  与  vbox 的区别

vbox  是由  qemu  改写而成,包含大量 qemu  代码。

1).可以使用于"不支持"虚拟化技术的cpu。
2).值得说的一点:vbox 在图形方面比较好,能进行2D 3D加速;但cpu控制不理想(估计是因为图形支持的缘故);操作上有独立的图形界面,易于上手。

kvm  是 linux 内核包含的东西,使用 qemu 作为上层管理(命令行)。

1).要求cpu 必须支持虚拟化。
2).性能:作为服务器很好,可是图形能力十分的差。即使放电影,图像也是像刷油漆一样,一层一层的。
3).cpu使用率控制很好。
4).控制上比较简洁,功能比较丰富:比如使用“无敌功能”所有更改指向内存,你的镜像永远保持干净。“母镜像”功能让你拥有n个独立快照点。还有很多参数。另外,kvm作为内核级的虚拟机,刚开始发展关注的公司比较多――但是还没有达到商业应用的水平。

总体而言: 在支持虚拟化的情况下, vbox  和  kvm  的性能差不多,主要是面向对象不同: kvm 适用于服务器, vbox 适用于桌面应用。

qemu  全称 Quick Emulator 。 是独立虚拟软件,能独立运行虚拟机(根本不需要 kvm )。 kqemu 是该软件的加速软件。 kvm 并不需要 qemu 进行虚拟处理,只是需要它的上层管理界面进行虚拟机控制。虚拟机依旧是由 kvm 驱动。所以,大家不要把概念弄错了,盲目的安装 qemu 和kqemu 。 qemu 使用模拟器

KVM 内存管理

KVM 继承了 Linux 系统管理内存的诸多特性,比如,分配给虚拟使用的内存可以被交换至交换空间、能够使用大内存页以实现更好的性能,以及对 NUMA 的支持能够让虚拟机高效访问更大的内存空间等。

KVM 基于 Intel 的 EPT ( ExtendedPage Table )或 AMD 的 RVI ( Rapid Virtualization Indexing )技术可以支持更新的内存虚拟功能,这可以降低 CPU 的占用率,并提供较好的吞吐量。

此外, KVM 还借助于 KSM ( Kernel Same-pageMerging )这个内核特性实现了内存页面共享 。 KSM 通过扫描每个虚拟机的内存查找各虚拟机间相同的内存页,并将这些内存页合并为一个被各相关虚拟机共享的单独页面。在某虚拟机试图修改此页面中的数据时, KSM 会重新为其提供一个新的页面副本。实践中,运行于同一台物理主机上的具有相同 GuestOS 的虚拟机之间出现相同内存页面的概率是很的,比如共享库、内核或其它内存对象等都有可能表现为相同的内存页,因此, KSM 技术可以降低内存占用进而提高整体性能。

相关连接:

KVM 的官方地址: http://www.linux-kvm.org/page/Main_Page

KVM 的 Howto 文档: http://www.linux-kvm.org/page/HOWTO

Kqemu 源码地址: http://sourceforge.net/projects/kqemu/

Qemu 下载地址: http://wiki.qemu.org/Main_Page

二 .KVM 虚拟化平台构建

1. 安装准备

查看你的硬件是否支持虚拟化。命令:

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

注意:

1 ) . 要有  vmx  或  svm  的标识才行。总的说来, AMD 在虚拟化方面作得更好一些。

2 ) . 我用的是虚拟机,我使用了 VBOX ,发现其不支持硬件虚拟化,启动虚拟机后执行查看命令无法发现上述的选项;所以我就换成了 VMware Workstation 10 ,并在虚拟机的设置中打开了 CPU 设置中的虚拟化引擎,选择了 Intel VT-x/EPT 或 AMD-V/RVI(V) 这个选项;具体设置如下图:

2. 安装 KVM

由于 Linux 内核已经将 KVM 收录了,在安装系统时已经加入了 KVM ,我们只需要在命令行模式下启用 KVM 即可:

启用 KVM 模块

#modprobe kvm

功能区分 intel/amd 的启用:

#modprobe kvm-intel
# lsmod |grep kvm
kvm_intel              55496  0
kvm                   337772  1 kvm_intel

3.KVM 虚拟机创建和管理所依赖的组件介绍

KVM 虚拟机的创建依赖 qemu-kvm :

虽然 kvm 的技术已经相当成熟而且可以对很多东西进行隔离,但是在某些方面还是无法虚拟出真实的机器。比如对网卡的虚拟,那这个时候就需要另外的技术来做补充,而 qemu-kvm 则是这样一种技术。它补充了 kvm 技术的不足,而且在性能上对 kvm 进行了优化。

我们还可以使用 virt-manager , virt-viewer 来管理虚拟机;

我们在创建和管理 KVM 虚拟机时还需要 libvirt 这个重要的组件:

它是一系列提供出来的库函数,用以其他技术调用,来管理机器上的虚拟机。包括各种虚拟机技术, kvm 、 xen 与 lxc 等,都可以调用 libvirt 提供的 api 对虚拟机进行管理。有这么多的虚拟机技术,它为何能提供这么多的管理功能那。是因为它的设计理念,它是面向驱动的架构设计。对任何一种虚拟机技术都开发设计相对于该技术的驱动。这样不同虚拟机技术就可以使用不同驱动,而且相互直接不会影响,方便扩展。而且 libvirt 提供了多种语言的编程接口,可以直接通过编程,调用 libvirt 提供的对外接口实现对虚拟机的操作。如今流行的云计算中的 IaaS 是与该库联系相当密切的。通过下图可以看出它的架构设计思想。

从该图可以看出,在 libvirtapi 之上会有很多个 driver ,对于每一种虚拟机技术都会有一种 driver ,用来充当该虚拟机技术与 libvirt 之间的包装接口。如此设计就可以避免 libvirt 需要设计各种针对不同虚拟机技术的接口,它主要关注底层的实现,提供对外接口调用,而不同的虚拟机技术通过调用 libvirt 提供的接口来完成自己所需要的功能。

4. 安装 KVM 所需组件

yum 源提供了,直接安装:

#yum install -y qemu-kvm libvirt virt-manager

安装完成后启动 libvirtd 服务:

#service libvirtd start

会自动启动一个桥设备,这相当于 VMware Workstation 中的 host-only 仅主机的网络设备;

# ifconfig
eth0     Link encap:Ethernet  HWaddr00:0C:29:3E:63:26 inet addr:172.16.31.7 Bcast:172.16.255.255 Mask:255.255.0.0inet6 addr: fe80::20c:29ff:fe3e:6326/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500  Metric:1RX packets:25460 errors:0 dropped:0overruns:0 frame:0TX packets:9728 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:35156437 (33.5 MiB)  TXbytes:800196 (781.4 KiB)
lo       Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING MTU:65536  Metric:1RX packets:12 errors:0 dropped:0 overruns:0 frame:0TX packets:12 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:1024 (1024.0 b)  TXbytes:1024 (1024.0 b)
virbr0   Link encap:Ethernet  HWaddr52:54:00:30:54:41 inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST MTU:1500  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:0 (0.0 b)  TX bytes:0(0.0 b)

使用网桥管理命令查看:

# brctl show
bridge name     bridge id               STP enabled     interfaces
virbr0          8000.525400305441       yes             virbr0-nic

像 VMware Workstation 中我们需要创建物理桥接设备,可以使用 virsh 创建桥设备关联网卡到桥接设备上:

需要将 NetworkManager 服务关闭,开机启动也关闭:

# chkconfig NetworkManager off
# service NetworkManager stop

然后在创建桥接设备及关联网卡到桥接设备上:

# virsh iface-bridge eth0 br0

查看桥接设备及其他网络设备运行情况:

# ifconfig
br0      Link encap:Ethernet  HWaddr00:0C:29:3E:63:26 inet addr:172.16.31.7  Bcast:172.16.255.255  Mask:255.255.0.0inet6 addr: fe80::20c:29ff:fe3e:6326/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500  Metric:1RX packets:76 errors:0 dropped:0 overruns:0 frame:0TX packets:60 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:9781 (9.5 KiB)  TXbytes:8957 (8.7 KiB)
eth0     Link encap:Ethernet  HWaddr00:0C:29:3E:63:26 inet6 addr: fe80::20c:29ff:fe3e:6326/64 Scope:LinkUP BROADCAST RUNNINGMULTICAST  MTU:1500  Metric:1RX packets:176 errors:0 dropped:0 overruns:0 frame:0TX packets:97 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:1000RX bytes:26793 (26.1 KiB)  TXbytes:11385 (11.1 KiB)
lo       Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0inet6 addr: ::1/128 Scope:HostUP LOOPBACK RUNNING MTU:65536  Metric:1RX packets:4 errors:0 dropped:0 overruns:0 frame:0TX packets:4 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:344 (344.0 b)  TXbytes:344 (344.0 b)
virbr0   Link encap:Ethernet  HWaddr52:54:00:30:54:41 inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0UP BROADCAST RUNNING MULTICAST MTU:1500  Metric:1RX packets:0 errors:0 dropped:0 overruns:0 frame:0TX packets:0 errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:0 (0.0 b)  TX bytes:0(0.0 b)

查看桥接设备:

# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.000c293e6326       yes             eth0
virbr0         8000.525400305441       yes             virbr0-nic

至此,我们的虚拟化平台就构建完毕,下面就开始在 KVM 虚拟化平台上创建和管理虚拟机,我们先使用 qemu-kvm 来创建和管理虚拟机。

三 . 使用 qemu-kvm 管理 KVM 虚拟机

1.Qemu-kvm 介绍

Qemu 是一个广泛使用的开源计算机仿真器和虚拟机。当作为仿真器时,可以在一种架构 ( 如PC 机 ) 下运行另一种架构 ( 如 ARM) 下的操作系统和程序。而通过动态转化,其可以获得很高的运行效率。当作为一个虚拟机时, qemu 可以通过直接使用真机的系统资源,让虚拟系统能够获得接近于物理机的性能表现。 qemu 支持 xen 或者 kvm 模式下的虚拟化。当用 kvm 时, qemu可以虚拟 x86 、服务器和嵌入式 powerpc ,以及 s390 的系统。

QEMU  当运行与主机架构相同的目标架构时可以使用 KVM 。例如,当在一个 x86 兼容处理器上运行  qemu-system-x86  时,可以利用  KVM  加速――为宿主机和客户机提供更好的性能。

Qemu 有如下几个部分组成:

         处理器模拟器(x86、PowerPC和Sparc);仿真设备(显卡、网卡、硬盘、鼠标等);用于将仿真设备连接至主机设备(真实设备)的通用设备;模拟机的描述信息;调试器;与模拟器交互的用户接口;

基于 libvirt 的工具如 virt-manager 和 virt-install 提供了非常便捷的虚拟机管理接口,但它们事实上上经二次开发后又封装了 qemu-kvm 的工具。因此,直接使用 qemu-kvm 命令也能够完成此前的任务。

2.Qemu-kvm 的使用帮助

在 RHEL6/CentOS6 上, qemu-kvm 位于 /usr/libexec 目录中。由于此目录不属于 PATH 环境变量,故无法直接使用,这样也阻止了可以直接使用 qemu 作为创建并管理虚拟机。如若想使用qemu 虚拟机,可以通过将 /usr/libexec/qemu-kvm 链接为 /usr/bin/qemu 实现。

# ln -sv  /usr/libexec/qemu-kvm  /usr/bin/qemu-kvm

qemu-kvm 命令使用格式为“ qemu-kvm [options] [disk_image] ”,其选项非常多,不过,大致可分为如下几类。

         标准选项;USB选项;显示选项;i386平台专用选项;网络选项;字符设备选项;蓝牙相关选项;Linux系统引导专用选项;调试/专家模式选项;PowerPC专用选项;Sparc32专用选项;

qemu-kvm的标准选项

qemu-kvm的标准选项主要涉及指定主机类型、CPU模式、NUMA、软驱设备、光驱设备及硬件设备等。

-name name:设定虚拟机名称;
-M machine:指定要模拟的主机类型,如Standard PC、ISA-only PC或Intel-Mac等,可以使用“qemu-kvm -M ?”获取所支持的所有类型;
-m megs:设定虚拟机的RAM大小;
-cpu model:设定CPU模型,如coreduo、qemu64等,可以使用“qemu-kvm -cpu ?”获取所支持的所有模型;
-smp n[,cores=cores][,threads=threads][,sockets=sockets][,maxcpus=maxcpus]:设定模拟的SMP架构中CPU的个数等、每个CPU的核心数及CPU的socket数目等;PC机上最多可以模拟255颗CPU;maxcpus用于指定热插入的CPU个数上限;
-numa opts:指定模拟多节点的numa设备;
-fda file
-fdb file:使用指定文件(file)作为软盘镜像,file为/dev/fd0表示使用物理软驱;
-hda file
-hdb file
-hdc file
-hdd file:使用指定file作为硬盘镜像;
-cdrom file:使用指定file作为CD-ROM镜像,需要注意的是-cdrom和-hdc不能同时使用;将file指定为/dev/cdrom可以直接使用物理光驱;
-drive option[,option[,option[,...]]]:定义一个硬盘设备;可用子选项有很多。
    file=/path/to/somefile:硬件映像文件路径;
    if=interface:指定硬盘设备所连接的接口类型,即控制器类型,如ide、scsi、sd、mtd、floppy、pflash及virtio等;
    index=index:设定同一种控制器类型中不同设备的索引号,即标识号;
    media=media:定义介质类型为硬盘(disk)还是光盘(cdrom);
    snapshot=snapshot:指定当前硬盘设备是否支持快照功能:on或off;
    cache=cache:定义如何使用物理机缓存来访问块数据,其可用值有none、writeback、unsafe和writethrough四个;
    format=format:指定映像文件的格式,具体格式可参见qemu-img命令;
-boot [order=drives][,once=drives][,menu=on|off]:定义启动设备的引导次序,每种设备使用一个字符表示;不同的架构所支持的设备及其表示字符不尽相同,在x86 PC架构上,a、b表示软驱、c表示第一块硬盘,d表示第一个光驱设备,n-p表示网络适配器;默认为硬盘设备;
-boot order=dc,once=d

qemu-kvm的显示选项

显示选项用于定义虚拟机启动后的显示接口相关类型及属性等。

-nographic:默认情况下,qemu使用SDL来显示VGA输出;而此选项用于禁止图形接口,此时,qemu类似一个简单的命令行程序,其仿真串口设备将被重定向到控制台;
-curses:禁止图形接口,并使用curses/ncurses作为交互接口;
-alt-grab:使用Ctrl+Alt+Shift组合键释放鼠标;
-ctrl-grab:使用右Ctrl键释放鼠标;
-sdl:启用SDL;
-spice option[,option[,...]]:启用spice远程桌面协议;其有许多子选项,具体请参照qemu-kvm的手册;
-vga type:指定要仿真的VGA接口类型,常见类型有:cirrus:Cirrus Logic GD5446显示卡;std:带有Bochs VBI扩展的标准VGA显示卡;vmware:VMWare SVGA-II兼容的显示适配器;qxl:QXL半虚拟化显示卡;与VGA兼容;在Guest中安装qxl驱动后能以很好的方式工作,在使用spice协议时推荐使用此类型;none:禁用VGA卡;
-vnc display[,option[,option[,...]]]:默认情况下,qemu使用SDL显示VGA输出;使用-vnc选项,可以让qemu监听在VNC上,并将VGA输出重定向至VNC会话;使用此选项时,必须使用-k选项指定键盘布局类型;其有许多子选项,具体请参照qemu-kvm的手册;

i386平台专用选项

-no-acpi:禁用ACPI功能,GuestOS与ACPI出现兼容问题时使用此选项;
-balloon none:禁用balloon设备;
-balloon virtio[,addr=addr]:启用virtio balloon设备;

网络属性相关选项

网络属性相关选项用于定义网络设备接口类型及其相关的各属性等信息。这里只介绍nic、tap和user三种类型网络接口的属性,其它类型请参照qemu-kvm手册。

-net nic[,vlan=n][,macaddr=mac][,model=type][,name=name][,addr=addr][,vectors=v]:创建一个新的网卡设备并连接至vlan n中;PC架构上默认的NIC为e1000,macaddr用于为其指定MAC地址,name用于指定一个在监控时显示的网上设备名称;emu可以模拟多个类型的网卡设备,如virtio、i82551、i82557b、i82559er、ne2k_isa、pcnet、rtl8139、e1000、smc91c111、lance及mcf_fec等;不过,不同平台架构上,其支持的类型可能只包含前述列表的一部分,可以使用“qemu-kvm -net nic,model=?”来获取当前平台支持的类型;
-net tap[,vlan=n][,name=name][,fd=h][,ifname=name][,script=file][,downscript=dfile]:通过物理机的TAP网络接口连接至vlan n中,使用script=file指定的脚本(默认为/etc/qemu-ifup)来配置当前网络接口,并使用downscript=file指定的脚本(默认为/etc/qemu-ifdown)来撤消接口配置;使用script=no和downscript=no可分别用来禁止执行脚本;
-net user[,option][,option][,...]:在用户模式配置网络栈,其不依赖于管理权限;有效选项有:
    vlan=n:连接至vlan n,默认n=0;
    name=name:指定接口的显示名称,常用于监控模式中;
    net=addr[/mask]:设定GuestOS可见的IP网络,掩码可选,默认为10.0.2.0/8;
    host=addr:指定GuestOS中看到的物理机的IP地址,默认为指定网络中的第二个,即x.x.x.2;
    dhcpstart=addr:指定DHCP服务地址池中16个地址的起始IP,默认为第16个至第31个,即x.x.x.16-x.x.x.31;
    dns=addr:指定GuestOS可见的dns服务器地址;默认为GuestOS网络中的第三个地址,即x.x.x.3;
    tftp=dir:激活内置的tftp服务器,并使用指定的dir作为tftp服务器的默认根目录;
    bootfile=file:BOOTP文件名称,用于实现网络引导GuestOS;如:qemu -hda linux.img -boot n -net user,tftp=/tftpserver/pub,bootfile=/pxelinux.0

3. 使用 qemu-kvm 安装虚拟机 Guest OS

测试安装 windows xp

1 ) . 下载系统镜像文件,我这里有个 windows XP 的 ghost 系统,我们来试着安装。

winxp_ghost.iso

创建虚拟机的磁盘文件存放目录:

# mkdir /kvm/images -pv

创建虚拟磁盘文件:

# qemu-img create -o preallocation=metadata -f qcow2 /kvm/images/winxp.qcow2 60G
# ll -h /kvm/images/
total 9.6M
-rw-r--r-- 1 root root 61G Feb  7 23:50 winxp.qcow2

2 ) . 在 kvm 平台安装 vnc-server 和 tigervnc 这个 vncviewer

# yum install vnc-server tigervnc -y
设置vncserver的密码;
# vncpasswd
Password:
Verify:
启动vncserver
# vncserverNew 'createOS:1 (root)' desktop iscreateOS:1Creating default startup script/root/.vnc/xstartup
Starting applications specified in/root/.vnc/xstartup
Log file is /root/.vnc/createOS:1.log

我们通过 windows 客户端的 vncviewer 连接到虚拟机上进行操作;

输入虚拟化平台ip地址:

输入 VNC 服务器的密码:

进入虚拟化平台:

等待后续操作。

3 ) . 安装虚拟机

我们在命令行模式下安装启动虚拟机:

创建一个名为 winxp 的虚拟机,其 RAM 大小为 512MB ,有一颗 CPU 的 SMP 架构,默认引导设备是硬盘,有一个光驱设备和硬盘设备, usb 设备为 tablet ;

#qemu-kvm -cpu host -smp 1 -name winxp -m 512  -drive file=/kvm/images/winxp.qcow2,if=ide,meida=disk,format=qcow2  -drive file=/root/winxp_ghost.iso,media=cdrom -boot dc  -usbdevice tablet

启动后如图:

我们到图形界面上进行连接:

#vncviewer :5900

我这里进入 winpe 安装系统:

选择全自动恢复GHO镜像到C盘,开始安装:

安装完毕后重启就黑屏了。

进不去,算了,就这样吧。

我们下面使用一个测试系统 cirros 来测试 KVM 的虚拟化平台;

4. 安装 cirros 虚拟机

1 ) .cirros 镜像文件下载

镜像下载

32 位镜像下载地址: https://launchpad.net/cirros/trunk/0.3.0/+download/cirros-0.3.0-i386-disk.img

64 位镜像的下载地址: https://launchpad.net/cirros/trunk/0.3.0/+download/cirros-0.3.0-x86_64-disk.img

我这里使用的是 cirros-0.3.0-x86_64-disk.img

我们查看一些镜像文件信息:

# qemu-imginfocirros-0.3.0-x86_64-disk.img
image: cirros-0.3.0-x86_64-disk.img
file format: qcow2
virtual size: 39M (41126400 bytes)
disk size: 9.3M
cluster_size: 65536

2 ) . 安装启动 cirros 虚拟机

我们在启动虚拟机时加入网卡设备。

# mv cirros-0.3.0-x86_64-disk.img  /kvm/images

如果我们加入网卡设备,那么必须要涉及到系统启动后桥接网络到 br0 上,我们通过脚本实现启动和停止系统时桥接网络和删除桥接的自动执行操作:

启动虚拟机将网卡桥接到桥接设备上:

# cat /etc/qemu-ifup
#!/bin/bash
#
bridge=br0
if [ -n "$1" ]; thenip link set $1 upsleep 1brctl addif $bridge $1[ $? -eq 0 ] && exit 0 || exit 1
elseecho "Error: no interfacespecified."exit 1
fi

关闭虚拟机后自动将网卡从桥接设备上移除:

# cat/etc/qemu-ifdown
#!/bin/bash
#
bridge=br0
if [ -n "$1" ];thenbrctl delif $bridge $1ip link set $1 downexit 0
elseecho "Error: no interfacespecified."exit 1
fi

给予脚本执行权限;

#chmod +x /etc/qemu-ifup 
#chmod +x /etc/qemu-ifdown

启动 cirros 虚拟机系统:

# qemu-kvm -m 128 -name cirros -drive file=/kvm/images/cirros-0.3.0-x86_64-disk.img,media=disk,format=qcow2,if=ide-net nic -net tap,ifname=vnet0,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown -boot c

启动完成后,通过 vncviewer 连接我们启动的虚拟机:

输入用户名和密码进入系统并且切换到root用户:

查看虚拟机的网卡:

使用 ping 测试,测试到达网关与否:

再到 KVM 虚拟化平台上查看一下 vnet0 是否生成:

[root@createOS ~]#ifconfig
br0      Link encap:Ethernet HWaddr00:0C:29:3E:63:26 inetaddr:172.16.31.7 Bcast:172.16.255.255 Mask:255.255.0.0inet6 addr:fe80::20c:29ff:fe3e:6326/64 Scope:LinkUP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1RX packets:380906errors:0 dropped:0 overruns:0 frame:0TX packets:165151errors:0 dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:748466471 (713.7MiB)  TXbytes:78691011 (75.0 MiB)
eth0     Link encap:Ethernet HWaddr00:0C:29:3E:63:26 inet6 addr:fe80::20c:29ff:fe3e:6326/64 Scope:LinkUP BROADCAST RUNNINGMULTICAST MTU:1500  Metric:1RX packets:838156errors:0 dropped:0 overruns:0 frame:0TX packets:206259errors:0 dropped:0 overruns:0 carrier:0collisions:0txqueuelen:1000RX bytes:864246873 (824.2MiB)  TXbytes:80899673 (77.1 MiB)
lo       Link encap:Local Loopback inetaddr:127.0.0.1 Mask:255.0.0.0inet6 addr: ::1/128Scope:HostUP LOOPBACK RUNNING MTU:65536  Metric:1RX packets:91986 errors:0dropped:0 overruns:0 frame:0TX packets:91986 errors:0dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:85874602 (81.8MiB)  TXbytes:85874602 (81.8 MiB)
virbr0   Link encap:Ethernet  HWaddr52:54:00:30:54:41 inetaddr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0UP BROADCAST RUNNINGMULTICAST MTU:1500  Metric:1RX packets:0 errors:0dropped:0 overruns:0 frame:0TX packets:0 errors:0dropped:0 overruns:0 carrier:0collisions:0 txqueuelen:0RX bytes:0 (0.0 b) TX bytes:0(0.0 b)
vnet0    Link encap:Ethernet HWaddrC6:E4:5A:0D:A1:1C inet6 addr:fe80::c4e4:5aff:fe0d:a11c/64 Scope:LinkUP BROADCAST RUNNINGMULTICAST MTU:1500  Metric:1RX packets:85 errors:0dropped:0 overruns:0 frame:0TX packets:33815 errors:0dropped:0 overruns:0 carrier:0collisions:0txqueuelen:500RX bytes:6866 (6.7KiB)  TXbytes:9643416 (9.1 MiB)

至此,一个完整的 cirros 虚拟机就完成安装了。

5.Qemu 监视器的使用

我们可以通过 Qemu 监视器来监测虚拟机的运行情况;

1 ) .Qemu 监视器打开的方式:

图形窗口模式的打开方式:

CTRL+ALT+2  :通过输入快捷键就能打开 Qemu 的监视器;

CTRL+ALT+1  :输入快捷键即可返回虚拟化机界面;

文本窗口模式的打开方式:

CTRL+a c    :这组快捷键可以实现虚拟机界面和 Qemu 监视器之间的切换;

注意: 如果需要让虚拟机运行在文本窗口模式,我们需要在创建和启动虚拟机时键入: -nographic 的选项。

2 ) . 打开 cirros 虚拟机的 Qemu 监视器

按 CRTL+ALT+2 组合键即可打开 Qemu 监视器;

如图所示:

3 ) .Qemu 监视器下的常用命令

help:显示帮助
info:显示一些虚拟机系统信息的如:infocpus,infotlb
savevm,loadvm,delvm:保存、装载、删除虚拟机快照
commit:提交虚拟机修改部分
change:改变虚拟机配置如:changevncpassword
device_add&device_del:实现动态添加和移除设备
usb_add&usb_del:添加和移除usb设备
migrate,migrate_cancel:迁移和取消迁移指令
cpu:设定默认CPU
log&logfile:记录日志和将日志记录到日志文件中
sendkey:向虚拟机发送指令
system_powerdown:向客户端发送关闭电源通知
system_reset:重启虚拟机
system_wakeup:唤醒虚拟机
q or quit:退出qemu监视器,qemu进程会终止;

6. 我们启动一个在文本窗口模式下的虚拟机

我们再次下载一个 cirros 虚拟机磁盘镜像文件,将其名称更改后启动:

# cp cirros-0.3.0-x86_64-disk.img /kvm/images/cirros-0.3.0-x86_64-disk2.img

启动 cirros 虚拟机:

# qemu-kvm -m 128 -name cirros2 -drive file=/kvm/images/cirros-0.3.0-x86_64-disk2.img,media=disk,format=qcow2,if=ide -net nic tap,ifname=vnet1,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown -boot c -nographic

启动会进行 30 次云环境探测,我们可以忽略其错误;

启动会在虚拟终端自动进行,启动后如图:

这里会存在一个问题,就是我们未指定网卡的 mac 地址,会造成启动的两台虚拟机的 IP 地址是一致的, mac 地址都是 52:54:00:12:34:56  ,如图:

我们必须指定虚拟机的 mac 地址来避免虚拟机 IP 地址一致性问题。

使用快捷键切换到 qemu 监视器,先按 CTRL+a  后松手输入“ c ”字母即可进入 qemu 的监视器:

我们可以发现一个优点是文本窗口模式下的 qemu 监视器的命令行可以翻页,是不是比图形化的好啊!  <^_^>!

下面我们停止文本窗口的虚拟机,指定好 mac 地址后再启动虚拟机哦!

同样按组合键 CTRL+a  再按 c 切换到虚拟机界面输入 poweroff 关闭虚拟机电源:

再次启动虚拟机:指定好mac地址哦!

# qemu-kvm -m 128 -name cirros2 -drive file=/kvm/images/cirros-0.3.0-x86_64-disk2.img,media=disk,format=qcow2,if=ide-net nic,macaddr=52:54:00:65:43:21 -net tap,ifname=vnet1,script=/etc/qemu-ifup,downscript=/etc/qemu-ifdown -boot c -nographic

启动后如图:

地址分配的不一样了。

我们来测试一下能否 ping通 第一台虚拟机;

测试 ping 通,桥接网络是互通的。

至此,基于 Qemu-kvm 创建和管理虚拟机的实验就完成了。

KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机相关推荐

  1. KVM虚拟化技术(三)之克隆虚拟机

    大家好,我是邵奈一,一个不务正业的程序猿.正儿八经的斜杠青年. 1.世人称我为:被代码耽误的诗人.没天赋的书法家.五音不全的歌手.专业跑龙套演员.不合格的运动员- 2.这几年,我整理了很多IT技术相关 ...

  2. Linux KVM 虚拟化技术

    目录 KVM 介绍 一.KVM虚拟化 二.虚拟化技术 三.虚拟化技术发展 四.虚拟化类型 五.虚拟化特性 优势 劣势 案例 VMM主要功能 六.KVM架构及原理 KVM简介 KVM原理 KVM虚拟化架 ...

  3. 编译安装KVM虚拟化技术

    目录 一.虚拟化技术 二.虚拟化的历史 2.1 Xen和KVM的区别 三.虚拟化的类型 四.虚拟化的优劣势 4.1 优势 4.2 劣势 五.KVM简介 六.KVM架构及原理 七.KVM原理 八.安装虚 ...

  4. KVM 虚拟化技术 | 虚拟化平台部署

    KVM 虚拟化技术 一.虚拟化技术 1.1 概述 1.2 类型 ① 全虚拟化 ② 半虚拟化 ③ 直通 1.3 特点 二.KVM 2.1 概述 2.2 原理 2.3 虚拟化架构 2.4 工作流程 三.部 ...

  5. KVM虚拟化技术介绍及搭建

    目录 前言 一.虚拟化 1.1 虚拟化发展历史 1.2 虚拟化分类 1.2.1 架构分类 1.2.2 虚拟化程度分类 1.3 虚拟化的优势及劣势 1.3.1 优势 1.3.2 劣势 二.KVM 2.1 ...

  6. kvm虚拟化技术下虚拟机磁盘的数据保护

    摘要:kvm虚拟化技术下虚拟机的磁盘空间中数据的保护与恢复,考虑kvm的服务器级别的可用性. 1.kvm技术简单介绍    kvm虚拟化技术由几部分构成,kvm内核模块(cpu和内存的虚拟化及管理), ...

  7. KVM 虚拟化技术以及 KVM 和云计算的关系

    KVM 是 Kernel-based Virtual Machine 的简称,KVM 要求 CPU 支持硬件虚拟化技术(如 intel VT 或 AMD-V),是 Linux 下的全虚拟化解决方案.K ...

  8. KVM虚拟化技术的-NUMA技术和应用

    KVM虚拟化技术的-NUMA技术和应用 NUMA技术是解决多CPU共同工作的技术方案,多CPU共同工作主要有3中架构:SMP:Symmetric Multi-Processor),非统一存储访问结构( ...

  9. KVM 虚拟化技术之Hypervisor的实现

    KVM 虚拟化技术之Hypervisor的实现 VMM(VirtualMachineMonitor)对物理资源的虚拟可以划分为三个部分: CPU虚拟化.内存虚拟化和I/O设备虚拟化,其中以CPU的虚拟 ...

最新文章

  1. html5 游戏图片预加载,前端实现图片(img)预加载
  2. LeetCode-动态规划基础题-509. 斐波那契数
  3. Java内存模型与指令重排
  4. iphone/ipad图标尺寸
  5. Google Code Jam Round 1A 2015 解题报告
  6. 定义类的Python示例
  7. 论文浅尝 | 基于知识库的类型实体和关系的联合抽取
  8. python3 web框架_循序渐进Python3(十二) --0--  web之框架
  9. 如何导出/导入PuTTy会话列表?
  10. 什么是Git?——Git的学习与使用(一)
  11. python函数第二次运行报错_(数据科学学习手札54)Python中retry的简单用法
  12. 第11章 支撑向量机 SVM 学习笔记 中
  13. FeHelper的安装、使用
  14. 我在舒舍的短租生活之旅
  15. 洛谷P1424 小鱼的航程(改进版)-c++题解
  16. 知家发布国内首个DTC白皮书,小仙炖创始人、五菱高管为其助威
  17. 谈谈技术人的英语学习
  18. 【Python】CPython解释器及字节码
  19. ubuntu English版下安装拼音输入法
  20. 轻松入门Python爬取基金数据

热门文章

  1. 哈希(Hashing)
  2. [CF1129E]Legendary Tree
  3. sql级联更新和级联删除
  4. Vue2积分商城PC端项目(一)
  5. html调用手机陀螺仪,前端基于THREE.js的3D全景,支持鼠标控制和手机陀螺仪的切换...
  6. nginx实现https转发
  7. SEO判断是否是搜索引擎蜘蛛跳转(快照劫持)
  8. 解决锁定图层后不能淡显的问题
  9. 简洁的PHP图床源码烟雨图床程序源码
  10. 线性回归与逻辑回归的原理、计算步骤、区别、联系