Best guess would be sparse files, but only if you used
rsync's "-S" (--sparse) option. If you did use that option, any 4096-byte blocks that were all zeros will not use space on the destination regardless of whether they used space on the source. (Without that option,
rsync will
never make a sparse file, and the destination could use significantly
more space than the source.)
Some other cases where less space is used on the destination:
- Files that are unlinked from the directory tree on the source but are still held open by some process,
- Files that are in the process of being written on the source and thus have some extra space pre-allocated,
- Directories that once contained a large number of entries but now contain only a few. Space allocated to a directory file is never reclaimed until the directory is removed entirely. That unneeded space will not be allocated on the destination.
Of those, only the first is likely to involve any significant amount of space.
Afterthought: By any chance was the source a filesystem that supported transparent compression?