Why rsync –sparse produces bigger qcow2 files than the source? Because qcow2 stores sparse blocks internally, and rsync’s –sparse only detects holes at the filesystem level. The result is a copy that’s often larger than the original.

The problem
You have a qcow2 disk that’s 10GB virtual but only 2GB on disk. You rsync it with –sparse to another host, and the copy ends up 10GB. That’s annoying. The –sparse flag is supposed to preserve holes, but it doesn’t know about qcow2’s internal block mapping. It sees a file with no filesystem holes — just a bunch of data that qcow2 itself treats as sparse. So rsync writes every byte, zeros included.
Why it happens
qcow2 is a copy-on-write format. It keeps a table of which blocks are allocated. Unallocated blocks read as zeros but don’t take up space. When you copy the file with rsync, you’re copying the raw bytes of the qcow2 file, not the guest data. rsync’s –sparse looks for sequences of zero bytes in the file and creates filesystem holes for them. But the qcow2 file itself doesn’t have those zero sequences — it has a small metadata structure and then whatever allocated blocks exist, scattered around. The unallocated blocks aren’t in the file at all. So rsync sees a dense file and copies it as-is, no holes.
The result is a file that’s the full virtual size, because rsync fills in the gaps with zeros. The original was small because qcow2 skipped writing those zeros. The copy is big because rsync wrote them all.

The fix
Two ways to handle this. First, use --inplace with rsync. This doesn’t help with the sparse issue directly, but it avoids creating a new file and can be combined with other tricks. The real fix is to convert the qcow2 to raw or use qemu-img to copy with sparseness preserved.
If you’re copying between two Proxmox hosts, just use qm move_disk or the storage migration. It handles the qcow2 internals correctly. If you must use rsync, do this:
qemu-img convert -O qcow2 source.qcow2 destination.qcow2
That creates a new qcow2 with only allocated blocks, and the file will be small. Then rsync that file without –sparse, or just scp it.
If you’re stuck with rsync and can’t convert, you can try --sparse --inplace on a pre-allocated destination, but it’s hit or miss. The qemu-img route is cleaner.
My take
This is one of those things that seems like a bug but is just a mismatch between two tools’ ideas of sparseness. rsync is great for plain files, but qcow2 is a container format. Don’t fight it — use the right tool. If you’re moving VM disks around Proxmox, the built-in migration is always better than rsync. Check out Changing VMID of a VM in Proxmox: Backup/Restore vs Config Edit for more on moving things the safe way.