Robiłem to kilka lat temu. (edycja: z VMWare uruchomionym na hostach CentOS, nie ESXi co prawda)
Każdej nocy miałem skrypt, który zawieszałby maszynę wirtualną, synchronizował pliki z dysku na serwer kopii zapasowej, a następnie ponownie uruchamiał maszyny wirtualne. Działa całkiem dobrze, z wyjątkiem ...
Rsync nie działa zbyt dobrze z plikiem 2 GB.
Nie dlatego, że rsync nie jest genialny, a bardziej, że każdy plik vmdk 2GB zmienia się w sposób, który jest bardzo nieprzejrzysty dla rsync, nawet niewielkie zmiany w zamkniętym systemie plików powodują zmiany w vmdk (lub z jakiegoś powodu wszystkich vmdks), na które obwiniałem Windows automatycznie defragmentuje lub wykonuje inne czynności, które nie mają znaczenia, jeśli używasz prawdziwego systemu, ale pokazują się, gdy próbujesz synchronizować maszynę wirtualną!
Myślę, że mechanizm rsync do wykrywania zmian nie działa zbyt dobrze na pliku 2 GB, podczas gdy dość często pomijał fragmenty początku vmdk, gdy tylko zaczął znajdować różnicę, po prostu kopiował resztę pliku. Nie wiem, czy to jest problem z tym, że rsync nie jest w stanie wykryć przeniesionego fragmentu danych binarnych, czy z brakiem pamięci w polu źródłowym, czy też vmdk właśnie został zaktualizowany do końca. To nie ma znaczenia, ponieważ wynik był taki sam - większość vmdk została skopiowana.
Na koniec po prostu skopiowałem zmienione pliki i nadpisałem je, nadal używając rsync. Miałem także lepszą wydajność, po prostu nadpisując plik kopii zapasowej, zamiast pozwalać rsync kopiować i zamieniać to, co tam było.
Nasz serwer kopii zapasowych również nie był najszybszy i do tego stopnia, że noc nie była wystarczająco długa, aby wykonać kopię zapasową wszystkich działających maszyn wirtualnych.
Kiedy jednak musieliśmy przywrócić maszynę wirtualną, było to naprawdę łatwe i działało pięknie.