kvm基础概念

虚拟化是指通过虚拟化技术将一台计算机虚拟为多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同得操作系统,并且应用程序都可以在相互独立得空间内运行而不受影响,从而显著提高计算机得工作效率。 虚拟化使用软件得方法重新定义规划IT资源,可以实现IT资源得动态分配、灵活调度、跨域共享、提高IT资源利用率,使IT资源能够真正成为基础设施,服务于各行各业中灵活多变得应用需求。

1.0虚拟化简史 在这里插入图片描述 其中,KVM 全称是 基于内核的虚拟机(Kernel-based Virtual Machine),它是Linux 的一个内核模块,该内核模块使得 Linux 变成了一个Hypervisor:

◆它由 Quramnet 开发,该公司于 2008年被 Red Hat 收购。 ◆它支持 x86 (32 and 64 位), s390, Powerpc 等 CPU。 ◆它从 Linux 2.6.20 起就作为一模块被包含在 Linux 内核中。 ◆它需要支持虚拟化扩展的 CPU ◆他是完全开源的 官网

1.1 kvm架构 KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案。KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度;虚机的每个虚拟 CPU 被实现为一个常规的 Linux 线程。这使得 KMV 能够使用 Linux 内核的已有功能。 但是,KVM 本身不执行任何硬件模拟,需要用户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟 I/O,并将它的视频显示映射回宿主的显示屏。目前这个应用程序是 QEMU。 Linux 上的用户空间、内核空间和虚机: 在这里插入图片描述 ◆ Guest:客户机系统,包括CPU(vCPU)、内存、驱动(Console、网卡、I/O 设备驱动等),被 KVM 置于一种受限制的 CPU 模式下运行。 ◆ KVM:运行在内核空间,提供 CPU 和内存的虚级化,以及客户机的 I/O 拦截。Guest 的 I/O 被 KVM 拦截后,交给 QEMU 处理。 ◆ QEMU:修改过的被 KVM 虚机使用的 QEMU 代码,运行在用户空间,提供硬件 I/O 虚拟化,通过 IOCTL /dev/kvm 设备和 KVM 交互。

KVM 是实现拦截虚机的 I/O 请求的原理:

现代 CPU 本身实现了对特殊指令的截获和重定向的硬件支持,甚至新硬件会提供额外的资源来帮助软件实现对关键硬件资源的虚拟化从而提高性能。以X86 平台为例,支持虚拟化技术的 CPU 带有特别优化过的指令集来控制虚拟化过程。通过这些指令集,VMM很容易将客户机置于一种受限制的模式下运行,一旦客户机试图访问物理资源,硬件会暂停客户机运行,将控制权交回给 VMM 处理。VMM 还可以利用硬件的虚级化增强机制,将客户机在受限模式下对一些特定资源的访问,完全由硬件重定向到 VMM指定的虚拟资源,整个过程不需要暂停客户机的运行和 VMM的参与。由于虚拟化硬件提供全新的架构,支持操作系统直接在上面运行,无需进行二进制转换,减少了相关的性能开销,极大简化了VMM的设计,使得VMM性能更加强大。从2005 年开始,Intel 在其处理器产品线中推广 Intel Virtualization Technology 即 IntelVT技术。

QEMU-KVM:

其实 QEMU 原本不是 KVM 的一部分,它自己就是一个纯软件实现的虚拟化系统,所以其性能低下。但是,QEMU 代码中包含整套的虚拟机实现,包括处理器虚拟化,内存虚拟化,以及 KVM需要使用到的虚拟设备模拟(网卡、显卡、存储控制器和硬盘等)。 为了简化代码,KVM 在 QEMU 的基础上做了修改。VM 运行期间,QEMU 会通过 KVM 模块提供的系统调用进入内核,由 KVM 负责将虚拟机置于处理的特殊模式运行。当虚机进行 I/O 操作时,KVM 会从上次系统调用出口处返回 QEMU,由 QEMU 来负责解析和模拟这些设备。 从 QEMU 角度看,也可以说是 QEMU 使用了 KVM 模块的虚拟化功能,为自己的虚机提供了硬件虚拟化加速。除此以外,虚机的配置和创建、虚机运行所依赖的虚拟设备、虚机运行时的用户环境和交互,以及一些虚机的特定技术比如动态迁移,都是 QEMU 自己实现的。

KVM:

KVM 内核模块在运行时按需加载进入内核空间运行。KVM 本身不执行任何设备模拟,需要 QEMU 通过 /dev/kvm 接口设置一个 GUEST OS 的地址空间,向它提供模拟的 I/O 设备,并将它的视频显示映射回宿主机的显示屏。它是KVM 虚机的核心部分,其主要功能是初始化 CPU 硬件,打开虚拟化模式,然后将虚拟客户机运行在虚拟机模式下,并对虚机的运行提供一定的支持。以在 Intel 上运行为例,KVM 模块被加载的时候, 它做的事情如下: : 1.首先初始化内部的数据结构; 2.做好准备后,KVM 模块检测当前的 CPU,然后打开 CPU 控制及存取 CR4 的虚拟化模式开关,并通过执行 VMXON 指令将宿主操作系统置于虚拟化模式的根模式; 3.最后,KVM 模块创建特殊设备文件 /dev/kvm 并等待来自用户空间的指令。 ◆ 接下来的虚机的创建和运行将是 QEMU 和 KVM 相互配合的过程。两者的通信接口主要是一系列针对特殊设备文件 /dev/kvm 的 IOCTL 调用。其中最重要的是创建虚机。它可以理解成KVM 为了某个特定的虚机创建对应的内核数据结构,同时,KVM 返回一个文件句柄来代表所创建的虚机。 ◆ 针对该句柄的调用可以对虚机做相应地管理,比如创建用户空间虚拟地址和客户机物理地址、真实物理地址之间的映射关系,再比如创建多个 vCPU。KVM 为每一个 vCPU 生成对应的文件句柄,对其相应地 IOCTL 调用,就可以对vCPU进行管理。其中最重要的就是“执行虚拟处理器”。通过它,虚机在 KVM 的支持下,被置于虚拟化模式的非根模式下,开始执行二进制指令。在非根模式下,所有敏感的二进制指令都被CPU捕捉到,CPU 在保存现场之后自动切换到根模式,由 KVM 决定如何处理。 ◆ 除了 CPU 的虚拟化,内存虚拟化也由 KVM 实现。实际上,内存虚拟化往往是一个虚机实现中最复杂的部分。CPU 中的内存管理单元 MMU 是通过页表的形式将程序运行的虚拟地址转换成实际物理地址。在虚拟机模式下,MMU 的页表则必须在一次查询的时候完成两次地址转换。因为除了将客户机程序的虚拟地址转换了客户机的物理地址外,还要将客户机物理地址转化成真实物理地址。

1.2 kvm得功能列表

KVM 所支持的功能包括: ◆支持 CPU 和 memory 超分(Overcommit)
◆支持半虚拟化 I/O (virtio) ◆支持热插拔 (cpu,块设备、网络设备等) ◆支持对称多处理(Symmetric Multi-Processing,缩写为 SMP ) ◆支持实时迁移(Live Migration)
◆支持 PCI 设备直接分配和 单根 I/O 虚拟化 (SR-IOV) ◆支持内核同页合并 (KSM ) ◆支持 NUMA (Non-Uniform Memory Access,非一致存储访问结构 )

1.3 kvm工具集合

◆ libvirt:操作和管理KVM虚机的虚拟化 API,使用 C 语言编写,可以由 Python,Ruby, Perl, PHP,Java 等语言调用。可以操作包括 KVM,vmware,XEN,Hyper-v, LXC 等在内的多种 Hypervisor。 ◆ Virsh:基于 libvirt 的 命令行工具 (CLI) ◆ Virt-Manager:基于 libvirt 的 GUI 工具 ◆ virt-v2v:虚机格式迁移工具 ◆ virt-* 工具:包括 Virt-install (创建KVM虚机的命令行工具),Virt-viewer (连接到虚机屏幕的工具),Virt-clone(虚机克隆工具),virt-top 等 ◆ sVirt:安全工具

1.4 虚拟化分类 (1)完全虚拟化

最流行的虚拟化方法使用名为hypervisor的一种软件,在虚拟服务器和底层硬件之间建立一个抽象层。VMware和微软的VirtualPC是代表该方法的两个商用产品,而基于核心的虚拟机(KVM)是面向Linux系统的开源产品hypervisor可以捕获CPU指令,为指令访问硬件控制器和外设充当中介。因而,完全虚拟化技术几乎能让任何-款操作系统不用改动就能安装到虚拟服务器上,而它们不知道自己运行在虚拟化环境下。主要缺点是,hypervisor给处理器带来开销

(2)准虚拟化

完全虚拟化是处理器密集型技术,因为它要求hyperviso管理各个虚拟服务器,并让它们彼此独立。减轻这种负担的一种方法就是,改动客户端操作系统,让它以为自己运行在虚拟环境下,能够与hypervisor协同工作。这种方法就叫准虚拟化。(para-virtualization)Xen是开源准虚拟化技术的一个例子。操作系统作为虚拟服务器在Xen hypervisor.上运行之前,它必须在核心层面进行某些改变。因此,Xen 适用于BSD、Linux 、Solaris及其他开源操作系统,但不适合对像Windows这些专有的操作系统进行虚拟化处理,因为它们无法改动。准虚拟化技术的优点是性能高。经过准虚拟化处理的服务器可与hypervisor协同工作,其响应能力几乎不亚于未经过虚拟化处理的服务器。准虚拟化与完全虚拟化相比优点明显,以至于微软和VMware都在开发这项技术,以完善各自的产品。

(3)系统虚拟化

就操作系统层的虚拟化而言,没有独立的hypervisor层。相反,主机操作系统本身就负责在多个虚拟服务器之间分配硬件资源,并且让这些服务器彼此独立。一个明显的区别是,如果使用操作系統层虚拟化,所有虚拟服务器必须运行同一操作系统(不过每个实例有各自的应用程序和用户。账户).虽然操作系统层虚拟化的灵活性比较差,但本机速度性能比较高。此外,由于架构在所有虚拟服务器上使用单一、标准的操作系统,管理起来比异构环境要容易。

(4)桌面虚拟化

服务器虚拟化主要针对服务器而言,而虚拟化最接近用户的还是要算的上桌面虚拟化了,桌面虚拟化主要功能是将分散的桌面环境集中保存并管理起来,包括桌面环境的集中下发,集中更新,集中管理。桌面虚拟化使得桌面管理变得简单,不用每台终端单独进行维护,每台终端进行更新。终端数据可以集中存储在中心机房里,安全性相对传统桌面应用要高很多。桌面虚拟化可以使得一个人拥有多个桌面环境,也可以把一个桌面环境供多人使用。


准备环境 VMware Workstation CentOS-7-x86_64-DVD-1611.iso

首先安装完VMware Workstation,依次点击编辑——虚拟网路编辑器 在这里插入图片描述

点击NAT设置,如图 在这里插入图片描述 点击DHCP设置,如图 在这里插入图片描述 都设置完成后如下图 在这里插入图片描述 接下来需要配置一下本地电脑得VMnet8网卡,依次点击网络——属性——更改适配器设置——VMnet8——属性——lnternet协议版本 4 (TCP/IPv4)——配置ip——子网——网关——dns 在这里插入图片描述 这里要注意下配置网关时要和你VMware Workstation里配置的网关一样如下图 在这里插入图片描述 安装centos7 1.点击创建新的虚拟机 在这里插入图片描述 2.点击自定义——下一步 在这里插入图片描述 3.点击下一步 在这里插入图片描述 4.点击稍后安装操作系统——下一步 在这里插入图片描述 5.点击Linux(L)——选择CentOS 7 64位——下一步 在这里插入图片描述 6.选择安装路径——下一步 在这里插入图片描述 7.处理器数量(P)调2——每个处理器的内核数量(C)调2——下一步 在这里插入图片描述 8.内存调为4个G——下一步 在这里插入图片描述 9.使用网络地址转换(NAT)(E)——下一步 在这里插入图片描述 10.这里默认推荐即可——下一步 在这里插入图片描述 11.磁盘类型——下一步 在这里插入图片描述 12.创建新的虚拟磁盘——下一步 在这里插入图片描述 13.设置磁盘大小——下一步 在这里插入图片描述 14.默认即可——下一步 在这里插入图片描述 15.点击自定义硬件——选择处理器——勾上虛拟化Intel VT-x/EPT 或AMD-V/RVI(V)——点击关闭——点击完成 在这里插入图片描述 16.点击CD/DVD(IDE) ——选择使用ISO映像文件——选择CentOS-7-x86_64-DVD-1611.iso光盘镜像——点击确定 在这里插入图片描述 17.点击开启此虚拟机 在这里插入图片描述 18.用↑键来选择如图,然后回车 在这里插入图片描述 19.默认即可 在这里插入图片描述 20.设置ip,如图 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 21.设置网络时间 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 22.磁盘自动分配即可 在这里插入图片描述 在这里插入图片描述 23.安装虚拟化功能 在这里插入图片描述 在这里插入图片描述 中文解释如图 在这里插入图片描述 24.开始安装 在这里插入图片描述 25.设置root密码,建立用户 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 26.点击重启 在这里插入图片描述 27.重启指接受霸王条约 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 到这里centos7已经安装完毕,下面开始用kvm创建虚拟机

部署及图形化管理KVM

1.打开命令终端

[root@localhost ~]# mkdir -p /data_kvm/store
//创建一个用于虚拟机存储池的目录
[root@localhost ~]# mkdir -p /data_kvm/iso
//创建一个用于镜像存储池的目录
[root@localhost ~]# virt-manager 
//使用图形界面管理KVM

(1)创建存储池 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 以同样的方式再次创建一个用于存放镜像的存储池! 在这里插入图片描述 在这里插入图片描述 (2)创建存储卷 在这里插入图片描述 在这里插入图片描述 (3)上传系统镜像,创建虚拟机 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 接下来就跟证常安装操作系统一样,安装完成系统之后,可以设置IP地址,自行测试,与外部网络是否能够通信!

 virt-install --os-type=linux --os-variant centos7.0 --name test1 --ram 1024 --vcpus 1  --disk /kvm/disk/test1.raw,format=raw,size=10 --location /kvm/iso/CentOS-7-x86_64-DVD-1611.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

部署及命令行管理KVM

[root@localhost ~]# mkdir -p /kvm/{iso,disk} 
//创建相应目录用来存放镜像和虚拟机磁盘
[root@localhost ~]# cp CentOS-7-x86_64-DVD-1611.iso  /kvm/iso/
//准备用于安装虚拟机的镜像
[root@localhost ~]#  qemu-img create -f raw /kvm/disk/web01.raw 10G
//创建虚拟磁盘,使用“-f”指定磁盘类型,大小为10G
[root@localhost ~]# virt-install --os-type=linxu --os-variant centos7.0 --name web01 --ram 1024 \
 --vcpus 1 --disk /kvm/disk/web01.raw,format=raw,size=10 --location /kvm/iso/CentOS-7-x86_64-DVD-1611.iso\
 --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole 
//创建虚拟机,由于命令配置项一目了然,这里就不多做介绍了
开始安装......
搜索文件 .treeinfo......                                                          |  354 B  00:00:00     
搜索文件 vmlinuz......                                                            | 5.9 MB  00:00:00     
搜索文件 initrd.img......                                                         |  50 MB  00:00:00     
域安装仍在进行。您可以重新连接
到控制台以便完成安装进程。
[root@localhost ~]# virt-manager              //打开图像化管理控制台

在这里插入图片描述 在这里插入图片描述 至此,命令行创建虚拟机就完成了,接下来使用手动更改配置文件的方式,克隆web01,生成新的虚拟机web02

[root@kvm iso]# virsh list --all     #确保要克隆的虚拟机在关闭状态下
 Id    名称                         状态
----------------------------------------------------
 -     test01                         关闭
 -     test02                         关闭
 -     web01                          关闭      #就是要克隆这台
[root@kvm ~]# cd /kvm/disk/      #切换至虚拟机的虚拟磁盘存放目录
[root@kvm disk]# cp web01.raw web02.raw     #将要克隆的虚拟机磁盘复制一份,并更改名称
[root@kvm disk]# cd /etc/libvirt/qemu/     #切换至KVM虚拟机配置文件的目录
[root@kvm qemu]# ls     #查看当前目录下的文件
networks  test01.xml  test02.xml  web01.xml
[root@kvm qemu]# virsh dumpxml web01 > ./web02.xml  
#将web01的配置文件使用dumpxml工具进行备份为当前目录下的web02.xml
[root@kvm qemu]# ls         #确认备份成功
networks  test01.xml  test02.xml  web01.xml  web02.xml
[root@kvm qemu]# vim web02.xml      #编辑备份出的文件

<domain type='kvm'>
  <name>web02</name>     #将这里的名字改为web02
  <uuid>2d6f2a7c-9937-4afb-b8d6-8ef01ca61434</uuid>    #删除UUID这行配置,防止冲突
  <memory unit='KiB'>1048576</memory>
            .............#省略部分内容
  <devices>          #定位到该行标签
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw'/>
      <source file='/kvm/disk/web02.raw'/>        #将这里的路径更改为刚才使用cp命令复制的web02.raw文件
#更改完成后,保存退出
[root@kvm qemu]# virsh define web02.xml     #定义此配置文
#(可以理解为载入该虚拟机,此时,需要注意当前的工作路径)
定义域 web02(从 web02.xml)

[root@kvm qemu]# virsh list --all     #查看是否克隆成功
 Id    名称                         状态
----------------------------------------------------
 -     test01                         关闭
 -     test02                         关闭
 -     web01                          关闭
 -     web02                          关闭
#OK!查看到了,可以自行运行web02,测试是否运行正常。
[root@kvm qemu]# virsh start web02     #启动web02
域 web02 已开始

[root@kvm qemu]# virsh list --all     #OK,正在运行!
 Id    名称                         状态
----------------------------------------------------
 3     web02                          running
          .............#省略部分内容

远程连接KVM虚拟机的方法

[root@localhost ~]# virsh start web01
//启动web01虚拟机

(1)使用VNC软件连接KVM虚拟机 下载VNC软件 提取码:6666

root@localhost ~]# virsh vncdisplay web01   //查看web01的监听端口
:0
//0表示监听的端口是5900端口;1则表示监听的是5901端口,以此类推!

实验环境,我就直接关闭防火墙了,不想关闭防火墙的话,执行以下命令即可!

[root@localhost ~]# firewall-cmd --add-port=5900/tcp --permanent
[root@localhost ~]# firewall-cmd --reload
//开启5900端口,便于VNC对其进行操作

在这里插入图片描述

如果连接时,出现以下状况: 在这里插入图片描述 则表示在KVM宿主机中,虚拟机已经打开了一个终端,关闭即可!

在这里插入图片描述 在这里插入图片描述 VNC连接成功后,我们可以调整其内核参数,使用console方式可以连接到KVM虚拟机,在KVM虚拟机中执行以下命令:

[root@localhost ~]# grubby --update-kernel=ALL --args=”console=ttyS0”    
//修改其内核参数,使其向console方式分配一个终端
[root@localhost ~]# reboot    //重启此虚拟机,以便更改生效

(2)使用console方式连接KVM虚拟机

[root@localhost ~]# virsh console web01 #连接时注意时你的kvm虚拟机名称
//使用console方式登录web01虚拟机

在这里插入图片描述 使用默认的NAT网络类型使web02可以ping通外网

这里就进行ping百度的测试,务必保证KVM宿主机可以ping通百度。 (1)检查相关配置

[root@kvm ~]# virsh net-list --all     <!--检查当前的网络设置-->
 名称               状态     自动开始  持久
----------------------------------------------------------
 default              活动     是           是
[root@kvm ~]# ifconfig         <!--检查当前的网络接口-->
          .............<!--省略部分内容-->
virbr0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
                <!--
virbr0是由宿主机虚拟机支持模块安装时产生的虚拟网络接口,
也是一个switch和bridge,负责把内容分发到各虚拟机。
virbr0是一个桥接器,接收所有到网络192.168.122.*的内容。
从下面命令可以验证:     -->
[root@kvm ~]# brctl show
bridge name bridge id       STP enabled interfaces
virbr0      8000.525400a8bf19   yes     virbr0-nic
                                                                     vnet0
[root@kvm ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0

(2)接下来开始配置nat网络

[root@kvm ~]# virsh net-define /usr/share/libvirt/networks/default.xml  
#如果没有上面指定的文件,可以使用该命令定义一个虚拟网络
也可以修改该文件,创建自己的虚拟网络
[root@kvm ~]# virsh net-autostart default     #网络default标记为自动启动
[root@kvm ~]# virsh net-start default       #启动网络,若已启动,此处会报错
[root@kvm ~]# vim /etc/sysctl.conf    #修改此配置文件
               ............#省略部分内容
net.ipv4.ip_forward=1       #在文件末尾加入该行,以便允许IP转发
[root@kvm ~]# vim /etc/libvirt/qemu/web02.xml 
                ............#省略部分内容
   <interface type='network'>
      <mac address='52:54:00:24:9d:24'/>
      <source network='default'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
#定位“interface”关键字,确定有上述内容
                              ............#省略部分内容

(3)连接到虚拟机web02,更改网卡的配置:

[root@web02~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0   #编辑网卡配置文件

在这里插入图片描述 更改网卡后,保存退出。

[root@web02~]# systemctl restart network         #重启web02虚拟机的网络服务

在这里插入图片描述 KVM常用命令

[root@localhost ~]# virsh start 虚拟机名称                        //开启虚拟机
[root@localhost ~]# virsh list                                             //仅查看运行的虚拟机列表
[root@localhost ~]# virsh list --all                                      //查看所有虚拟机列表
[root@localhost~]# virsh shutdown 虚拟机名称                //正常的关闭虚拟机
[root@localhost ~]# virsh destroy    虚拟机名称                //强制关闭虚拟机(类似于拔电源)
[root@localhost ~]# virsh dumpxml 虚拟机名称 > /root/test01-dum.xml             //虚拟机备份
[root@localhost ~]# virsh undefine 虚拟机名称                             //删除虚拟机(注意:取消定义之后,磁盘文件需要手动删除)
[root@localhost ~]# virsh define 备份的.xml虚拟机文件               //通过配置文件生成虚拟机
[root@localhost ~]# virsh edit 虚拟机名称                                  //编辑虚拟机的配置文件
[root@localhost ~]# virsh domrename 原名字 要更改的名字 
#  比如:([root@localhost~]# virsh domrename test01 test03)    更改虚拟机名称
[root@localhost qemu]# virsh dominfo test02                           //查看虚拟机的详细信息
[root@localhost ~]# virsh autostart test02                               //设置虚拟机为开机自启
[root@localhost ~]# virsh autostart --disable test02                //取消开机自启
[root@localhost~]# virsh vncdisplay test02                          //查看对应的VNC连接端口号;默认第一个端口号为:5900(用“:0”表示)
[root@localhost ~]# virsh suspend test02                             //挂起虚拟机
[root@localhost ~]# virsh resume test02                               //取消挂起虚拟机
[root@localhost ~]# virsh console test02                              //console方式登陆虚拟机
[root@localhost ~]# qemu-img info /kvm/disk/test01.raw      //查看虚拟机的磁盘信息
[root@localhost disk]# qemu-img create test.raw 2G           //创建虚拟机使用的磁盘
[root@localhost disk]# qemu-img create -f qcow2 123.qcow2 2G      //创建qcow2格式的虚拟机磁盘
[root@localhost disk]# qemu-img convert -f raw -O qcow2 test.raw test.qcow2   //将test.raw磁盘格式raw转换为qcow2
[root@localhost qemu]# virsh snapshot-create test02        //创建虚拟机快照
[root@localhost disk]# virsh snapshot-list test02               //查看虚拟机快照
[root@localhost disk]# virsh snapshot-revert test02 1570692304     //恢复快照
[root@localhost disk]# virsh snapshot-delete test02 1570692304     //恢复快照
[root@localhost disk]# virt-clone --auto-clone -o test01  -n 指定要克隆的名字(可选)        //自动克隆虚拟机
[root@localhost disk]# virt-clone -o test01 -n test04 -f /kvm/disk/test04.qcow2    //手动克隆
#上述都是属于完整克隆。
[root@localhost disk]# qemu-img create -f qcow2 -b test01.qcow2 lktest01.qcow2
// -f:指定要克隆为的磁盘格式;
//-b:指定要转换的源文件及目标文件
//上述命令是在克隆虚拟机的磁盘文件
[root@localhost ~]# virsh -h 
//查看命令帮助
[root@localhost ~]# ls /etc/libvirt/qemu 
//查看KVM的配置文件存放目录
networks  test01.xml
(test01.xml是虚拟机系统实例的配置文件)
[root@localhost ~]# virsh list --all               #查看虚拟机状态
 Id    名称                         状态
----------------------------------------------------
 2     test01                         running

[root@localhost ~]# virsh shutdown test01              
//关闭虚拟机
[root@localhost ~]# virsh start test01     
//开启虚拟机
[root@localhost ~]# virsh destroy test01
//强制关机
[root@localhost ~]# virsh create /etc/libvirt/qemu/test01.xml             
//通过配置文件启动虚拟机
[root@localhost ~]# virsh suspend test01                 
//挂起虚拟机
[root@localhost ~]# virsh resume test01                  
//从挂起状态恢复运行虚拟机
[root@localhost ~]# virsh autostart test01                 
//设置虚拟机伴随宿主机自动启动
虚拟机的删除与添加:

[root@localhost ~]# virsh dumpxml test01 > /etc/libvirt/qemu/test02.xml            
//导出虚拟机配置
[root@localhost ~]# virsh  shutdown test01   
[root@localhost ~]# virsh  undefine test01
//删除虚拟机
[root@localhost ~]# virsh list --all
//查看虚拟机是否被删除
 Id    名称                         状态
----------------------------------------------------

//通过备份的配置文件重新定义虚拟机:
[root@localhost ~]# cd /etc/libvirt/qemu/
[root@localhost qemu]# mv test02.xml test01.xml 
[root@localhost qemu]# virsh define test01.xml

 [root@localhost qemu]# vim /etc/libvirt/qemu/test01.xml 
 //修改虚拟机配置(内存大小等)信息:
[root@localhost qemu]# virt-df -h test01         
//在宿主机上查看虚拟机磁盘信息
克隆虚拟机:

[root@localhost qemu]# virt-clone -o test01 -n test02 -f /kvm/store/test02.qcow2
#将test01克隆为test02
[root@localhost qemu]# virsh list --all                 #查看现有虚拟机
 Id    名称                         状态
----------------------------------------------------
 -     test01                         关闭
 -     test02                         关闭
虚拟机创建快照:
(KVM虚拟机要使用快照功能,磁盘格式必须为qcow2)
virt-top查看kvm虚拟机占用资源概况
[root@localhost qemu]# virsh snapshot-create test01      
//对虚拟机test01创建快照
[root@localhost qemu]# virsh snapshot-list test01
//查看快照信息
 名称               生成时间              状态
------------------------------------------------------------
 1560191837           2019-06-11 02:37:17 +0800 shutoff
[root@localhost qemu]# virsh snapshot-revert test01 1560191837
//恢复虚拟机状态至1560191837
[root@localhost qemu]# virsh snapshot-delete test01 1560191837                   
//删除快照
物理宿主机上安装virt-top
[root@localhost ~]# yum -y install virt-top
[root@localhost ~]# virt-top

在这里插入图片描述