• [zz]kvmlibvirt的使用:创建虚拟机与快照


    1.创建域(虚拟机):包括Volume和描述硬件配置的xml

    1. //前端与节点建立连接   
    2. Connect conn=new Connect("qemu+ssh://root@192.168.69/system",false);  
    3. //根据xml描述创建新虚拟机并启动   
    4. SAXReader reader = new SAXReader();  
    5. Document docu =<span style="white-space:pre"> </span>reader.read(new File("/domain.xml"));  
    6. String xmlDesc=docu.asXML();  
    7. Domain domain=conn.domainCreateXML(xmlDesc, 0);  
    8. domain.resume();  

    补:新建域可以直接加载镜像(.img),但这样镜像只能被一个用户使用。为可以让镜像能被多个用户使用,可使用StorageVol来关联镜像,虚拟机加载该备份即可。

    1. Connect con=new Connect("");  
    2. //根据存储池的名字获得StoragePool   
    3. StoragePool pool=con.storagePoolLookupByName("default");  
    4. SAXReader reader=new SAXReader();  
    5. Document docu=reader.read(new File("/volume.xml"));  
    6. StorageVol vol=pool.storageVolCreateXML(docu.asXML(), 0);  

    记录下vol的存储地址,赋值到域的配置文件中即可。

    删除vol

    1. StorageVol vol=pool.storageVolLookupByName(volName);  
    2. vol.delete(0);  

    补:StorageVol可以作为镜像的快照,大小很小,只记录了对镜像的修改。
    2.迁移/销毁域

    1. //前端与节点建立连接   
    2. Connect conn1=new Connect("qemu+ssh://root@192.168.82.70/system",false);  
    3. //根据域的uuid-unique id(在生成域时,libvirt自动分配唯一的uuid),返回域。   
    4. String uuid="";  
    5. Domain domain=conn1.domainLookupByUUIDString(uuid);  
    6. Connect conn2=new Connect("qemu+ssh://root@192.168.82.71/system",false);  
    7. /* 
    8.  * 把域从当前主机迁移到目的主机 
    9.  * Domain migrate(Connect dconn, long flags, String dname, String uri, long bandwidth) 
    10.  * dconn:目的主机 
    11.  * dname:可选,重命名域在目的机的名字 
    12.  * uri:可选,目的机ip 
    13.  * band迁移带宽,Mbps 
    14.  */  
    15. domain.migrate(conn2, 1nullnull5);  
    16. //销毁域   
    17. domain.destroy();  

    补:域的名字、id等信息都在xml配置描述里定义。对于xml文件的操作使用dom4j。

    标准domain.xml

    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <domain type='kvm'>  
    3.   <name>test</name>  
    4.   <memory>524288</memory>  
    5.   <currentMemory>524288</currentMemory>  
    6.   <vcpu>1</vcpu>  
    7.   <os>  
    8.     <type arch='x86_64' machine='pc-0.14'>hvm</type>  
    9.     <boot dev='hd'/>  
    10.     <bootmenu enable='no'/>  
    11.   </os>  
    12.   <features>  
    13.     <acpi/>  
    14.     <apic/>  
    15.     <pae/>  
    16.   </features>  
    17.   <clock offset='localtime'/>  
    18.   <on_poweroff>destroy</on_poweroff>  
    19.   <on_reboot>restart</on_reboot>  
    20.   <on_crash>restart</on_crash>  
    21.   <devices>  
    22.     <emulator>/usr/bin/qemu-kvm</emulator>  
    23.     <disk type='file' device='disk'>  
    24.       <driver name='qemu' type='qcow2'/>  
    25.       <source file='/var/lib/libvirt/images/test.img'/><!--运行的镜像-->  
    26.       <target dev='vda' bus='virtio'/>  
    27.       <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>  
    28.     </disk>  
    29.     <interface type='network'>  
    30.       <mac address='52:54:00:19:25:7b'/>  
    31.       <source network='default'/>  
    32.       <model type='virtio'/>  
    33.       <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>  
    34.     </interface>  
    35.     <serial type='pty'>  
    36.       <target port='0'/>  
    37.     </serial>  
    38.     <console type='pty'>  
    39.       <target type='serial' port='0'/>  
    40.     </console>  
    41.     <input type='tablet' bus='usb'/>  
    42.     <input type='mouse' bus='ps2'/>  
    43.     <graphics type='vnc' port='5910' autoport='no' listen='0.0.0.0'/>  
    44.     <sound model='ac97'>  
    45.       <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>  
    46.     </sound>  
    47.     <video>  
    48.       <model type='cirrus' vram='9216' heads='1'/>  
    49.       <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>  
    50.     </video>  
    51.     <memballoon model='virtio'>  
    52.       <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>  
    53.     </memballoon>  
    54.   </devices>  
    55. </domain>  

    标准volume.xml

    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <volume>  
    3.   <name></name>   
    4.   <key>/var/lib/libvirt/images/temp.ss</key>   
    5.   <source>  
    6.   </source>  
    7.   <capacity>8589934592</capacity>   
    8.   <allocation>139264</allocation>  
    9.   <target>  
    10.     <path>/var/lib/libvirt/images/temp.ss</path> <!--新卷的地址-->  
    11.     <format type='qcow2'/>   
    12.     <permissions>  
    13.       <mode>0600</mode>  
    14.       <owner>0</owner>  
    15.       <group>0</group>  
    16.     </permissions>  
    17.   </target>  
    18.    <backingStore>  
    19.     <path>/var/lib/libvirt/images/WinXP.img</path><!--关联的镜像-->  
    20.     <format type='qcow2'/>   
    21.     <permissions>  
    22.       <mode>0600</mode>  
    23.       <owner>107</owner>  
    24.       <group>107</group>  
    25.     </permissions>  
    26.   </backingStore>  
    27. </volume>  


    补:dom4j使用示例

    1. SAXReader reader = new SAXReader();  
    2. Document docu = reader.read(new File("/domain.xml"));  
    3. //更改元素的属性值  
    4. Element graphics=docu.getRootElement().element("devices").element("graphics");  
    5. Attribute attrPort=graphics.attribute("port");  
    6. attrPort.setText(getPort());  
    7. //更改元素值  
    8. Element nameEle=docu.getRootElement().element("name");  
    9. nameEle.setText("new name");  
    10. //以字符串形式返回xml  
    11. String docXmlText=docu.asXML();  
  • 相关阅读:
    MFC中的菜单(Menu)
    MFC中获取系统无任何操作的时间
    MFC中使用快捷键Accelerator
    Git的安装和使用
    给pdf添加目录
    练习题2
    练习题1
    主键和外键
    数据库知识点
    多表查询
  • 原文地址:https://www.cnblogs.com/zhangzhang/p/2344896.html
Copyright © 2020-2023  润新知