On Mon, Mar 09, 2020 at 10:42:25AM -0500, Eric Blake wrote:
On 3/9/20 10:31 AM, Kashyap Chamarthy wrote:
> After (with the patch series applied to QEMU Git):
>
> $> git describe
> v4.2.0-2204-gd6c7830114
>
> # Create; *without* specifying "-F raw"
> $> ~/build/qemu/qemu-img create -f qcow2 -b ./base.raw ./overlay2.qcow2
> qemu-img: warning: Deprecated use of backing file without explicit backing
format (detected format of raw)
> Formatting './overlay2.qcow2', fmt=qcow2 size=4294967296
backing_file=./base.raw backing_fmt=raw cluster_size=65536 lazy_refcounts=off
refcount_bits=16
If you'll note, this case _did_ write an implied backing_fmt=raw into the
image.
Ah, I missed to notice that. Interesting.
Constrast that with creating an image on a qcow2 backing file, which
tells you it detected a format of qcow2, but does NOT write
backing_fmt=qcow2 into the image (this was a change from v2, at Peter's
request).
Indeed, here we go, confirming the overlay of a QCOW2 backing file _not_
having the 'backing_fmt' written into the image:
$> ~/build/qemu/qemu-img create -f qcow2 -b ./another_base.qcow2
./overlay1_of_ab.qcow2
qemu-img: warning: Deprecated use of backing file without explicit backing format
(detected format of qcow2)
Formatting './overlay1_of_ab.qcow2', fmt=qcow2 size=4294967296
backing_file=./another_base.qcow2 cluster_size=65536 lazy_refcounts=off refcount_bits=16
That's neat.
(I wonder if this bit should also be documented.)
Thus, when the backing is raw, we warn but future use of the
image is now safe where it previously was not; when the backing file is
non-raw, we warn but do not change our behavior, but because the backing
file is non-raw any future probes will not be any less safe than before.
Understood. Easy to miss when not paying attention; thanks for pointing
it out.
[...]
> However, for the "Convert" case, is it correct that no
warning is thrown
> for the below?
>
> $> ~/build/qemu/qemu-img info overlay1.qcow2
> image: overlay1.qcow2
> file format: qcow2
> virtual size: 4 GiB (4294967296 bytes)
> disk size: 196 KiB
> cluster_size: 65536
> backing file: base.raw
> Format specific information:
> compat: 1.1
> lazy refcounts: false
> refcount bits: 16
> corrupt: false
We have an image with no backing format, so we had to probe. This patch
series did not change the behavior of opening an existing image, only for
creating a new image (or amending an image in-place). So the lack of a
warning on opening the unsafe image may be desirable, but it would be via
even more patches.
Fair enough; it's an understandable compromise.
And your series is a strict improvement as-is; it should not be held up.
> $> ~/build/qemu/qemu-img convert -f qcow2 -O qcow2 overlay1.qcow2
flattened.raw
Ouch - you are creating a qcow2 destination file named 'flattened.raw',
which is rather confusing on your part.
Oops, yes it is; bad me. Sorry for the mix-up. I meant to amend the
format to 'raw'.
However, as your destination file is being created without a backing
image,
it is to be expected that there is no warning (when there is no backing
file, -F makes no sense).
Yeah, fair enough.
To provoke the warning during convert, you'll
have to also pass -B (or -o backing_file), without -o backing_fmt (since
convert lacks the -F shorthand).
Hmm, I tried the following way, but it doesn't provoke the warning:
$> ~/build/qemu/qemu-img convert -B ./base.raw -O qcow2 overlay1.qcow2
flattened.qcow2
$> ~/build/qemu/qemu-img info flattened.qcow2
image: flattened.qcow2
file format: qcow2
virtual size: 4 GiB (4294967296 bytes)
disk size: 196 KiB
cluster_size: 65536
backing file: ./base.raw
Format specific information:
compat: 1.1
lazy refcounts: false
refcount bits: 16
corrupt: false
What am I missing?
- - -
<digression>
Ah, didn't realize the inconsistency of 'convert' lacking the '-F'
shorthand ... which reminds me, there are at least _three_ ways that I
know of, to specify backing file format with 'create':
$ qemu-img create -f qcow2 -o 'backing_file=./base.raw,backing_fmt=raw'
./overlay1.qcow2
$ qemu-img create -f qcow2 -b ./base.raw -o backing_fmt=raw overlay1.qcow2
$ qemu-img create -f qcow2 -b ./base.raw -F raw ./overlay1.qcow2
I'm wondering about the consistency of having all the above three
supported for other operations too. Now I at least know 'convert' lacks
the "-F".
Not sure how much people care about this :-)
</digression>
[...]
--
/kashyap