[libvirt] server side copy from one volume to another
Michal Privoznik
mprivozn at redhat.com
Tue Apr 18 05:39:06 UTC 2017
On 04/17/2017 01:32 PM, Vasiliy Tolstov wrote:
> 2017-04-17 14:08 GMT+03:00 Michal Privoznik <mprivozn at redhat.com>:
>> Before digging into implementation of a new functionality we should
>> check if the functionality is not already there. I mean - that 'virsh
>> vol-create-from' or libvirt.virStoragePool.createXMLFrom() or
>> virStorageVolCreateXMLFrom() - they should serve exactly what you need.
>> Don't they?
>>
>> If not, then yes - we might focus on adding new API for that.
>
>
> This function now work across pools. So two volumes need to be in the
> same pool. But i need to copy across pools
>
Is that right? Here I'm successfully cloning a volume across two storage pools:
$ ipython
Python 3.4.5 (default, Mar 23 2017, 19:22:46)
Type "copyright", "credits" or "license" for more information.
IPython 3.2.1 -- An enhanced Interactive Python.
? -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help -> Python's own help system.
object? -> Details about 'object', use 'object??' for extra details.
In [1]: import libvirt
In [2]: conn=libvirt.open("qemu:///system")
In [3]: poolD=conn.storagePoolLookupByName("default")
In [4]: poolT=conn.storagePoolLookupByName("tmp")
In [5]: volF=poolD.storageVolLookupByName("fedora.qcow2")
In [6]: poolT.createXMLFrom?
Signature: poolT.createXMLFrom(xmlDesc, clonevol, flags=0)
Docstring:
Create a storage volume in the parent pool, using the
'clonevol' volume as input. Information for the new
volume (name, perms) are passed via a typical volume
XML description.
Since 1.0.1 VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA
in flags can be used to get higher performance with
qcow2 image files which don't support full preallocation,
by creating a sparse image file with metadata.
virStorageVolFree should be used to free the resources after the
storage volume object is no longer needed.
File: /usr/lib64/python3.4/site-packages/libvirt.py
Type: method
In [7]: volF.XMLDesc()
Out[7]: "<volume type='file'>\n <name>fedora.qcow2</name>\n <key>/var/lib/libvirt/images/fedora.qcow2</key>\n <source>\n </source>\n <capacity unit='bytes'>21474836480</capacity>\n <allocation unit='bytes'>15330648064</allocation>\n <physical unit='bytes'>15330770944</physical>\n <target>\n <path>/var/lib/libvirt/images/fedora.qcow2</path>\n <format type='qcow2'/>\n <permissions>\n <mode>0644</mode>\n <owner>0</owner>\n <group>0</group>\n </permissions>\n <timestamps>\n <atime>1492104221.232529688</atime>\n <mtime>1491985789.153734999</mtime>\n <ctime>1492104221.232529688</ctime>\n </timestamps>\n <compat>1.1</compat>\n <features/>\n </target>\n</volume>\n"
In [8]: poolT.createXMLFrom(volF.XMLDesc(), volF, 0)
Out[8]: <libvirt.virStorageVol at 0x7fa9fa279ac8>
Michal
More information about the libvir-list
mailing list