• kvm


    1.    运行在用户态的Qemu-kvm通过ioctl系统调用操作/dev/kvm字符设备,创建VM和VCPU

    2.    内核KVM模块负责相关数据结构的创建即初始化,然后返回用户态

    3.    Qemu-kvm通过ioctl调用运行VCPU,即调度相应的VM运行

    4.    内核进行相关处理后,执行VMLAUNCH指令,通过VM-Entry进入Guest OS运行,Guest OS运行于非根模式下。

    5.    Guest OS执行相应的虚拟机代码,非敏感指令可直接在物理CPU上运行

    6.    当Guest OS中执行到敏感指令、发生外部中断、或Guest OS发生内部异常时,将产生VM-Exit,并将相关信息记录到VMCS结构中

    7.    VM-Exit使CPU退回到根模式下,由VMM读取VMCS结构判断VM-Exit的原因

    8.    如是IO操作或是其他外设指令,则返回到用户态Qemu-kvm(即根模式下的Ring3),由Qemu-kvm完成对相关指令的模拟。

    9.    如果不是,则由VMM自行处理

    10.  处理完成后,重新VM-entry进入到Guest OS运行。

    virt-manager

    LANG='zh_CN.UTF-8'

    yum install libguestfs-tools

    virt-cat -d domain 文件路径  #  cat文件
    virt-edit -d domain 文件路径   #编辑文件
    virt-copy-out -d domain 文件路径  #考出文件
    virt-copy-in -d domain 文件路径 #考入文件

    #############################################
    #virsh list 列出在运行的虚拟机
    #virsh start guest1 启用guest1 虚拟机
    #virsh shutdown guest1 关闭
    #virsh autostart guest1 随物理机开启自启动
    #virsh hostname  显示本节点主机名
    #virsh nodeinfo    显示节点信息
    #virsh list --all
    virsh undefine centos        删除centos虚拟机
    virsh suspend centos        暂停centos虚拟机
    vrish resume centos            恢复centos虚拟机
    virsh reboot centos            重启centos虚拟机
    virsh edit centos                编辑centos虚拟机
    virsh vncdisplay  centos        vnc显示 

    #virsh pwd

    virsh   

        shutdown <domain>  

        destroy    <domain>  强制关闭虚拟机(相当于直接拨电源)

        start   <domain>  启动虚拟机

        edit  <domain>     编辑该虚拟机的xml文件

        dommemstat <domain> 获取domain的内存状态

        suspend  <domain>      挂起一个正在运行的虚拟机,该虚拟机仍占资源;

        resume  <domain>    从挂起状态恢复一下虚拟机

        vcpuinfo <domain>    显示一些虚拟机的vcpu的信息

        vncdisplay  <domain>    显示vnc监听地址和端口

    快照相关:

        snapshot-create <domain> xmlfile   给domain创建一个snapshot,详细内容保存在xmlfile中

        snapshot-current <domain>      显示一个domain的当前的snapshot

        snapshot-list <domain>         显示一个domain的所有的snapshot

        snapshot-revert <domain> snapshot       恢复一个domian到以前的snapshot

        snapshot-delete <domain> snapshot --children   删除一个domain的snapshot

    ##################################################

    注意设置 systemctl enable libvirtd

    创建虚拟机(方法一)
      qemu-img create -f qcow2 vm1-disk1.qcow2 10G #-f 格式 这里先创建一个磁盘文件
      virt-intall
        --name=vm1
        --disk path=/vm/vm1-disk1.qcow2
        --vcpus=1 --ram=1024
        --cdrom=/iso/Centos-6.4-i376-bin-dvd1.iso
        --network network=default #缺省 net模式
        --graphics vnc,listen=0.0.0.0
        --os-type=linux
        --os-variant=rh16

    创建虚拟机(方法二)
      1、制作虚拟机镜像
        qemu-img create -f qcow2 test.qcow2 10G //格式,名字,大小
      2、下载并复制iso镜像到指定目录(在第3步中创建xml文件中指定)
      3、创建安装配置文件,demo.xml如下,可以根据自己需求更改
        
    <domain type='kvm'>
            <name>test_ubuntu</name> //虚拟机名称
            <memory>1048576</memory> //最大内存,单位k
            <currentMemory>1048576</currentMemory> //可用内存,单位k
            <vcpu>8</vcpu> //虚拟cpu个数
            <os>
              <type arch='x86_64' machine='pc'>hvm</type>
              <boot dev='cdrom'/> //光盘启动
           </os>
           <features>
             <acpi/>
             <apic/>
             <pae/>
           </features>
           <clock offset='localtime'/>
           <on_poweroff>destroy</on_poweroff>
           <on_reboot>restart</on_reboot>
           <on_crash>destroy</on_crash>
           <devices>
             <emulator>/usr/libexec/qemu-kvm</emulator>
             <disk type='file' device='disk'>
              <driver name='qemu' type='qcow2'/>
               <source file='/var/lib/libvirt/images/test.qcow2'/> //目的镜像路径
               <target dev='hda' bus='ide'/>
             </disk>
             <disk type='file' device='cdrom'>
               <source file='/var/lib/libvirt/images/ubuntu.iso'/> //光盘镜像路径
               <target dev='hdb' bus='ide'/>
             </disk>
            <interface type='bridge'> //虚拟机网络连接方式
              <source bridge='kvmbr0'/> //当前主机网桥的名称
              <mac address="00:16:3e:5d:aa:a8"/> //为虚拟机分配mac地址,务必唯一,否则dhcp获得同样ip,引起冲突
            </interface>
            <input type='mouse' bus='ps2'/>
             <graphics type='vnc' port='-1' autoport='yes' listen = '0.0.0.0' keymap='en-us'/>//vnc方式登录,端口号自动分配,自动加1,可以通过virsh vncdisplay来查询
           </devices>
         </domain>

       virsh define  demo.xml     //创建虚拟机

       virsh  start    test_ubuntu      //启动虚拟机

       virsh  vncdisplay   test_ubuntu   ////查看虚拟机的vnc端口, 然后就可以通过vnc登录来完成虚拟机的安装


    dd if=/dev/zero of=t1.img bs=1024k count=0 seek=1024 创建稀疏镜像文件 新建0kB
    dd if=/dev/zero of=t2.img bs=1024k count=1024 创建实际大小镜像文件  新建1G
    cp t2.img t2bak.img --sparse=always    将非稀疏镜像文件拷贝成稀疏镜像文件 拷贝前1G,拷贝后0kB
    cp t2bak.img t3.img --sparse=never 和上面相反。

    qemu-img resize t.qcow2 +1G    将磁盘文件扩容1G
    ################################################################
    内置快照管理:
      virsh snapshot-create-as guest1 guset1_sn1 #创建快照 分开启状态快照 和关机状态快照
      virsh snapshot-list guest1  #查看已经存在的快照
      virsh snapshot-revert --domian guest1 guest1_sn1 #使用快照guest1_sn1 恢复快照
      virsh snapshot-delete guest1 guest1_sn1  #删除快照
    ###############################################################
    网卡管理:
      virsh domiflist guest1 #查看原有网卡信息
      virsh attach-interface guest1 --type brigde --source br0 --config #永久性添加一个网卡,添加后可以使用domiflist 以及ip a查看新增的网卡。

      virsh dumpxml guest1 > /etc/libvirt/qemu/guest1.xml #将网卡修改保存到配置文件。
      virsh define /etc/libvirt /qemu/guest1.xml  
      
      virsh detach-interface guest1 --type brigde --mac **:**:**** #删除网卡 指定mac地址
    ##############################################################
    配置升级:
      virsh edit guest1   #修改虚拟机的配置文件调整
      virsh define /etc/libvirt/qemu/guest1  #重定义使得配置生效
      
      virsh setvcps guest1 4 #动态调整为4核
      virsh setmem guest1 1024000 --config --live #动态调整内存为1G
      ps 需在启动前设置最大范围
        virsh setvcpus guest1 --maximum --config
        virsh setmem guest1 10240000 --config
      
  • 相关阅读:
    php 获取文件信息相关基础函数
    php常用基础数组函数
    php数组指针相关函数
    php 常用基础数学函数
    php 基本的常用字符串函数
    php 函数返回问题
    iframe 插入内容 (转)
    [OFFICE]如何查看OFFICE是否是永久激活
    [C语言]变量的声明和定义有什么区别
    [算法]快速判断一个数是否是2的幂次方
  • 原文地址:https://www.cnblogs.com/plefan/p/13667407.html
Copyright © 2020-2023  润新知