8 дек. 2011 г.

Исправление ошибки Cannot open the disk or... VMware ESX cannot find the virtual disk... в VMware vSphere.

Недавно была такая проблема – виртуальная машина на VMware, отказывалась запускаться и выдавалась ошибка как на этом скриншоте (скриншот не мой - свою ошибку я не заскриншотил ибо надо было быстро всё восстанавливать):



Из данной ошибки видно, что ESX не может найти виртуальный диск <vm_name>.vmdk и соответственно виртуальная машина не запускается. <vm_name> - имя искомой вирт. машины. Поковырявшись в браузере датастора, я обнаружил, что есть файл <vm_name>-flat.vmdk, на котором - слава японским богам - судя по размеру были все данные. Поковырявшись в гугле, я обнаружил, что <vm_name>.vmdk - это конфиг, а <vm_name>-flat.vmdk - это собственно сам файл с данными. Приступим к восстановлению этого пропавшего конфига:
1) При помощи консоли (ssh или putty) заходим по ssh на ESX хост:
ssh root@<hostname_IP>

2) Переходим в папку, в которой находятся файлы нашей виртуальной машины:
cd /vmfs/volumes/<your_volume>/<VM_directory>

3) Теперь нам необходимо узнать точный размер flat диска:

ls -l <vm_name>-flat.vmdk 
-rw——- 1 root root 36106127360 Nov 21 21:07 <vm_name>.vmdk

Запоминаем размер (в примере - 36106127360)!
4) Далее при помощи команды vmkfstools нужно создать новый (временный) vmdk файл с именем, например, temp.vmdk и точным размером файла flat (то что мы узнали в предыдущем пункте), тип диска выберем thin (тонкий – то есть растущий по мере наполнения его данными) и адаптером lsilogic.

vmkfstools -c 36106127360 -d thin -a lsilogic temp.vmdk

5) У вас должно получиться два файла – temp.vmdk и temp-flat.vmdk. Последний файл нам не нужен, удалим его:

rm temp-flat.vmdk

6) Теперь переименуем temp.vmdk в нужное нам название, то есть в <vm_name>.vmdk:

mv temp.vmdk <vm_name>.vmdk

7) Vmdk файл – это конфигурационный файл диска, соответственно нам необходимо его отредактировать. При помощи редактора VI открываем файл:

vi <vm_name>.vmdk

Находим в нем строчку:

RW 31457280 VMFS «temp-flat.vmdk»

Соответственно изменяем «temp-flat.vmdk» на «<vm_name>.vmdk». Сохраняемся и выходим из редактора ([Esc], :wq).

Все, возносим хвалу японским богам и успешно запускаем нашу виртуальную машину :)