I could not figure out exactly what vol-download or vol-upload do or how they work. But I did
discover that vol-create-from does work across pools.  It does requires one to create an XML
def for the volume which I had never done.  It appears at least one does not have to a give a
complete definition (I did not specify key or extents for example) or even correct (I specificed
qcow2 format but it still made a raw format volume on the LV).  SO essentially I did

  virsh vol-dumpxml surfer-2.img vmback > surfer.xml

Edit surfer.xml to have no key, change name, have LV path, etc.

  virsh vol-create-from vmpool1 surfer.xml surfer-2.img --inputpool vmback

I then fired up virt-manager and edited the domain definition to delete the old disk and add
the new volume as its new disk.  Then booted it in single user mode so I could fix the
mac address in the ifcfg-eth0 and udev/rules.d/70-persistant-net.rules files.

On Wed, Nov 7, 2012 at 5:18 PM, Paul Raines <paul.raines@gmail.com> wrote:
Can you show me how one would use vol-download and vol-upload to do this?
I cannot figure it out from the docs.  What I have in the old directory based storage pool is:

virsh # pool-info vmback
Name:           vmback
UUID:           7a8ab88b-42a9-f4c9-128e-83adea324b9a
State:          running
Persistent:     yes
Autostart:      yes
Capacity:       885.88 GB
Allocation:     65.57 GB
Available:      820.31 GB

virsh # vol-list vmback
Name                 Path
-----------------------------------------
lost+found           /vmback/lost+found
pool.xml             /vmback/pool.xml
ruby.img             /vmback/ruby.img
surfer-1.img         /vmback/surfer-1.img
webtemplate.img      /vmback/webtemplate.img

The new one (LVM) is:

virsh # pool-info vmpool1
Name:           vmpool1
UUID:           a95f6f30-b035-7750-6b7d-77953ee7d9af
State:          running
Persistent:     yes
Autostart:      yes
Capacity:       1.76 TB
Allocation:     0.00
Available:      1.76 TB

And I want to move the ruby domain (single disk file ruby.img) to it.


On Wed, Nov 7, 2012 at 4:37 PM, Eric Blake <eblake@redhat.com> wrote:
On 11/07/2012 02:13 PM, Paul Raines wrote:
>
> I created a new LVM type storage pool on my server and would like to
> move my VM disk volumes in a directory-based pool into this new pool.
> But I cannot figure out how that is done.  I find plenty of information
> on how to migrate live VM images from one host to another, but not on
> how to just move one live from one storage pool to another on the same
> host.
>
> If it cannot be done live, how an I do it non-live?  I guess non-live I
> could clone, but that would change the MAC address.  Just seems that if
> libvirt
> can migrate live it should be able to move a VM between storage pools
> on the same host even easier.

Hmm - you have a good point - right now, 'virsh vol-create-from' and
'virsh vol-clone' only allow motion within a single pool, and not from
one pool to another.  I guess you could use 'virsh vol-download' and
'virsh vol-upload' to move volumes from one place to another, although
those APIs still lack the ability to cleanly state whether you are
migrating metadata (what the host sees) or contents for conversion into
a different format (what the guest sees).  At any rate, these commands
would be useful on offline disks (and NOT for a disk image in active
read-write use by any qemu guest).  I think there's a lot of work that
could be done to improve matters with how we manage volumes and pools.

Meanwhile, live storage migration IS possible, with libvirt 1.0.0 (now
out) and qemu 1.3 (which will be released in December, or if you are
comfortable building from qemu.git now), via the 'virsh blockcopy' command.