On 03/27/2015 09:35 AM, Richard W.M. Jones wrote:
>> What I care about is connecting libguestfs to qemu and
reading a
>> snapshot at some point in time, even though the guest is still writing
>> away to its disks. Is this possible with drive-backup (or otherwise)?
>
> Yes, that is what drive-backup does.
>
> New writes coming from the guest are held up until the old data has been
> written to the NBD target.
>
> That way you get a point-in-time snapshot while the guest continues
> running.
I understand how that can work for backups, where you want to copy
a whole disk consistently.
But libguestfs doesn't want to do a backup, nor get a copy of the
whole disk, it just wants to access a scattering of blocks (maybe a
few hundred) but at a single point in time, in as lightweight a manner
as possible.
If you KNOW what sectors you want to read, then your NBD target can
ignore writes to the sectors you don't care about (the guest is changing
data on a sector you don't care about; yeah, bandwidth was spent in
telling you that, but you don't have to spend storage on it), while
focusing on reading the sectors you do care about as fast as possible
(to minimize the time spent dealing with uninteresting writes). If you
DON'T know what sectors you want to read (because you are chasing file
system pointers and don't know a priori where those pointers will
resolve), then tracking ALL data flushed by guest writes IS the most
efficient manner for keeping your point in time accurate for the
duration of your fleecing operation. Either way, if you really are
going to read only a few hundred sectors and then close the connection,
it shouldn't matter if the drive-backup failed to send all guest sectors
modified after the point in time, so long as every sector you read is
accurate (either because the guest hasn't touched it in the meantime; or
because even though the guest touched it after the point in time, you
were given the original contents through your NBD target).
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org