一:什么是 KVM

KVM 是指基于 Linux 内核的虚拟机(Kernel-based Virtual Machine)。 2006 年 10 月,由以色列的 Qumranet 组织开发的一种新的“虚拟机”实现方案。 2007 年 2 月发布的 Linux 2.6.20 内核第一次包含了 KVM 。增加 KVM 到 Linux 内核是 Linux 发展的一个重要里程碑,这也是第一个整合到 Linux 主线内核的虚拟化技术。

KVM 在标准的 Linux 内核中增加了虚拟技术,从而我们可以通过优化的内核来使用虚拟技术。在 KVM 模型中,每一个虚拟机都是一个由 Linux 调度程序管理的标准进程,你可以在用户空间启动客户机操作系统。一个普通的 Linux 进程有两种运行模式:内核和用户。 KVM 增加了第三种模式:客户模式(有自己的内核和用户模式)。

一个典型的 KVM 安装包括以下部件:

  • 一个管理虚拟硬件的设备驱动,这个驱动通过一个字符设备 /dev/kvm 导出它的功能。通过 /dev/kvm 每一个客户机拥有其自身的地址空间,这个地址空间与内核的地址空间相分离或与任何一个正运行着的客户机相分离。
  • 一个模拟硬件的用户空间部件,它是一个稍微改动过的 QEMU 进程。从客户机操作系统执行 I/O 会拥有 QEMU。QEMU 是一个平台虚拟化方案,它允许整个 PC 环境(包括磁盘、显示卡(图形卡)、网络设备)的虚拟化。任何客户机操作系统所发出的 I/O 请求都被拦截,并被路由到用户模式用以被 QEMU 过程模拟仿真。

二: 安装 KVM

2.1 系统要求

KVM 需要有 CPU 的支持 (Intel VT 或 AMD SVM),在安装 KVM 之前检查一下 CPU 是否提供了虚拟技术的支持

  • 基于Intel处理器的系统,运行grep vmx /proc/cpuinfo查找 CPU flags 是否包括vmx关键词
  • 基于AMD处理器的系统,运行grep svm /proc/cpuinfo查找 CPU flags 是否包括svm关键词
  • 检查 BIOS,确保 BIOS 里开启VT选项

注:

  • 一些厂商禁止了机器 BIOS 中的 VT 选项 , 这种方式下 VT 不能被重新打开
  • /proc/cpuinfo 仅从 Linux 2.6.15(Intel) 和 Linux 2.6.16(AMD) 开始显示虚拟化方面的信息。请使用 uname -r 命令查询您的内核版本。如有疑问,请联系硬件厂商
egrep "(vmx|svm)" /proc/cpuinfo
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good xtopology nonstop_tsc aperfmperf pni dtes64 monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr pdcm dca sse4_1 sse4_2 popcnt lahf_lm dts tpr_shadow vnmi flexpriority ept vpid

2.2 安装 kvm 软件

安装 KVM 模块、管理工具和 libvirt (一个创建虚拟机的工具)

yum install -y qemu-kvm libvirt virt-install virt-manager bridge-utils
/etc/init.d/libvirtd start
chkconfig libvirtd on

2.2.1 确保正确加载 KVM 模块

lsmod  | grep kvm
kvm_intel              54285  0 
kvm                   333172  1 kvm_intel

2.2.2 检查 kvm 是否正确安装

virsh -c qemu:///system list
 Id    Name                           State
----------------------------------------------------

如果这里是错误信息,说明安装出现问题

2.3 配置网络-网桥模式

kvm 上网有两种配置,一种是 default,它支持主机和虚拟机的互访,同时也支持虚拟机访问互联网,但不支持外界访问虚拟机,另外一种是 bridge 方式,可以使虚拟机成为网络中具有独立 IP 的主机。

2.3.1 默认网络 virbro

默认的网络连接是 virbr0,它的配置文件在 /var/lib/libvirt/network 目录下,默认配置为

cat /var/lib/libvirt/network/default.xml 

  default
  77094b31-b7eb-46ca-930e-e0be9715a5ce

2.3.2 桥接网络

配置桥接网卡,配置如下

more /etc/sysconfig/network-scripts/ifcfg-\*
:::::::::::::: 新建文件
/etc/sysconfig/network-scripts/ifcfg-br0
::::::::::::::
DEVICE=br0
ONBOOT=yes
TYPE=Bridge
BOOTPROTO=static
IPADDR=192.168.39.20
NETMASK=255.255.255.0
GATEWAY=192.168.39.1
DNS1=8.8.8.8
:::::::::::::: 物理网卡
/etc/sysconfig/network-scripts/ifcfg-em1
::::::::::::::
DEVICE=em1
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
BRIDGE=br0
::::::::::::::

2.4 配置网络-NAT模式

NATM模式下不用配置为网卡

2.5配置 VNC

(1) 修改 VNC 服务端的配置文件

[root@LINUX ~]# vim /etc/libvirt/qemu.conf  
vnc_listen = "0.0.0.0"   第十二行,把 vnc_listen 前面的#号去掉。

(2) 重启 libvirtd 和 messagebus 服务

[root@LINUX ~]# /etc/init.d/libvirtd restart
Stopping libvirtd daemon:                             [  OK  ]
Starting libvirtd daemon: libvirtd: initialization failed  [FAILED]
解决办法:
[root@LINUX ~]# echo "export LC_ALL=en_US.UTF-8"  >>  /etc/profile
[root@LINUX ~]# source /etc/profile
[root@LINUX ~]# /etc/init.d/libvirtd restart
[root@LINUX ~]# /etc/init.d/messagebus restart

三:创建虚拟机

virt-manager 是基于 libvirt 的图像化虚拟机管理软件,操作类似 vmware,不做详细介绍。

  • (1)Virt-manager 图形化模式安装
  • (2)Virt-install 命令模式安装【本文使用此方式】
  • (3)Virsh XML 模板安装

3.1 上传 ISO

[root@LINUX ~]# mkdir -p /home/iso
[root@LINUX ~]# mkdir -p /home/kvm
将 iso 拷贝到 /home/iso 目录

3.2 创建 kvm 虚拟机的磁盘文件

本例创建的磁盘文件为 10G,实际使用中应注意下 /home 的空间,可以设置为 100G

[root@LINUX ~]# cd /home/kvm/
[root@LINUX ~]# qemu-img create -f qcow2 -o preallocation=metadata kvm_mode.img 10G        

3.3 启动虚拟机

3.3.1 启动虚拟机参数说明

virt-install命令有许多选项,这些选项大体可分为下面几大类,同时对每类中的常用选项也做出简单说明。

一般选项:指定虚拟机的名称、内存大小、VCPU个数及特性等;

  • -n NAME, --name=NAME:虚拟机名称,需全局惟一;
  • -r MEMORY, --ram=MEMORY:虚拟机内在大小,单位为MB;
  • --vcpus=VCPUS[,maxvcpus=MAX][,sockets=#][,cores=#][,threads=#]:VCPU个数及相关配置;
  • --cpu=CPU:CPU模式及特性,如coreduo等;可以使用qemu-kvm -cpu ?来获取支持的CPU模式;

安装方法:指定安装方法、GuestOS类型等;

  • -c CDROM, --cdrom=CDROM:光盘安装介质;
  • -l LOCATION, --location=LOCATION:安装源URL,支持FTP、HTTP及NFS等,如ftp://172.16.0.1/pub;
  • --pxe:基于PXE完成安装;
  • --livecd: 把光盘当作LiveCD;
  • --os-type=DISTRO_TYPE:操作系统类型,如linux、unix或windows等;
  • --os-variant=DISTRO_VARIANT:某类型操作系统的变体,如rhel5、fedora8等;
  • -x EXTRA, --extra-args=EXTRA:根据--location指定的方式安装GuestOS时,用于传递给内核的额外选项,例如指定kickstart文件的位置,--extra-args "ks=http://172.16.0.1/class.cfg"
  • --boot=BOOTOPTS:指定安装过程完成后的配置选项,如指定引导设备次序、使用指定的而非安装的kernel/initrd来引导系统启动等 ;例如:
  • --boot cdrom,hd,network:指定引导次序;
  • --boot kernel=KERNEL,initrd=INITRD,kernel_args=”console=/dev/ttyS0”:指定启动系统的内核及initrd文件;

存储配置:指定存储类型、位置及属性等;

  • --disk=DISKOPTS:指定存储设备及其属性;格式为--disk /some/storage/path,opt1=val1,opt2=val2等;常用的选项有:

    • device:设备类型,如cdrom、disk或floppy等,默认为disk;
    • bus:磁盘总结类型,其值可以为ide、scsi、usb、virtio或xen;
    • perms:访问权限,如rw、ro或sh(共享的可读写),默认为rw;
    • size:新建磁盘映像的大小,单位为GB;
    • cache:缓存模型,其值有none、writethrouth(缓存读)及writeback(缓存读写);
    • format:磁盘映像格式,如raw、qcow2、vmdk等;
    • sparse:磁盘映像使用稀疏格式,即不立即分配指定大小的空间;
  • --nodisks:不使用本地磁盘,在LiveCD模式中常用;

网络配置:指定网络接口的网络类型及接口属性如MAC地址、驱动模式等;

  • -w NETWORK, --network=NETWORK,opt1=val1,opt2=val2:将虚拟机连入宿主机的网络中,其中NETWORK可以为:
  • bridge=BRIDGE:连接至名为“BRIDEG”的桥设备;
  • network=NAME:连接至名为“NAME”的网络;
  • 其它常用的选项还有:
    • model:GuestOS中看到的网络设备型号,如e1000、rtl8139或virtio等;
    • mac:固定的MAC地址;省略此选项时将使用随机地址,但无论何种方式,对于KVM来说,其前三段必须为52:54:00;
  • --nonetworks:虚拟机不使用网络功能;

图形配置:定义虚拟机显示功能相关的配置,如VNC相关配置;

  • --graphics TYPE,opt1=val1,opt2=val2:指定图形显示相关的配置,此选项不会配置任何显示硬件(如显卡),而是仅指定虚拟机启动后对其进行访问的接口;

    • TYPE:指定显示类型,可以为vnc、sdl、spice或none等,默认为vnc;
    • port:TYPE为vnc或spice时其监听的端口;
    • listen:TYPE为vnc或spice时所监听的IP地址,默认为127.0.0.1,可以通过修改/etc/libvirt/qemu.conf定义新的默认值;
    • password:TYPE为vnc或spice时,为远程访问监听的服务进指定认证密码;
  • --noautoconsole:禁止自动连接至虚拟机的控制台;

设备选项:指定文本控制台、声音设备、串行接口、并行接口、显示接口等;

  • --serial=CHAROPTS:附加一个串行设备至当前虚拟机,根据设备类型的不同,可以使用不同的选项,格式为“--serial type,opt1=val1,opt2=val2,...”,例如:
  • --serial pty:创建伪终端;
  • --serial dev,path=HOSTPATH:附加主机设备至此虚拟机;
  • --video=VIDEO:指定显卡设备模型,可用取值为cirrus、vga、qxl或vmvga;

3.3.2 bridge 网络模式启动虚拟机

有独立 IP 时使用这种方式

[root@LINUX ~]# chmod -R 777 /etc/libvirt
[root@LINUX ~]# chmod -R 777 /home/kvm
[root@LINUX ~]#virt-install --name=kvm_test --ram 4096 --vcpus=4 \
-f /home/kvm/kvm_mode.img --cdrom /home/iso/sucunOs_anydisk.iso \
--graphics vnc,listen=0.0.0.0,port=7788, --network bridge=br0 \
--force --autostart

3.3.3 NAT 模式启动虚拟机

没有独立 IP 时使用这种方式

[root@LINUX ~]# chmod -R 777 /etc/libvirt
[root@LINUX ~]# chmod -R 777 /home/kvm
[root@LINUX ~]#virt-install --name=kvm_test --ram 4096 --vcpus=4 \
-f /home/kvm/kvm_mode.img --cdrom /home/iso/sucunOs_anydisk.iso \
--graphics vnc,listen=0.0.0.0,port=7788 \
--force --autostart

3.4 连接虚拟机

  • (1) 网上下载 VNC 客户端
  • (2) 用 VNC 客户端连接并安装虚拟机的操作系统(VNC 连上之后,跟安装 linux Centos 6.5 系统一样,重新装一次)
点击 continue 是如果出现闪退的情况,请修改 Option->Expert->ColorLevel 的值为 full

四:管理 KVM

4.1 管理 kvm 上的虚拟机

  • virsh list #显示本地活动虚拟机
  • virsh list --all #显示本地所有的虚拟机(活动的 + 不活动的)
  • virsh start x #启动名字为 x 的非活动虚拟机
  • virsh shutdown x #正常关闭虚拟机
  • virsh dominfo x #显示虚拟机的基本信息
  • virsh autostart x #将 x 虚拟机设置为自动启动

KVM_虚拟化技术的更多相关文章

  1. 联想笔记本如何开启笔记本的VT-x虚拟化技术功能

    虚拟化技术支持,需几个方面的条件支持:芯片组自身支持.BIOS提供支持.处理器自身支持.操作系统支持. 操作系统方面,主流操作系统均支持VMM管理,因此无需考虑. 而芯片组方面,从Intel 945( ...

  2. KVM虚拟化技术(七)虚拟机配置文件

    KVM虚拟机的配置文件在/etc/libvirt/qemu/下,为xml文件 整体结构如下: <domain type='kvm'> 虚拟机整体信息 系统信息 硬件资源特性 突发事件处理 ...

  3. Win10下E3-1231 V3开启Intel虚拟化技术(vt-x)安装HAXM

    硬件配置: 技嘉G1 Sniper B6主板,Intel Xeon E3-1231 V3 CPU.主板和U都支持Intel的虚拟化技术,也在主板的设置界面打开了虚拟化支持,如下图: 使用CPU-V检测 ...

  4. 解决在VMware中安装64位系统时“此主机具有虚拟化支持能力的,但虚拟化技术被禁用”的方法

    您已经配置此虚拟机使用64位客户操作系统.然而,64位操作系统不可用.此主机具有虚拟化支持能力的,但虚拟化技术被禁用.这通常是因为虚拟化技术已经在BIOS /固件设置或禁用或主机没有权限改变此设置. ...

  5. 虚拟化技术比较 PV HVM

    很多人看到同样配置的VPS价格相差很大,甚是不理解,其实VPS使用的虚拟技术种类有很多,如OpenVZ.Xen.KVM.Xen和HVM与PV.在XEN中pv是半虚拟化,hvm是全虚拟化,pv只能用于L ...

  6. CPU虚拟化技术(留坑)

    留坑~~~ 不知道这个是这么实现的 CPU虚拟化技术就是单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率.虚 ...

  7. VPS的虚拟化技术—-XEN,KVM,OPENVZ

    市场上的VPS商家主要有 Xen ,KVM 和 OpenVZ 三种开源的虚拟化技术 Xen 是一个开放源代码虚拟机监视器,由剑桥大学开发.它打算在单个计算机上运行多达 100个满特征的操作系统.操作系 ...

  8. 虚拟化技术对比:Xen vs KVM

    恒天云:http://www.hengtianyun.com/download-show-id-68.html 一.说明 本文主要从功能方面和性能方面对Xen和KVM对比分析,分析出其优缺点指导我们恒 ...

  9. VPS选购及辨别vps虚拟化技术

    现在国内外的VPS(Virtual Private Server)服务商非常多,每个服务商使用的VPS架构都不同.VPS属于虚拟化服务器,中文名:虚拟专用服务器. 常见的VPS虚拟化架构有多种:Ope ...

随机推荐

  1. C#中RichEdit控件,保存文本和图片到mysql数据库

    分别通过内存流和RTF文件保存 方法1: //建立内存流 MemoryStream ms = new MemoryStream(); //ms.Position = 0; //把当前的richtext ...

  2. 移动端h5拍照压缩即时上传后台并预览

    项目经理让迭代一个功能,实时预览并上传到后台的功能,听到这立马想起了几个第三方插件去实现,mui  和api cloude万万没想到的是这个app前面使用ios 和安卓原生写的,然后mui和api c ...

  3. kali 2.0中msf连接postgres数据库

    装好kali 2.0后直接运行msfconsole msf> db_status postgres selected, no connection 百度到的解决方法多是针对BT和kali 1.0 ...

  4. 小程序基于疼讯qcloud的nodejs开发服务器部署

        腾讯,疼讯,很疼. 请慎重看腾讯给出的文档,最好做一个笔记. 我只能说我能力有限,在腾讯云小程序的文档中跳了n天. 最后还是觉得记录下来,以防止我的cpu过载给烧了. 此文档是对<小程序 ...

  5. LayoutInflater 三种获得方式

    LayoutInflater 作用是从外部加载一个xml布局文件. 获得 LayoutInflater 实例的三种方式: 1.LayoutInflater inflater = getLayoutIn ...

  6. Html5如何自学 只需这几步

    Html5在整个行业卷起了一场大潮流,好多人都,但是很多人都不知道该怎么学习Html5,不知道Html5该如何自学?不知道Html5开发多久才会学会?接下来将从以下几点内容详细讲述. 第一,很多人建议 ...

  7. 理解defineProperty以及getter、setter

    我们常听说vue是用getter与setter实现数据监控的,那么getter与setter到底是什么东西,它与defineProperty是什么关系,平时有哪些用处呢?本文将为大家一一道来. 对象的 ...

  8. AFNetworking提示3840 Unescaped control character around character XXX

    处理办法:找到AFNetworking包中AFURLResponseSerialization.m文件在第250行修改代码如下: if (data.length > 0 && ! ...

  9. Filter、Listener 学习总结

    今天我们来介绍 Filter.Listener 这两个模块一些简单的知识和应用,接下来我们开始我们的正题 ! 1. Filter(过滤器) 1.1 对 Servlet 容器调用 Servlet 的过程 ...

  10. springboot整合rabbitmq

    概述 RabbitMQ是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,或者简单地将作业队列以便让分布式服务器进行处理. 它现实了AMQP协议,并且遵循Mozilla P ...