qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 0/2] qcow2: Add two more unalignment checks


From: Max Reitz
Subject: Re: [Qemu-devel] [PATCH 0/2] qcow2: Add two more unalignment checks
Date: Mon, 19 Jan 2015 16:09:17 -0500
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.4.0

On 2015-01-19 at 16:04, Eric Blake wrote:
On 01/19/2015 01:49 PM, Max Reitz wrote:
With the series adding unalignment checks and the series reworking the
zero cluster expansion code overlapping, the unalignment checks have not
been implemented in the latter code.

This series fixes it.

There are other places which would require unalignment checks, like the
offsets of L1 tables, especially for snapshots; but because it would be
best to add these checks in the function which reads the snapshot table,
this would make images with broken snapshots completely unusable, which
is something I opted to avoid for now.

Ideally, we need to make the qcow2 repair function repair such cases,
but until that is done there is not much we can do about them.
What's the best repair?

That's what I was asking myself...

Read the data from the unaligned location, and
write a fresh copy into a new aligned allocation?

Maybe. Maybe there is no way of repairing them and the only way is asking the user whether it's fine to delete the snapshot (qemu-img check -r make_consistent_whatever_it_takes).

Also, the question remains for every unaligned data structure: L2 tables, data clusters… The refcount structures are the only ones that can be easily recovered. For data clusters, reading from the unaligned location would probably be best; for L2 tables… maybe the same, then run a consistency check on the data and if it seems off™, throw the whole L2 table away.

At any rate, I agree
that repairing unaligned locations is harder than detecting them, so
your series is fine as is.

Reviewed-by: Eric Blake <address@hidden>

Thanks!

Max



reply via email to

[Prev in Thread] Current Thread [Next in Thread]