Ранее на блоге уже писалось про устройство снимков VMware VI 3,5.
На самом деле, статья актуальна до сих пор — на данный момент структура снимков в vSphere 6 (VI3,5->vSphere4.x->vSphere 5.x->vSphere 6.0) осталась неизменной: каждому виртуальному диску соответствует два файла: vm_name.vmdk (дескриптор) и vm_name-flat.vmdk (файл с «сырыми» данными).
Если портится второй файл — вам прямая дорога к резервным копиям. Если портится дескриптор — то что-то еще можно сделать.
Дескриптор выглядит примерно так:
version=1
encoding=»UTF-8″
CID=8798f6ac
parentCID=ffffffff
isNativeSnapshot=»no»
createType=»vmfs»
# Extent description
RW 134217728 VMFS «win8_vm-flat.vmdk»
# The Disk Data Base
#DDB
ddb.adapterType = «lsilogic»
ddb.deletable = «true»
ddb.geometry.cylinders = «8354»
ddb.geometry.heads = «255»
ddb.geometry.sectors = «63»
ddb.longContentID = «ab5f695248b48671a2f034408798f6ac»
ddb.thinProvisioned = «1»
ddb.toolsVersion = «9354»
ddb.uuid = «60 00 C2 9f c0 a4 0d d2-37 da f0 95 16 7a cf 68»
ddb.virtualHWVersion = «8»
Соответственно, нам нужны CID и parentCID. При наличии у ВМ снапшотов, они должны ссылаться на предыдущий диск, то есть их parentCID должен совпадать с CID «предыдущего диска».
Формат виртуального диска для VMware Workstation немного другой — оба файла объединены в один. В начале файла — дескриптор, дальше — сырые данные.
В результате, достаточно геморройно проверять CID-цепь, а исправлять ее еще более геморройно (так как вам может потребоваться отредактировать 50ГБ файл) 🙂
Гугл подсказал, что есть достаточно простенькие утилитки — dsfo.exe и dsfi.exe.
Работать с ними вот так:
Достать дескриптор и выгрузить в текстовый файл desc.txt
dsfo «C:\test-area\test.vmdk» 512 1024 «C:\test-area\desc.txt»
Поместить исправленный дескриптор обратно в VMDK
dsfi»C:\test-area\test.vmdk» 512 1024 «C:\test-area\desc.txt»
После этого с помощью UFS Recovery можно по очереди подключить все снапшоты и попробовать «собрать все данные».
Правда, в моем случае пользователь удалил один из промежуточных vmdk-дисков, после чего восстановил его утилитой undelete (с windows-машины).
Увы, в этом файле был поврежден не только дескриптор (имя «flat-файла» и размер), но и данные, так как вменяемого содержимого найти и восстановить не удалось.
UFS — барахло! Лучше GetDataBack или пишем мне и я дам — DMDE.
Для esxi:
http://www.diskinternals.com/vmfs-recovery/
Берем кошерный вариант в торрентах и восстанавливаем удаленное, потом в шашки CIDами играем!
А еще лучше делать бэкапы. С ними сон крепче, нервы в порядке и вообще появляется уверенность в завтрашнем дне 🙂
Фил, а GetDataBack или DMDE умеют из нескольких файлов собирать данные?
Или сначала собираем цепь, а потом запускаем эту штуку внутри виртуалки?
Сложный момент.
Лучше собирать цепь, наверное.
Иначе на восстановлении будет куча дублей и множество всякого нечитаемого хлама.
В этом случае UFS может оказаться удобнее, так как она умеет работать с VMDK и с их дельтами. Как минимум, для Workstation (и этого режима vmdk — monolithic sparse, если не ошибаюсь, в котором в одном vmdk файле и дескриптор, и данные).
В общем-то, я ее именно в этом контексте и упомянул.
Впрочем, с CID-цепью все равно надо играться — UFS ИИ внутри себя не имеет.
Попробовал воспользоваться утилитами dsfo и dsfi.
dsfo отработала на отлично, но при попытке загрузить дескриптор обратно возникли проблемы.
Ввожу команду:
dsfi «F:\Backup\PSR-2017-04-05\Clone of TD\Windows Server 2008 R2 x64-cl4-000001.vmdk» 512 1024 «F:\Backup\PSR-2017-04-05\Clone of TD\text1.txt»
Получаю в консоли:
F:\Backup\PSR-2017-04-05\Clone of TD\Windows Server 2008 R2 x64-cl4-000001.vmdk — ??????? ?? ????? ???????? ?????? ? ?????, ??? ??? ???? ???? ????? ?????? ?????????.
Буду благодарен любой помощи.
Руслан, пробовали без редактирования файла text1.txt обратно записывать?
text1.txt чем редактировали?