Ранее на блоге уже писалось про устройство снимков 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 чем редактировали?