[zz]kvm-libvirt的使用:创建虚拟机与快照

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.  * bandwidth:迁移带宽,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();  
posted @ 2012-02-10 10:06  zaleilynn  阅读(567)  评论(0编辑  收藏  举报