Am 07.07.2020 um 11:14 hat Daniel P. BerrangÃ© geschrieben: > On Mon, Jul 06, 2020 at 05:57:08PM +0200, Kevin Wolf wrote: > > Am 02.07.2020 um 19:57 hat Daniel P. BerrangÃÆÃÂ© geschrieben: > > > This wires up support for a new "exclude" parameter to the QMP commands > > > for snapshots (savevm, loadvm, delvm). This parameter accepts a list of > > > block driver state node names. > > > > > > One use case for this would be a VM using OVMF firmware where the > > > variables store is a raw disk image. Ideally the variable store would be > > > qcow2, allowing its contents to be included in the snapshot, but > > > typically today the variable store is raw. It is still useful to be able > > > to snapshot VMs using OVMF, even if the varstore is excluded, as the > > > main OS disk content is usually the stuff the user cares about. > > > > > > Signed-off-by: Daniel P. BerrangÃÆÃÂ© <berra...@redhat.com> > > > > Wouldn't it be better to take an optional list of nodes to _include_ > > that just defaults to our current set of nodes? > > > > The problem with excluding is that we already don't snapshot many nodes, > > and the criteria to choose the right ones weren't entirely obvious, so > > we just went with something that seemed to make the most sense. But the > > management application may actually want to snapshot more nodes than we > > cover by default. > > > > I feel things become clearer and less surprising if the client just > > tells us explicitly which images are supposed to be snapshotted instead > > of adding exceptions on top of a default selection that we're already > > not really sure about. > > I thought that QEMU just excluded nodes which are not capable of being > snapshotted.
No, QEMU tries to figure out which nodes must be snapshotted to capture the current state, and if any of these nodes doesn't support snapshots, the snapshot operation fails. > By using exclusions, the mgmt apps don't have to know > about what types of storage driver QEMU supports snapshots on, just let > QEMU decide. It also felt simpler to use exclusions as normal case would > be to snapshot everything. Both inclusions/exclusions are easy to > implement in QEMU though. The problem when going from device based operation to node based is that you need to figure out which nodes actually contain something that the user wants to snapshot. For example, you usually don't want to try creating a snapshot on the protocol node when there is a format node on top. What do you do with nodes that aren't attached to the guest, but maybe used as the backend of the NBD server? What if a node is both directly attached to some user and there is another node on top of it? In these non-trivial cases, the default is rather arbitrary because there really isn't a single right answer. What QEMU currently does is snapshotting every node that is opened read-write and either attached to a BlockBackend (i.e. is used by a device, NBD server, or I guess as the main node of a block job) or that doesn't have any parents (i.e. the user added it explicitly, but didn't use it yet). Come to think of it, the read-write condition may lead to surprising results with dynamic auto-read-only... Good that file-posix doesn't support snapshots and nothing else implements dynamic auto-read-only yet. Kevin