The xml files represents the snapshot metadata, if you open it you will see something like this (domain definition shortened for brevity):
WARNING: THIS IS AN AUTO-GENERATED FILE. CHANGES TO IT ARE LIKELY TO BE
OVERWRITTEN AND LOST. Changes to this xml configuration should be made using:
or other application using the libvirt API.
<disk name='hda' snapshot='internal'/>
This file records the name of the snapshot, state of the domain when it was created, creation time, if memory was snapshot as well, and the disks, then the domain definition at that point as well.
This domain definition amounts to the same info you will get with
virsh dumpxml your-domain. It's the configuration of your device, CPU, memory, etc. at the point of the snapshot. For example if after the snapshot you changed some device, memory size, etc. this allows you to go back to the exact setup you had back when the snapshot was taken.
Now on the
disks section you can see which disk devices where actually snapshot. You expected a disk image to be created but with
qcow2 files it works a bit differently.
qcow2 implements Copy-on-write images. On other Copy-on-write filesystems like
btrfs this means that the files are not changed in place but rather when modified a copy of them with the changes will be stored somewhere else on the disk.
qcow2 snapshots, the image is always modified in place but if a snapshot has been created, then within that
qcow2 file whenever a file is modified after the snapshot, a copy before the modification is applied will be saved for the snapshot. This means that the image and the snapshots are both within the
qcow2 file. (A more in-depth explanation of the
qcow2 fileformat and how snapshots work can be found here.
You can list and interact with these disk snapshots (list, revert, create, delete) using the
qemu-img command. For example you could list the snapshots like this:
# qemu-img snapshot -l /var/lib/libvirt/qemu/centos7-server.qcow2
ID TAG VM SIZE DATE VM CLOCK
1 your-snapshot 0 2019-09-02 22:15:58 00:00:00.000
The TAG here should match the name of your snapshot XML files and the
name entry inside the XML itself, this is how
libvirt knows what snapshot within the
qcow2 image it should revert to.