Hi!
Regarding your examples, I cannot say exactly because of lack of some details. What storage type are you using? How do you measure the space used on the physical disk?
> For example, when making a VM from template, using pre-allocated disk
option, for a 50GB Virtual disk, it only uses 3GB on the physical disk.
3GB is the VM's disk? What about the disk of the template?
Generally, 50GB pre-allocated disk will take 50GB of physical space. A 50GB sparse disk will take as many 1GB chunks as needed to store all the information that was written to it, maximum 50GB.
When you create a VM by cloning another VM or create a VM from a template in "clone" mode, a copy of the source disk will be created. The new disk will take as much space as the source disk did.
When you create a VM from a template in "thin provision" mode or creating a VM in a pool, the new disk will be initially only a reference to the source disk. Reading from it will read the source disk. Writing to it will write to the new disk, not touching the source. Thus, all disk fragments that were overwritten after disk creation will be physically stored in the new disk and read from it, those that were not overwritten, will be read from the source disk.
Also note that pool VMs are stateless, so the information that was written to their disks when VM was used by user is erased after the VM is returned back to the pool.
Shmuel