1. A computer implemented method for synchronizing changes in virtual machines (VMs) between two or more systems, the method comprising: obtaining, by a first system, a virtualization snapshot of a source VM; receiving, by the first system, instructions for execution, wherein the execution is performed using the source VM; executing, by the first system, the received instructions resulting in modifications of the source VM, wherein the virtualization snapshot stores modified portions of the source VM separate from the source VM, comprising: determining whether execution of the received instructions causes modification of a data block of the source VM; and storing a modified data block on the first system separate from the source VM responsive to determining that the execution of the received instructions causes modification of the data block; sending, by the first system, the modified portions of the source VM to a second system comprising a destination VM, wherein the destination VM matches the source VM before the modifications; receiving, by the second system, the modified portions from the first system; and applying, by the second system, the modified portions to the destination VM to obtain a modified destination VM that matches the modified source VM.