云计算指通过计算机网络(多指因特网)形成的计算能力极强的系统,可存储、集合相关资源并可按需配置,向用户提供个性化服务。

云计算模式

  • IaaS
  • PaaS
  • SaaS

虚拟化技术分类:

  • 全虚拟化

    虚拟化层(Hypervisor)模拟了完整的硬件环境,并将虚拟机的操作系统误导为在真实的物理硬件上运行。全虚拟化代表产品:VMware ESXi、Microsoft Hyper-V、KVM、XEN

  • 半虚拟化

    客户机 OS在虚拟机上运行,以全虚拟化为基础,新添一个能够优化客户端0S指令的API系统 ,极大地减轻了Hypervisor的工作量,快速实现底层硬件的访问。KVM、XEN等都支持半虚拟化模式。

KVM 介绍

KVM(Kernel-based Virtual Machine)是一种开源的虚拟化解决方案,它是Linux内核中的一个模块,为虚拟化提供了硬件辅助支持。 KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案。 KVM结合了全虚拟化和半虚拟化的技术,可以在虚拟机中同时运行未修改的操作系统,并提供接近本地硬件性能的虚拟化体验。 KVM 本身不执行任何硬件模拟,需要通过QEMU这个用户空间程序来实现。

KVM的工作原理如下:

  1. KVM模块加载:KVM作为Linux内核的一个模块(RHEL6开始),需要在主机的Linux内核中加载。
  2. 虚拟机创建:通过用户空间工具(如QEMU)创建和管理虚拟机。用户空间工具与KVM模块进行交互,向KVM发送虚拟机的配置和管理请求。
  3. 硬件辅助虚拟化:KVM利用处理器的硬件虚拟化扩展(如Intel的VT-x和AMD的AMD-V)来提供硬件辅助的虚拟化支持。 这些扩展允许KVM模块在虚拟机和物理硬件之间建立直接的通信通道,提高了虚拟化性能和效率。
  4. 虚拟机运行:在虚拟机中运行未修改的操作系统。KVM模块模拟了完整的硬件环境,并将虚拟机的操作系统误导为在真实的物理硬件上运行。

KVM的特点:

  • 开源:KVM是开源的,可以免费使用,并且有一个活跃的开发和社区支持。
  • 高性能:通过利用处理器的硬件虚拟化扩展,KVM可以提供接近本地硬件性能的虚拟化体验。
  • 多操作系统支持:KVM可以运行多种操作系统,包括Linux、Windows和其他主流操作系统。
  • 安全性:KVM提供了严格的虚拟机隔离,虚拟机之间相互隔离,并且与宿主机有良好的安全隔离。
  • 可扩展性:KVM支持在单个主机上同时运行多个虚拟机,提供了良好的可扩展性和资源利用率。

KVM 安装

查看CPU是否支持虚拟化:

Linux 发行版本必须在64bit环境中才能使用KVM。

1
2
3
4
[root@kvm ~]# egrep "svm|vmx" /proc/cpuinfo
# 如果输出的结果包含 vmx,它是 Intel处理器虚拟机技术标志;
# 如果包含 svm,它是AMD处理器虚拟机技术标志;
# 如果你甚么都得不到,那说明你的CPU不支持虚拟化,不能使用kvm。

安装软件:

1
[root@kvm ~]# yum groupinstall  "Virtualization Client" "Virtualization Platform" "Virtualization Tools" -y 

跟虚拟机相关的目录:

1
2
3
4
5
/etc/libvirt/qemu/                            # 虚拟机配置文件存放位置
/var/lib/libvirt/images/                      # 虚拟磁盘文件存放位置(默认存储池)  容量要求大
/etc/libvirt/qemu/networks/                   # 虚拟网络配置文件存放位置

/etc/libvirt/storage                          # 存储池配置文件存放位置

启动服务:

1
[root@kvm ~]# systemctl start libvirtd

安装虚拟机

  1. 图形安装

  2. 命令安装

    1. 适合于宿主机有桌面的情况,在本机安装

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      
      [root@kvm ~]# virt-install  --name mini \
                                  --memory 1024 \
                                  --vcpus 1 \
                                  --cdrom /iso/CentOS-7.3-x86_64-DVD-1611.iso \
                                  --disk /var/lib/libvirt/images/mini.qcow2,size=10,format=qcow2,bus=scsi \
                                  --network network=default
      
      #        --name          虚拟机名称
      #        --memory        分配内存大小,MB
      #        --vcpus         配置虚拟机cpu数目,注意不能超过物理cpu数目
      #        --cdrom         指定安装方式为光盘镜像          --pxe  安装方式为pxe(自动安装)
      #        --disk          指定虚拟机存储卷
      #        --network       指定网络,如:
      #                                  --network bridge=br0             桥接方式
      #                                  --network network=default        NAT方式, 将虚拟机连接到default网络
      

      以下均为文本安装,适合宿主机没有桌面的情况

    2. 使用console安装 - 文本方式,适用于宿主机没有桌面的情况

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      
      [root@kvm ~]# virt-install --name test2 \
                                 --memory 2048 \
                                 --vcpus 2 \
                                 --location /iso/CentOS-7.9-x86_64-DVD-2009.iso \
                                 -x "console=ttyS0" \
                                 --disk /var/lib/libvirt/images/test2.qcow2,size=10 \
                                 --graphics none      # 不要图形
      
      #       --location   指定安装源,可以是本地iso文件,也可以是一个网络地址(挂载有镜像的目录)
      #       -x           传递给 --location 的参数
      
    3. 使用远程镜像安装 - 文本安装,手动配置安装选项,比较烦琐

      1
      2
      3
      4
      5
      6
      7
      
      [root@kvm ~]# virt-install --name test2 \
                                 --memory 2048 \
                                 --vcpus 2 \
                                 --location ftp://192.168.10.100/cdrom/ \
                                 -x "console=ttyS0" \
                                 --disk /var/lib/libvirt/images/test2.qcow2,size=10 \
                                 --graphics none
      
    4. 使用远程镜像自动安装(提前制作好ks.cfg文件)

      1
      2
      3
      4
      5
      6
      
      [root@kvm ~]# virt-install  -n test  \
                                  --memory 1500  \
                                  -l ftp://192.168.10.100/cdrom  \
                                  -x "ks=ftp://192.168.10.100/ks.cfg console=ttyS0"  \
                                  --disk /var/lib/libvirt/images/test.qcow2,size=10,format=qcow2 \
                                  --graphics none
      

网络

KVM虚拟机网络配置的两种方式:NAT方式和Bridge方式。

  • NAT - NAT网络: 让虚拟机访问主机、互联网或本地网络上的资源的简单方法,但是不能从网络或其他的客户机访问客户机。
  • Bridge - 虚拟网桥(Virtual Bridge): 这种方式要比用户网络复杂一些,但是设置好后客户机与互联网,客户机与主机之间的通信都很容易。

NAT 网络

NAT模式是kvm安装后的默认方式

它支持主机与虚拟机的互访,同时也支持虚拟机访问互联网,但不支持外界访问虚拟机。

未命名

查看 NAT 网络配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
❯ virsh net-dumpxml default
<network connections='1'>
  <name>default</name>
  <uuid>599ddbe0-8545-4d0f-8908-84d54b85befd</uuid>
  <forward mode='nat'>
    <nat>
      <port start='1024' end='65535'/>
    </nat>
  </forward>
  <bridge name='virbr0' stp='on' delay='0'/>
  <mac address='52:54:00:bb:44:c7'/>
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254'/>
    </dhcp>
  </ip>
</network>

Bridge 网络

未命名

Bridge方式即虚拟网桥的网络连接方式,是客户机和子网里面的机器能够互相通信。可以使虚拟机成为网络中具有独立IP的主机。

管理虚拟机

虚拟机的组成部分

1
2
❯ ls /etc/libvirt/qemu
networks  test2.xml

虚拟磁盘文件

1
2
❯ ls /var/lib/libvirt/images
test2.qcow2

🙈 virsh常用命令

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    list [--all]                 # 列出正在运行的虚拟机  --all列出所有虚拟机
    start <domain>               # 启动虚拟机
    shutdown <domain>            # 关闭虚拟机,需要安装acpid
    destroy <domain>             # 强制关闭虚拟机
    reboot <domain>              # 重启虚拟机
    dominfo <domain>             # 查看虚拟机信息
    domblklist <domain>          # 查看虚拟机块设备信息
    edit  <domain>               # 编辑虚拟机配置
    dumpxml <domain>             # 查看虚拟机配置文件
    define  <dom.xml>            # 从配置文件定义(创建)虚拟机
    undefine <domain>            # 取消定义(删除)虚拟机
    suspend  <domain>            # 暂停虚拟机
    resume  <domain>             # 继续虚拟机

    net-list --all               # 列出所有虚拟网络
    net-edit  <net-name>         # 编辑虚拟网络
    net-dumpxml <net-name>       # 查看虚拟网络配置文件
    net-destroy <net-name>       # 停止虚拟网络
    net-start <net-name>         # 启用虚拟网络
    net-define <net.xml>         # 从配置文件创建虚拟网络
    net-undefine <net-name>      # 删除虚拟网络

    snapshot-list <domain>                           # 列出虚拟机快照
    snapshot-create-as <domain> <snapshot-name>      # 创建快照
    snapshot-delete <domain> <snapshot-name>         # 删除快照
    snapshot-revert <domain> <snapshot-name>         # 从快照恢复虚拟机
    
    vol-list  <pool>                      # 列出存储池中的存储卷
    vol-create-as  <pool> <vol-name> <capacity>  [--format fmt]   # 创建存储卷
    vol-delete <vol>                      # 删除存储卷

连接虚拟机

  1. 通过 console 连接,这里分几种情况

    情况 1、如果在安装时有配置 console(-x “console=ttyS0”),可通过console连接虚拟机

    1
    2
    3
    4
    5
    6
    
    ❯ virsh console test2
    Connected to domain 'test2'
    Escape character is ^] (Ctrl + ])
    
    [root@localhost ~]# uname
    Linux
    

    情况 2、如果安装时没有配置console,也可以手动配置:

    如果能够进入虚拟机,在虚拟机的grub文件中配置console, 添加一个内核参数 console=ttyS0

    1
    2
    
    [root@kvm ~]# vim /boot/grub2/grub.cfg   
    linux16 /vmlinuz-3.10.0-514.el7.x86_64 root=/dev/mapper/cl-root ro rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet LANG=en_US.UTF-8  console=ttyS0
    

    如果不能进入到虚拟机,可以直接修改虚拟磁盘文件

    1. 安装工具

      1
      
      [root@kvm ~]# yum -y install libguestfs-tools
      
    2. 查看虚拟机磁盘文件

      1
      2
      3
      4
      5
      
      ❯ virsh domblklist test2
       目标   源
      ---------------------------------------------
       vda    /var/lib/libvirt/images/test2.qcow2
       sda    -
      
    3. 修改虚拟机磁盘文件中的grub.cfg, 在对应的内核参数后面加上console=ttyS0

      1
      2
      
      [root@kvm ~]# virt-edit  /var/lib/libvirt/images/test2.qcow2  /boot/grub2/grub.cfg
      linux16 /vmlinuz-3.10.0-514.el7.x86_64 root=/dev/mapper/cl-root ro rd.lvm.lv=cl/root rd.lvm.lv=cl/swap rhgb quiet LANG=en_US.UTF-8 console=ttyS0
      
    4. 修改完成后重新启动虚拟机,就可以console连接了

  2. 通过ssh连接

    1. 直接修改客户机的磁盘文件配置好网卡配置文件,再启动客户机,就可以通过ssh连接虚拟机了
    2. console 连上客户机,配置好 IP

添加、修改硬件

  1. 冷添加修改

    修改配置文件,下一次开机生效

    virsh edit test2

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    
    <domain type='kvm' id='4'>
      <name>mini</name>
      <uuid>9f4e4fc1-65db-493c-94a6-1cff42799716</uuid>
      <!-- 内存信息 -->
      <memory unit='KiB'>4048896</memory>
      <currentMemory unit='KiB'>2097152</currentMemory>
    
      <!-- CPU信息 -->
      <vcpu placement='auto' current='1'>4</vcpu>
    ...
    
      <devices>
        <emulator>/usr/libexec/qemu-kvm</emulator>
      <!-- 磁盘信息 -->
        <disk type='file' device='disk'>
          <driver name='qemu' type='qcow2'/>
          <source file='/var/lib/libvirt/images/mini.qcow2'/>
          <backingStore/>
          <target dev='hda' bus='ide'/>
          <alias name='ide0-0-0'/>
          <address type='drive' controller='0' bus='0' target='0' unit='0'/>
        </disk>
    
        <disk type='file' device='cdrom'>  # 光驱
          <driver name='qemu'/>
          <target dev='hdb' bus='ide'/>
          <readonly/>
          <alias name='ide0-0-1'/>
          <address type='drive' controller='0' bus='0' target='0' unit='1'/>
        </disk>
    ...
    
      <!-- 网卡信息 -->
        <interface type='network'>
          <mac address='52:54:00:47:c1:6a'/>
          <source network='default' bridge='virbr0'/>
          <target dev='vnet1'/>
          <model type='virtio'/>
          <alias name='net1'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
        </interface>
    ...
      </devices>
    ...
    </domain>
    
  2. 热添加硬盘、网卡,热移除设备

    热添加磁盘

    语法:attach-device <domain> <file> [--persistent] [--config] [--live] [--current]

    1. 新创建一块磁盘

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      
      cd /var/lib/libvirt/images
      ❯ ls
      test2.qcow2
      ❯ qemu-img create -f qcow2 test2-1.qcow2 2G
      Formatting 'test2-1.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=2147483648 lazy_refcounts=off refcount_bits=16
      ❯ ls
      test2-1.qcow2  test2.qcow2
      ❯ qemu-img info test2-1.qcow2
      image: test2-1.qcow2
      file format: qcow2
      virtual size: 2 GiB (2147483648 bytes)
      disk size: 196 KiB
      cluster_size: 65536
      Format specific information:
          compat: 1.1
          compression type: zlib
          lazy refcounts: false
          refcount bits: 16
          corrupt: false
          extended l2: false
      
    2. 编写配置文件

      1
      2
      3
      4
      5
      6
      
      ❯ vim /tmp/add_disk.xml
      <disk type='file' device='disk'>
            <driver name='qemu' type='qcow2'/>
            <source file='/var/lib/libvirt/images/test2-1.qcow2'/>
            <target dev='vdb' bus='virtio'/>
      </disk>
      
    3. 热添加磁盘

      1
      2
      
      ❯ virsh attach-device test2 /tmp/add_disk.xml --persistent
      成功附加设备
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      
      [root@localhost ~]# lsblk
      NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
      sr0              11:0    1 1024M  0 rom
      vda             252:0    0    5G  0 disk
      ├─vda1          252:1    0    1G  0 part /boot
      └─vda2          252:2    0    4G  0 part
        ├─centos-root 253:0    0  3.5G  0 lvm  /
        └─centos-swap 253:1    0  512M  0 lvm  [SWAP]
      vdb             252:16   0    2G  0 disk
      

    热移除设备

    磁盘:detach-disk <domain> <target> [--persistent] # target: 磁盘名称, 如 sdc, vdb等,移除前一定要卸载所挂载的磁盘

    1
    2
    
    ❯ virsh detach-disk test2 vdb --persistent
    成功分离磁盘
    

    网卡:detach-interface <domain> <type> <--mac mac> [--persistent] # type: network 或 bridge

    关于网卡信息的查看

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    ❯ virsh domiflist test2
     接口    类型      源        型号     MAC
    ---------------------------------------------------------
     vnet1   network   default   virtio   52:54:00:80:4b:b3
    
    ❯ virsh domifaddr test2
     名称     MAC 地址           Protocol     Address
    -------------------------------------------------------------------------------
     vnet1      52:54:00:80:4b:b3    ipv4         192.168.122.230/24
    

    热添加网卡

    1. 编写配置文件

       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      
      [root@kvm ~]# vim /tmp/add_if.xml
      
      <!-- NAT连接的配置 -->
      <interface type='network'>
        <source network='default' bridge='virbr0'/>
        <model type='virtio'/>
      </interface>
      
      <!-- 以下是桥接的配置 -->
      <!--
      <interface type='bridge'>
        <source bridge='br0'/>
        <model type='rtl8139'/>
      </interface>
      -->
      
      <!-- 关于网卡 type
      网卡 type                网卡名称
      virtio                  eth0,eth1,...
      e1000                   ens10...
      rtl8139                 ens10...
      -->
      
    2. 热添加网卡

      1
      
      [root@kvm ~]# virsh attach-device mini /tmp/add_if.xml --persistent
      
  3. 热添加 CPU

    只支持热添加,不支持热删除

    个数不能超过在xml文件里面设置的最大个数, 最大个数不能超过物理CPU个数

    热添加的条件:当前CPU数量小于配置的最大CPU数量

    1. 查看虚拟机配置,是否支持热添加CPU

      1
      2
      3
      
      <!-- 配置CPU数目 -->
      <!-- current中的数量为当前cpu数量, 后面的4是最大cpu数量 -->
      <vcpu placement='auto' current="1">4</vcpu>
      
    2. 热添加 cpu:

      1
      2
      3
      4
      
      语法: setvcpus <domain> <count> --live --config      
      选项: 
          --live       修改运行中的guest
          --config     将修改写入配置文件,以便下一次启动生效
      
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      
      ❯ virsh setvcpus test2 2 --live --config
      
      ❯ virsh dominfo test2
      Id:             4
      名称:       test2
      UUID:           bf9ba17d-2d93-4bd7-85ad-1a33ac59021f
      OS 类型:    hvm
      状态:       running
      CPU:          2
      CPU 时间:   69.2s
      最大内存: 1048576 KiB
      使用的内存: 1048576 KiB
      持久:       是
      自动启动: 禁用
      管理的保存: 否
      安全性模式: none
      安全性 DOI: 0
      
  4. 热添加内存

    内存支持热添加/减少

    热添加内存的条件:当前内存小于最大内存

    1
    
    语法: setmem <domain> <size> [--config] [--live]
    

虚拟机快照

KVM快照(可在开机或关机的状态下创建)

  1. 创建快照

    1
    2
    
    ❯ virsh snapshot-create-as test2 --name test2.snap1 --description "创世状态"
    已生成域快照 test2.snap1
    
  2. 查看虚拟机已有快照

    1
    2
    3
    4
    
    ❯ virsh snapshot-list test2
     名称          生成时间                    状态
    ----------------------------------------------------
     test2.snap1   2024-07-10 22:06:20 +0800   running
    
  3. 查看指定快照信息

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    ❯ virsh snapshot-info test2 test2.snap1
    名称:       test2.snap1
    域:          test2
    当前:       是
    状态:       running
    位置:       内部
    上级:       -
    下级:       0
    降序:       0
    元数据:    是
    
  4. 查看指定快照的详细信息

    1
    
    ❯ virsh snapshot-dumpxml test2 test2.snap1
    
  5. 使用快照还原虚拟机

    1
    
    ❯ virsh snapshot-revert test2 test2.snap1
    
  6. 删除指定快照

    1
    2
    
    ❯ virsh snapshot-delete test2 test2.snap1
    已删除域快照 test2.snap1
    

虚拟机克隆

关机状态下创建

完整克隆

优点:源机和克隆机互不影响

缺点:克隆速度慢,资源占用大

  1. 关闭要克隆的虚拟机,右键点击虚拟机选择Clone

  2. 字符终端,命令克隆

    1
    
    virt-clone -o mini -n vm2 -f /var/lib/libvirt/vm2.img
    

手动克隆

  1. 将源机的虚拟磁盘文件复制一份作为克隆机的虚拟磁盘文件
  2. 将源机的配置文件复制一份并修改作为克隆机的配置文件(名称,UUID,虚拟磁盘文件,网卡的MAC地址…)
  3. 利用克隆机的配置文件定义出克隆机

⭐ 链接克隆

增量镜像(qcow2)

首先要有一个基础镜像,里面把各个虚拟机都需要的环境都配置好。

再基于这个基础镜像创建增量镜像,每个增量镜像对应一个虚拟机,虚拟机对镜像中所有的改变都记录在增量镜像里面,基础镜像始终保持不变。

优点:节省磁盘空间,快速克隆虚拟机。

例:基于mini克隆一台虚拟机nginx

  1. 查看mini的虚拟磁盘文件

    1
    2
    3
    4
    5
    
    [root@kvm ~]# virsh domblklist mini
    目标     源
    ------------------------------------------------
    hda        /var/lib/libvirt/images/mini.qcow2
    hdb        -
    
  2. 基于基础镜像创建增量镜像文件

    1
    2
    
    [root@kvm ~]# cd /var/lib/libvirt/images/
    [root@kvm images]# qemu-img create  -f qcow2   -b  mini.qcow2   nginx.qcow2
    
  3. 创建并修改配置文件

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    
    [root@kvm images]# cd /etc/libvirt/qemu/
    [root@kvm qemu]# cp mini.xml nginx.xml
    [root@kvm qemu]# vim nginx.xml
    <domain type='kvm' id='4'>
      <name>nginx</name>                                        # 修改虚拟机名称
      <uuid>9f4e4fc1-65db-493c-94a6-1cff42799716</uuid>         # 删除此行
      <memory unit='KiB'>4048896</memory>
      <currentMemory unit='KiB'>2097152</currentMemory>
      <vcpu placement='auto' current='1'>4</vcpu>
    ...
      <devices>
        <emulator>/usr/libexec/qemu-kvm</emulator>
        <disk type='file' device='disk'>
          <driver name='qemu' type='qcow2'/>
          <source file='/var/lib/libvirt/images/nginx.qcow2'/>  # 修改虚拟磁盘文件
          <backingStore/>
          <target dev='hda' bus='ide'/>
          <alias name='ide0-0-0'/>
          <address type='drive' controller='0' bus='0' target='0' unit='0'/>
        </disk>
        <disk type='file' device='cdrom'>
          <driver name='qemu'/>
          <target dev='hdb' bus='ide'/>
          <readonly/>
          <alias name='ide0-0-1'/>
          <address type='drive' controller='0' bus='0' target='0' unit='1'/>
        </disk>
    ...
        <interface type='network'>
          <mac address='52:54:00:df:47:d0'/>                     # 删除此行
          <source network='default' bridge='virbr0'/>
          <target dev='vnet0'/>
          <model type='rtl8139'/>
          <alias name='net0'/>
          <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
        </interface>
    ...
      </devices>
    ...
    </domain>
    
  4. 根据配置文件创建虚拟机

    1
    2
    
    root@kvm qemu]# virsh define nginx.xml
    定义域 nginx(从 nginx.xml)