于 2013-7-19 17:19, Kevin Wolf 写道:
Am 19.07.2013 um 11:03 hat Wenchao Xia geschrieben:
于 2013-7-18 13:43, Stefan Hajnoczi 写道:
On Wed, Jul 17, 2013 at 10:03:51PM +0800, Wenchao Xia wrote:
This series allow user to read internal snapshot's contents without qemu-img
convert. Another purpose is that, when qemu is online and have taken an
internal snapshot, let user invoke qemu-nbd to do any thing on it except write.
I agree with Eric and Kevin that we cannot access image files while QEMU
has them open.
A bit more detail about using the run-time NBD server to do this safely:
Internal snapshots are not first-class block layer objects today. They
are not BlockDriverStates, instead you must access their data through
bdrv_snapshot_goto() or bdrv_snapshot_load_tmp().
Also cc to Fam Zheng an Kevin:
I think BlockDriverStates modification, is based on a more basic
question: does qcow2's data structure on disk, allow multiple snapshot
reader, while one active writer, without lock? I think the modification
showed above, already said "yes" to this question.
What exactly do you mean by "without lock"?
I mean read of old snapshot and write on qcow2 except snapshot
operation, can happen in same time, without a mutex in qemu.
But yes, there's no fundamental problem in the format specification that
would make it impossible to write a driver that accesses multiple
snapshots at the same time from the same qemu process. (Even r/w in
theory, though we're treating snapshots as immutable traditionally.)
What about one writer process and one snapshot reader process? I think
it works if manager forbid snapshot operation in writer process. It
works with a rule: "only snapshot operation and * operation, would
change the data on disk, which is used by reading pre-existing
snapshots".
I know in principle, one process owning one image, make things
clear, but this can leverage internal snapshot as easy to use as
external ones.
Kevin
--
Best Regards
Wenchao Xia