
Hi, I'm new to this ML, and very interested in this topic. I'm going to try to implement LVM snapshot feature using this framework. 2011/6/16 Eric Blake <eblake@redhat.com>
/* Opaque type to manage a snapshot of a single storage volume. */ typedef virStorageVolSnapshotPtr;
I'm just wondering how to detect storage type and to choose assosiate shapshot functionality. Is there any idea about it?
/* Revert a volume back to the state of a snapshot, returning 0 on success. Flags is 0 for now. */ int virStorageVolRevertToSnapsot(virStorageVolSnapshotPtr snapshot, unsigned int flags); [For qcow2, this would involve qemu-img snapshot -a. Here, a useful flag might be whether to delete any changes made after the point of the snapshot; virDomainRevertToSnapshot should probably honor the same type of flag.]
For LVM, it may be lvconvert --merge , but requires recent version of lvm and linux kernel, So, there are some failure reason (toolchain doesn't support it or toolchain supports, but failed) I don't know how to handle these case for now, but we may need to add some virErrorNumber to indicate snapshot-related error. - 元のメッセージを表示 -
As for the XML changes, it makes sense to snapshot just a subset of disks when you only care about crash-consistent state or if you can rely on a guest agent to quiesce the subset of disk(s) you care about, so the existing <domainsnapshot> element needs a new optional subelement to control which disks are snapshotted; additionally, this subelement will be useful for disk image formats that require additional complexity (such as a secondary file name, rather than the inline snapshot feature of qcow2). I'm envisioning something like the following:
<domainsnapshot> <name>whatever</name> <disk name='/path/to/image1' snapshot='no'/> <disk name='/path/to/image2'> <volsnapshot>...</volsnapshot> </disk> </domainsnapshot>
where there can be up to as many <disk> elements as there are disk <devices> in the domain xml; any domain disk not listed is given default treatment. The name attribute of <disk> is mandatory, in order to match this disk element to one of the domain disks. The snapshot='yes|no' attribute is optional, defaulting to yes, in order to skip a particular disk. The <volsnapshot> subelement is optional, but if present, it would be the same XML as is provided to the virStorageVolSnapshotCreateXML. [And since my first phase of implementation will be focused on inline qcow2 snapshots, I don't yet know what that XML will need to contain for any other type of snapshots, such as mapping out how the snapshot backing file will be named in relation to the possibly new live file.]
In LVM case, taking snapshot(lvcreate) needs at least snapshot volume size as an argument, So, I think storage-specific element can be inserted in this XML format
Any feedback on this approach? Any other APIs that would be useful to add? I'd like to get all the new APIs in place for 0.9.3 with minimal qcow2 functionality, then use the time before 0.9.4 to further enhance the APIs to cover more snapshot cases but without having to add any new APIs.
LVM snapshot may become invalid in the case of running out the volume size, So, adding an API for checking whether snapshot is valid will be needed. Regards,