среда, 23 февраля 2011 г.

VMFS troubleshooting

Введение
Наш любимый ESX(i) использует файловую систему VMFS, для размещения на ней виртуальных машин.

Все хорошо, кроме одного - для нее не существует обслуживающих утилит. Никаких undelete, unformat и т.п. Мораль - не делать бекапы еще более опасно, чем обычно.

Вот один из примеров проблемы и шаманства с решением - Пропал VMFS раздел - что делать?

Но проблемы бывают разные. Не очень давно по почте ко мне обращались со схожими вопросами сразу несколько человек: ESX выключился (некорректно, обычно по пропаже питания), после включения VMFS на месте, а вот файлы виртуальных машин заблокированы. Притом заблокированы так, что не то что включить - скопировать(!) не дают.

Перебрав все известные мне способы попиннать по колесам, я развел руками и посоветовал обратиться в поддержку.

В одном случае обратились - и проблема быстро была решена, путем внесения правок в структуру файловой системы.
(кстати, для тех кто не имеет привычки обращаться в поддержку - у VMware первая линия стала русскоязычной, а продукты VMware без поддержки не продаются - так что обращаемся резко, решительно в случае странных проблем.)

А во втором случае поддержки не было, и нужда заставила найти выход :-)
По результатам изысканий и успешного выколупования данных со мной поделились ранее мне незнакомой утилитой vmfs-tools из состава лайв сд. Эта утилита позволяет подмонтировать раздел VMFS к другой операционной системе.
Запустив ESX сервер с этого live cd  данные с VMFS тома удалось вытянуть.


Монтирование VMFS из под Linux
Разумеется, мне стало интересно, и я поигрался с этой утилитой.
На локальном диске тестового ESX располагается очень нужная мне виртуальная машина (рис.1).
Рис.1. ВМ на локальном диске ESX

Скачал ISO этого live cd, загрузил с него свой тестовый ESX, и вот что увидел (рис.2):
Рис.2. Свежезагрузившийся Live CD
Так как видеть только командную строку лично мне достаточно грустно - я порадовался :-)
Итак, моя задача - получить доступ к разделу VMFS. Посмотрим информацию по разделам соответствующей утилитой - она единственная в местном трее (рис. 3)
Рис.3. Просмотр информации об имеющихся разделах

Следующий шаг - подмонтировать этот раздел.Создадим каталог - точку монтирования, у меня это будет каталог vmfs в корне (рис. 4).

Рис.4. Раздел vmfs создан (слева), и пуст(справа)
Я не большой любитель командной строки, поэтому воспользовался Midnight Commander.
Но к командной строке обратиться все таки придется - откроем терминал и воспользуемся командой "vmfs":

root@PartedMagic:~# vmfs /dev/sda5 /vmfs

Здесь выполнена данная команда, первым параметром на вход ей передан путь к диску с VMFS (здесь это локальный диск сервера), вторым - точка монтирования (ранее мною созданная папка vmfs в корне диска).
И - вуаля (рис.5).
Рис.5. Данные с тома VMFS доступны из под Linux
Сравните правую часть рис.5 с рис.1.
Монтирование осуществляется в read-only режиме - для вытаскивания данных более чем достаточно.

Недолгое гугление нашло мне еще одну ссылку по использованию этой утилиты - из под Ubuntu - Using linux vmfs-tools package to access virtual machines. Там немного другие названия и использование - то ли разные версии с описываемым live cd, то ли что.

Однако на этом мои опыты не закончились.

Монтирование VMFS из под Windows, в том числе

Я вспомнил, что ранее встречал упоминание о каком-то java-драйвере под vmfs. Года три назад я даже пробовал его в деле - но не заработало. Решил попробовать еще раз.

Я нашел его тут - Open Source VMFS Driver.

Эта штука позволяет получить доступ к разделу VMFS с сервера Windows/Linux/Mac OS, где достаточно установленной Java.

Вооружившись Microsoft iSCSI Initiator, я подключился со своего ноутбука к iSCSI LUN с VMFS. Таким образом, в Дистпетчере Дисков я увидел еще один диск (рис.6).
Рис.6. Диск с VMFS, подмонтированный к Windows XP

Следующий шаг - загрузить непосредственно драйвер (и поставить Java если ее еще нет).
После этих действий проверяем работоспособность утилиты получением хелпа по ней:
C:\Program Files\Java\jre6\bin>;java -jar D:\vmfs_r95\fvmfs.jar
VMFSTools (C) by fluid Operations (v0.9.8.18 r95 / 2010-01-25_15-57-35)
http://www.fluidops.com

Arguments:
  VMFSVolume info
  VMFSVolume dir path
  VMFSVolume dirall path
  VMFSVolume cat path
  VMFSVolume fileinfo path
  VMFSVolume filecopy path [newname position size]
  VMFSVolume filedump path position size
  VMFSVolume showheartbeats
  VMFSVolume webdav [host port]

VMFSVolume can be any mounted VMFS volume, or a volume reachable by SSH/SFTP.
Multiple VMFS extents can be specified using a comma-separated list.
Examples:
  \\sambaserver\luns\bigdisk dir /Linux_VMs
  ssh://root:passwd@linuxhost/mnt/vmfslun fileinfo /disks/SwapDisk-flat.vmdk
  \\.\PhysicalDrive3,\\.\PhysicalDrive4 filecopy /Windows-Template/W2008.vmdk x:\recover\W2008.vmdk

C:\Program Files\Java\jre6\bin>;

Таким образом, надо выполнить команду
java -jar D:\vmfs_r95\fvmfs.jar
передав ей первым параметром путь к диску с vmfs, а вторым - действие.
Я путь ей буду передавать как путь к диску Windows.

Для начала - получим информацию о разделе:

C:\Program Files\Java\jre6\bin>java -jar D:\vmfs_r95\fvmfs.jar \\.\PhysicalDrive1 info
VMFSTools (C) by fluid Operations (v0.9.8.18 r95 / 2010-01-25_15-57-35)
http://www.fluidops.com

VMFS label         = iSCSI_LUN_1_main
VMFS creation date = Fri Jul 24 23:08:51 MSD 2009
VMFS capacity      = 14.50 GB
VMFS UUID          = 4ba75d25-3be4b8df-c372-000c29e78205
VMFS block size    = 1.00 MB
VMFS version       = 3.33
VMFS # of FD/PB/SB = 30720 / 14600 / 3968
VMFS volume type   =
VMFS volume UUID   = 4ba75d25-28b9a16d-2f81-000c29e78205
VMFS volume size   = 14.50 GB
VMFS volume ver    = 4

C:\Program Files\Java\jre6\bin>

Вот когда это у меня получилось - я обрадовался. Вау, работает! :-)

Затем получим список содержимого:

C:\Program Files\Java\jre6\bin>java -jar D:\vmfs_r95\fvmfs.jar \\.\PhysicalDrive1 dir /
VMFSTools (C) by fluid Operations (v0.9.8.18 r95 / 2010-01-25_15-57-35)
http://www.fluidops.com

10/20/10 05:19:19           (dir) /.dvsData
07/24/09 23:08:51         163а840 /.fbb.sf
07/24/09 23:08:51      63а143а936 /.fdc.sf
07/24/09 23:08:51      60а817а408 /.pbc.sf
07/24/09 23:08:52     260а374а528 /.sbc.sf
07/24/09 23:08:52       4а194а304 /.vh.sf
02/02/11 19:27:13           (dir) /File_Server_Win2008_1
10/01/10 13:18:34           (dir) /main_win2003_template 

C:\Program Files\Java\jre6\bin>

Все так и есть - если заглянуть из интерфейса vSphere, увидим все то же самое (рис. 7).
Рис.7. Просмотр содержимого раздела VMFS средствами vSphere

Следующий шаг - получение доступа к данным. Не вопрос:
C:\Program Files\Java\jre6\bin>java -jar D:\vmfs_r95\fvmfs.jar \\.\PhysicalDrive1 filecopy
 /File_Server_Win2008_1/File_Server_Win2008.vmdk
VMFSTools (C) by fluid Operations (v0.9.8.18 r95 / 2010-01-25_15-57-35)
http://www.fluidops.com

Size = 626.00 Bytes
Copied 626 bytes in 0s throughput was 39 KB/s

C:\Program Files\Java\jre6\bin>java -jar D:\vmfs_r95\fvmfs.jar \\.\PhysicalDrive1 filecopy
 /File_Server_Win2008_1/File_Server_Win2008-flat.vmdk
VMFSTools (C) by fluid Operations (v0.9.8.18 r95 / 2010-01-25_15-57-35)
http://www.fluidops.com

Size = 10.00 GB
Copying file -- bytes left=10663493632 throughput=29393 KB/s ETA=362s
...
тут типа прогресс бар, но я сделал монтаж
...

C:\Program Files\Java\jre6\bin>

Здесь не совсем монтирование раздела - здесь команда выгрузки конкретного файла.
Получаем наши vmdk(рис.8)
Рис.8. Бекап удался
Насчет "бекап удался" я слегка соврал - на середине процесса копирование оборвалось - но я не стал разбираться пока, разовая это проблема или нет.

Напоследок расшарим подмонтированный VMFS:
C:\Program Files\Java\jre6\bin>java -jar D:\vmfs_r95\fvmfs.jar \\.\PhysicalDrive1 webdav
VMFSTools (C) by fluid Operations (v0.9.8.18 r95 / 2010-01-25_15-57-35)
http://www.fluidops.com

*** Serving WebDAV/HTTP at http://localhost:50080/vmfs
log4j:WARN No appenders could be found for logger (org.mortbay.log).
log4j:WARN Please initialize the log4j system properly.

К сожалению, подключить к Windows как сетевой диск мне не удалось, хотя в хелпе написано что можно; а вот браузером зашлось нормально(рис.9,10).
Рис.9. Просмотр содержимого vmfs раздела через браузер, корень раздела

Рис.10. Просмотр содержимого vmfs раздела через браузер, каталог ВМ
В общем, за сегодня я значительно прокачал свои навыки неклассических доступов к разделам VMFS.

Мне будет интересно ознакомиться с вашим опытом, буде таковой воспоследствует.

19 комментариев:

  1. Респект Вам - будем пробовать траблшутить...

    Интересно будет попробовать на "ушатанном" разделе VMFS - насколько реально снять с него данные этими тулзами. Ну и заодно посмотреть - насколько применимы эти инструменты в случае внешней хранилки а-ля ОпенФайлер/ФриНАС (понятно, что тяжёлый сторадж энтерпрайзного класса с такого "ливчика" не загрузишь).

    * * *
    Буквально днями зацепил где-то инфу про что-то подобное от sanbarrow с их проектом МОА. Но до праздника толком глянуть не успел (только вкладки пооткрывал соответствующие на работе). Не доводилось ли Вам пересекаться с помянутым проектом?

    С уважением,
    Umlyaut.

    ОтветитьУдалить
  2. с MOA немножко игрался в ноябре 2008 :)
    http://www.vm4.ru/2008/11/moa-cold-clone-boot-cd.html

    ОтветитьУдалить
  3. Угу, помню сию заметку. Только тогда оно Вас, вроде, интересовало как конвертер... :)

    С уважением,
    Umlyaut.

    P.S. Постеснялся в первом комменте заметить, но теперь всё же скажу - не "дабы (сиречь - "чтобы") таковой воспоследует", а "буде таковой воспоследует".
    "Понимание - функция терминологии!"(с)моё...

    ОтветитьУдалить
  4. очень познавательно, но хотелось бы надеяться, что пользовать не доведется:) дерево->тук-тук-тук

    ОтветитьУдалить
  5. Был недавно опыт как раз с этим java-драйвером под виндой + MS iScsi Initiator.

    Очень выручило, вытащили виртуальные машины. Правда долго лопатило, но очень помогло.

    ОтветитьУдалить
  6. поигрался с MOA - в варианте WinPE не увидел ничего связанного с vmfs.

    ОтветитьУдалить
  7. michigan>поигрался с MOA - в варианте WinPE не увидел ничего связанного с vmfs.

    Я, собственно, плясал отсюда:

    http://communities.vmware.com/thread/160381?start=15&tstart=180

    Мне показалось, что там используется именно vmfs-tools

    С уважением,
    Umlyaut.

    ОтветитьУдалить
  8. там как раз java драйвер, насколько я могу судить.

    ОтветитьУдалить
  9. Миша, а "стандартный" vcb-mount для этих целей не подойдет под Windows?

    Под Linux есть более-менее стандратные средства доступа
    http://markelov.blogspot.com/2010/01/esx-libguestfs.html

    bond_jimme

    ОтветитьУдалить
  10. да, с vcb очень похож функционал. про VCB mount я даже написать хотел, но потом поленился.

    про второе я читал - и даже откомментировал там :) - но с моим знанием линуксов тамошняя инструкция не возбудила попробовать.

    ОтветитьУдалить
  11. vcb больше похож на java-драйвер - но тут могут быть нюансы что он работает через API, а двум описанным вариантам достаточно просто видеть диск. для recovery это существенная разница.

    ну и первая штука - готовый live cd, опять же если припрет им проще воспользоваться.

    ОтветитьУдалить
  12. А этим не пробовали?
    http://kb.vmware.com/selfservice/microsites/search.do?cmd=displayKC&docType=kc&externalId=1030778&sliceId=1&docTypeID=DT_KB_1_1&dialogID=160527061&stateId=0%200%20160525391

    ОтветитьУдалить
  13. отличная идея!!

    когда то помнил от такой возможности, но забыл :(

    ОтветитьУдалить
  14. причем шанс, получить консинстентные данные думаю выше, чем у самописных аналогов :)

    ОтветитьУдалить
  15. или ниже - в случае проблем именно на VMFS через нормально работающий ESX доступ к данным был невозможен - это то с какими проблемами ко мне обратились буквально неделю назад.
    а vmfs-tools данные вытащил.

    ОтветитьУдалить
  16. и это возможно.
    чем больше методов будем знать тем лучше!

    ОтветитьУдалить
  17. был случай восстановления ФС удаленной разделом VMFS. Метод описанный вами не помог:
    http://www.vm4.ru/2010/02/vmfs-recovery-vmfs.html

    ОтветитьУдалить
  18. оказалось, при создание VMFS раздела, гипервизор меняет индификатор ФС, и не меняет MBR если он был создан. Оказалось раздел выделеныый под ESX до этого использовался в Windows системе и был отформатирован в NTFS. И смещение нужно было задавать не 128 а 63. А вот как определили что до этого там был NTFS это другая история :)

    ОтветитьУдалить