Такая ситуация: была настроена репликация виртуальной машины на удаленное хранилище, причем с использованием точек восстановления во времени. В результате какой-то ужасной катастрофы были утеряны исходная виртуалка, vCenter и Replication Appliance. То есть осталось только удаленное хранилище, на котором лежит папка с репликой, из которой необходимо восстановить виртуальную машину.
Казалось бы, не должно быть ничего сложного, берем содержимое папки, переименовываем пару файлов и готово. Но из-за наличия точек восстановления ситуация резко усложняется: в результате нам нужно получить виртуальную машину со снапшотами (по одному на каждую точку восстановления), а в папке имеются только vmdk-файлы с GUID в названиях, которые согласно документации VMware являются redo-логами, которые преобразовываются в снапшоты при восстановлении машины из реплики. Процесс преобразования нигде не описывается, поиск в Интернете мало что дал.
У виртуальной машины VMware со снапшотами в папке должен лежать текстовый файл с расширением .vmsd, содержащий описания всех снапшотов, и несколько бинарных файлов с расширением .vmsn, по одному на каждый снапшот. В папке с репликой всего этого нет, зато есть текстовый файл hbrgrp.<здесь длинный GUID>.txt, в котором имеется информация по всем точкам восстановления. Я написал скрипт на питоне, который использует информацию из этого файла и создает соответствующие .vmsd и .vmsn, плюс к этому файлы с конфигурацией виртуальной машины – .vmx и .nvram. Получается готовая к использованию виртуалка, которую остается только зарегистрировать в vCenter через vSphere Datastore Browser. Но есть нюанс – работает только если при репликации не использовался quiescing, так как разбираться с бинарной структурой .vmsn ни времени, ни желания нет. Скрипт выложил на гитхаб, на случай если еще кому-нибудь пригодится:
https://github.com/avnast/vr-recover
С помощью этого скрипта можно восстановить виртуальную машину из папки с данными vSphere Replication прямо из командной строки ESXi, благо в версии 6.5 имеется python 3 на борту.