2013-03-16 3 views
2

Я пытаюсь создать снимок активного/простоя виртуальной машины на KVM гипервизор, используя следующий код:Как создать моментальный снимок виртуальной машины с помощью libvirt?

Похоже xmlDesc оленья кожа достаточно информации, чтобы создать снимок ни хода, ни простоя виртуальной машины или может быть что-то другой ?

Должен ли я изменить дамп xml перед тем, как перейти к методу? или какой-то отдельный целевой файл img необходим для моментального снимка?

Кто-нибудь знает, как решить проблему?

package org.vmclient; 

import org.libvirt.Connect; 
import org.libvirt.Domain; 
import org.libvirt.DomainInfo; 
import org.libvirt.DomainSnapshot; 
import org.libvirt.LibvirtException; 

public class Test { 

public static void main(String[] args) { 

    // create and initialize variables 
    Connect connect = null; 
    Domain domain = null; 
    int numberOfSnaps; 
    DomainSnapshot domainSnapshot; 

    /* 
    * do NOT change! Create a connection 
    */ 
    try { 
     connect = new Connect("qemu:///system"); 
    } catch (LibvirtException e) { 
     System.out.println("exception caught:" + e); 
     System.out.println(e.getError()); 
    } 

    /* 
    * Perform an activity 
    */ 
    try { 
     //create a snapshot 
     domain = connect.domainLookupByName("Ubuntu"); 
     /* 
     DomainInfo di = new DomainInfo(); 
     di = domain.getInfo(); 
     System.out.println(di); 
     */ 
     numberOfSnaps = domain.snapshotNum(); 
     System.out.println(numberOfSnaps); 

     //1. get xmlDesc of current machine 
     String xmlDesc = domain.getXMLDesc(0); 
     //2. check if xmlDesc isnt empty 
     System.out.println(xmlDesc); 

     //3. pass xmlDesc to create a snapshot of the machine 
     //try { 
      domainSnapshot = domain.snapshotCreateXML(xmlDesc); 
     //}catch(LibvirtException e){ 
      //System.out.println(e.getMessage()); 

     //} 
     System.out.println("working ??"); 
     //4. check if snap was created 

     numberOfSnaps = domain.snapshotNum(); 
     System.out.println(numberOfSnaps); 

    } catch (LibvirtException e) { 
     System.out.println("exception caught:" + e); 
     System.out.println(e.getError()); 
    } 
}//end main 
}//end Test.java 

сообщение об ошибке:

libvir: Domain Snapshot error : XML error: domainsnapshot 
exception caught:org.libvirt.LibvirtException: XML error: domainsnapshot 
level:VIR_ERR_ERROR 
code:VIR_ERR_XML_ERROR 
domain:VIR_FROM_DOMAIN_SNAPSHOT 
hasConn:false 
hasDom:false 
hasNet:false 
message:XML error: domainsnapshot 
str1:XML error: %s 
str2:domainsnapshot 
str3:null 
int1:-1 
int2:-1 

ответ

1

XML файл неправильно, getXMLDesc (INT флаги) Содержит описание XML-домена.

вы должны создать моментальный снимок xml самостоятельно, а не генерировать автоматически.

+0

, что не имеет никакого смысла –

+0

да, это делает. вот как работает libvirt. – cd1

1

Для создания моментального снимка вам необходимо передать XML, описанный в этой документации: libvirt: Snapshot XML format. Корневой тег равен domainsnapshot, а затем определите не менее name и description.

0

вы должны передать XML-код моментального снимка функции snapshotCreateXML, а не XML-код домена.

попробуйте следующее:

snapshotXML = "<domainsnapshot><name>my-snapshot</name></domainsnapshot>"; 
domainSnapshot = domain.snapshotCreateXML(snapshotXML); 
Смежные вопросы