On Mon, Mar 23, 2015 at 04:34:21PM +0200, NoxDaFox wrote: > Greetings, > > I have the following typical scenario: given one or more qcow2 base images > I clone them with COW and start the VMs. > > At a certain point I'd like to inspect them in order to see their evolution > compared to the known base images. To do so I was thinking about taking a > disk snapshot of each VM and inspect its content through libguestfs (using > it's Python bindings). > > Obviously I need the base image in order for libguestfs to correctly guess > the OS, the FS structure etc.. Problem is that that point when I inspect > the disk I get the whole disk state including the base image content (30K+ > files and directories). > > This is not an issue but it's a very heavy operation considering that some > of the snapshots are few megabytes while the base images are several > gigabytes. > > Is there a way to programmatically instruct libguestfs to limit the > inspection to the sole snapshot? > Would it work as well with other disk format (vmdk linked clones for > example)? > > For better comprehension I'll show the sequence I'm doing (I might do it > wrong of course): > > virsh -c "qemu:///system" snapshot-create --disk-only <domain-ID> > > I get the snapshot location from its XML description and then: > > qemu-img convert -f qcow2 -O qcow2 base_image.qcow2 snapshot.qcow2
This makes a copy of the whole disk image. It's also not a consistent (point in time) copy. > At that point I mount it through libguestfs and inspect its content. As long as you use the 'readonly=1' flag (which is really *essential*, else you'll get disk corruption), you can just point libguestfs at the base image: g = guestfs.GuestFS (python_return_dict=True) g.add_drive_opts ("base_image.qcow2", format="qcow2", readonly=1) That also doesn't get you a consistent snapshot, but it'll work most of the time, and give you a clear error in libguestfs when it doesn't (and won't corrupt your base disk or anything like that, provided you're using readonly=1). The effect of the readonly=1 flag is to create an external snapshot. It is roughly the equivalent of doing: qemu-img create -f qcow2 -b base_image snapshot.qcow2 < point libguestfs at snapshot.qcow2 > If you want lightweight, consistent, point-in-time snapshots (which it sounds like you do), qemu has recently been adding this capability. See the 'drive-backup' monitor command. I've not tried using that and I don't know if it is wired up through libvirt, but libguestfs should be able to consume it since it's just an NBD source. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-top is 'top' for virtual machines. Tiny program with many powerful monitoring features, net stats, disk stats, logging, etc. http://people.redhat.com/~rjones/virt-top _______________________________________________ Libguestfs mailing list Libguestfs@redhat.com https://www.redhat.com/mailman/listinfo/libguestfs