On Wed, Feb 23, 2022 at 02:33:04PM +0100, Peter Krempa wrote:
On Wed, Feb 23, 2022 at 14:17:40 +0100, Kashyap Chamarthy wrote:
> On Tue, Feb 22, 2022 at 05:55:38PM +0100, Peter Krempa wrote:
[...]
> Now to construct a reproducer with `virsh`. Peter, tell me
what I got
> wrong :-)
>
> (1) Let's start with this image chain (overlays are always of qcow2
> format):
>
> base.raw <-- overlay1 <-- overlay2 (live QEMU).
>
> With the goal of copying the above into the below chain (note, here
> we're flattening both base.raw and overlay1 into a single file,
> "flat-o-b1")
>
> flat-o-b1.raw <-- copy (live QEMU)
>
> (2) Make a *raw* variant of "base <-- overlay1", call it
"flat-b-o1.raw"
> (i.e. flattened version of combined base and overlay1):
>
> $ qemu-img convert -f qcow2 -O raw overlay1.qcow2 \
> flat-b-o1.raw
>
> (3) Then, create an empty QCOW2 file to create "flat-b-o1 <-- copy
(empty)":
>
> $ qemu-img create -f qcow2 \
> -o backing_file=flat-b-o1.raw,backing_fmt=raw copy.qcow2
>
> (4) *Then* perform the `blockcopy --reuse-external --shallow`:
>
> $ virsh blockcopy \
> --domain vm1 vda ./copy.qcow2 \
> --wait --verbose --reuse-external --shallow \
> --finish
If you are working on a persistent domain/vm use --transient-job to
avoid the need to undefine it.
Yeah, makes sense.
Also note that '--finish' is equivalent to aborting the job
after it
reaches synchronized phase ...
Damn, I thought I _removed_ finish, but still forgot it despite making a
mental note. Thanks for catching htat.
> (5) And then pivot the job, so that live QEMU now points to
copy
>
> $ virsh blockjob --pivot
... so this will actually say that there is no blockjob, because the
previous step actually cancelled it.
Yeah, indeed.
>
> And the final result, we get the "goal" chain in step (1).
>
> src: base <-- overlay1 <-- overlay2
> == ==
> dst: flat-o-b1 <-- copy (live QEMU)
>
>
> Am I missing anything else?
Now the bug is that when you _cancel_ the job we attempt to blockdev-del
some images which were not blockdev-added, and thus create some spurious
log entries, but the rest of the code behaves correctly.
Yep, understood.
So you'll only see the failure this is fixing in the logs.
Noted. Thanks for the review.
--
/kashyap