KVM构建及管理

虚拟化概述
        Virtualization(虚拟化)
        x个物理资源 ---->  y个逻辑资源
        实现程度:完全虚拟化
                 部分虚拟化
                 硬件辅助(CPU)虚拟化

KVM

打开virt-manager客户端工具
    [root@room1pc32 桌面]# virt-manager  
手动新建一台虚拟机:  
                                虚拟机名字:example

1.查看KVM节点(服务器)信息
    virsh nodeinfo
    [root@room1pc32 桌面]# virsh nodeinfo
     CPU 型号:        x86_64
     CPU:               4
     CPU 频率:        3299 MHz
     CPU socket:        1
     每个 socket 的内核数: 2
     每个内核的线程数: 2
     NUMA 单元:       1
     内存大小:      8048744 KiB
2.列出虚拟机
    virsh list [--all]
    [root@room1pc32 桌面]# virsh list
        Id    名称                         状态
     ----------------------------------------------------
        7     example                        running

     [root@room1pc32 桌面]# virsh list --all
        Id    名称                         状态
     ----------------------------------------------------
        7     example                        running
        -     cla***oom                      关闭
        -     desktop                        关闭
        -     server                         关闭
        -     win2008                        关闭
3.列出虚拟网络
    virsh net-list [--all]
4.查看指定虚拟机的信息
    virsh dominfo 虚拟机名称
    [root@room1pc32 桌面]# virsh dominfo win2008
     Id:             -
     名称:       win2008
     UUID:           3f55c551-dddc-ec8d-b082-34d17367a403
     OS 类型:    hvm
     状态:       关闭
     CPU:          2
     最大内存: 2097152 KiB
     使用的内存: 0 KiB
     持久:       是
     自动启动: 禁用
     管理的保存: 否
     安全性模式: selinux
     安全性 DOI: 0
5.运行|重启|关闭指定的虚拟机器
    virsh start|reboot|shutdown 虚拟机名
    [root@room1pc32 桌面]# virsh start win2008
     域 win2008 已开始
    [root@room1pc32 桌面]# virsh shutdown win2008
     域 win2008 被关闭
6.强行关闭指定的虚拟机
    virsh destroy 虚拟机名称
    [root@room1pc32 桌面]# virsh destroy win2008
     域 win2008 被删除
7.将指定的虚拟机设置为开机自动运行
    virsh autostart [--disable] 虚拟机名称
    [root@room1pc32 桌面]# virsh autostart win2008
     域 win2008标记为自动开始
    [root@room1pc32 桌面]# virsh autostart --disable win2008
     域 win2008取消标记为自动开始

在Linux 中KVM 虚拟机组成

xml配置文件(虚拟机描述文件):定义虚拟机的名称,UUID,CPU,内存,虚拟磁盘,网卡等各种参数设置
    /etc/libvirt/qemu/*.xml
磁盘镜像文件:保存虚拟机的操作系统及文档数据,镜像路径取决于xml配置文件中的定义
    /var/lib/libvirt/images/
        用一个大的文件充当
    [root@room1pc32 桌面]# du -sh /var/lib/libvirt/images/    #统计文件目录大小
     51G    /var/lib/libvirt/images/
细节: 模版虚拟机example,删除Channel的设备

通过example虚拟机,生成新的虚拟机
    1.关闭example虚拟机
        [root@room1pc32 桌面]# virsh destroy example
         域 example 被删除
    2.通过example虚拟机,磁盘文件复制一份
        [root@room1pc32 桌面]# cd /var/lib/libvirt/images/
        [root@room1pc32 images]# qemu-img info example.qcow2 
         image: example.qcow2
         file format: qcow2
         virtual size: 9.0G (9663676416 bytes)
         disk size: 3.1G
         cluster_size: 65536
         Format specific information:
                 compat: 1.1
                lazy refcounts: true
        [root@room1pc32 images]# cp example.qcow2 test01.qcow2
    3.通过example虚拟机,复制虚拟机描述文件
        [root@room1pc32 images]# cd /etc/libvirt/qemu/
        [root@room1pc32 qemu]# cp example.xml test01.xml
            修改 虚拟机名称 UUID 虚拟机
         ...
            <name>test01</name>                         #9行
            <uuid>910dd9c6-567d-475b-812a-18f6bacfa104</uuid>       #10行
            <source file='/var/lib/libvirt/images/test01.qcow2'/>       #41行
            <mac address='12:54:00:11:2e:8b'/>                  #75行
         ....
        [root@room1pc32 qemu]# uuidgen  #随即生成UUID
         910dd9c6-567d-475b-812a-18f6bacfa104
    4.导入新虚拟机信息
        [root@room1pc32 qemu]# virsh define /etc/libvirt/qemu/test01.xml 
         定义域 test01(从 /etc/libvirt/qemu/test01.xml)
    5.验证
        [root@room1pc32 qemu]# virsh list --all

导出xml配置文件
    查看:virsh dumpxml 虚拟机名
    备份:virsh dumpxml 虚拟机名 > 虚拟机名.xml
对虚拟机的配置进行调整
    编辑:virsh edit 虚拟机名
导入虚拟机
    virsh define XML描述文件
删除虚拟机
    virsh undefine 虚拟机名

快速重建虚拟机

COW写时复制 copy on wirte
        – 直接映射原始盘的数据内容
        – 当原始盘的旧数据有修改时,在修改之前自动将旧数据存入前端盘
        – 对前端盘的修改不回写到原始盘
    快速创建qcow前端盘
        虚拟机的磁盘镜像文件格式 QCOW2
    qemu-img 通过 -b 选项复用指定原始盘
        -qemu-img create -f qcow2 -b 原始盘 前端盘
    1.关闭虚拟机
        [root@room1pc32 /]# virsh destroy example
    2.生成前端盘
        [root@room1pc32 /]# qemu-img create -f qcow2 -b /var/lib/libvirt/images/example.qcow2 /var/lib/libvirt/images/test02.qcow2 
         Formatting '/var/lib/libvirt/images/test02.qcow2', fmt=qcow2 size=9663676416 backing_file='/var/lib/libvirt/images/example.qcow2' encryption=off cluster_size=65536 lazy_refcounts=off 
    3.生成新的虚拟机
        [root@room1pc32 /]# virsh edit example
            编辑了域 test02 XML 配置。
    4.导入新虚拟机信息
        [root@room1pc32 /]# cd /etc/libvirt/qemu
        [root@room1pc32 qemu]# virsh define test02.xml
         定义域 test02(从 test02.xml)
    5.验证
        [root@room1pc32 qemu]# virsh list --all

通过COW写时复制原理 我写了一个实现快速生成虚拟机脚本
https://blog.51cto.com/13558754/2057094

离线访问虚拟机

使用guestmount 工具(必须关闭SELinux)
    – 支持离线挂载 raw、qcow2 格式虚拟机磁盘
    – 可以在虚拟机关机的情况下,直接修改磁盘中的文档
    – 方便对虚拟机定制、修复、脚本维护  
    用法: 
        guestmount -a 虚拟机磁盘路径 -i /挂载点
    [root@svr7 ~]# yum provides "*guestmount*"  #查看安装guestmount包
    已加载插件:langpacks, product-id, search-disabled-repos, subscription-manager
    This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
    1:libguestfs-tools-c-1.28.1-1.55.el7.x86_64 : System administration tools for
                                                                                : virtual machines
    源    :dvd
    匹配来源:
    文件名    :/usr/bin/guestmount
    文件名    :/usr/share/man/man1/guestmount.1.gz
    [root@room1pc32 ~]# yum -y install libguestfs-tools
    [root@room1pc32 桌面]# mkdir /opt/mnt
    [root@room1pc32 桌面]# guestmount -a /var/lib/libvirt/images/rh7_node1.img -i /opt/mnt/
    [root@room1pc32 桌面]# ls /opt/mnt
    bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var


转载于:https://blog.51cto.com/13558754/2057088