13 января 2010

Доступ к файлам виртуальных машин ESX при помощи libguestfs

Richard W.M. Jones в своем блоге опубликовал интересный пост о работе при помощи утилит libguestfs с образами VMware ESX4. Немного дополнив, напишу, в чем суть. Во-первых нам понадобятся пакеты fuse-sshfs и guestfish. Первый позволяет монтировать при помощи FUSE удаленную файловую систему по SSH FTP, а второй установит в систему интерактивную командную оболочку, из которой можно получать доступ к образам дисков виртуальных машин, в том числе и vmdk. Естественно, в системе должны присутствовать стандартные компоненты виртуализации Fedora, в частности, работающий демон libvirtd.

Для начала проверяем, какие присутствуют на хосте ESX виртуальные машины:

[andrey@f13 ~]$ virsh -c esx://192.168.1.12?no_verify=1 list --all
Enter username for 192.168.1.12 [root]:
Enter root password for 192.168.1.12:
ID Имя Статус
----------------------------------
208 www выполнение
224 mail выполнение
- 2RHEL5_DS отключить
- 2W2003_DC отключить
- RHEL5_IPA отключить
- RHEL5_Satellite53 отключить
- RHEL5_Server1 отключить
- RHEL5_Station отключить
- RHEL5_Station2 отключить
- RHEL5_Zimbra отключить

Далее смонтируем через FUSE соответствующую директорию файловой системы vmfs:

[andrey@f13 ~]$ mkdir esx
[andrey@f13 ~]$ sshfs root@192.168.1.12:/vmfs/volumes esx
root@192.168.1.12's password:
[andrey@f13 ~]$ cd esx/
[andrey@f13 esx]$ ls
4ac343f6-500e2828-d805-0022640793d2 LocalStorage1

Естественно, мы ничего нового по сравнению с тем, что нам покажет vCenter client, не увидели. Далее переходим в директорию с нужной нам виртуальной машиной:

[andrey@f13 esx]$ cd LocalStorage1/RHEL5_IPA/
[andrey@f13 RHEL5_IPA]$ ls
RHEL5_IPA-flat.vmdk RHEL5_IPA.vmdk RHEL5_IPA.vmx vmware.log
RHEL5_IPA.nvram RHEL5_IPA.vmsd RHEL5_IPA.vmxf

При помощи новой утилиты virt-list-filesystems (в версии libguestfs репозитория Fedora 12 пока ее нет, зато есть в Rawhide) смотрим какие разделы доступны внутри образа:

[andrey@f13 RHEL5_IPA]$ virt-list-filesystems -al RHEL5_IPA-flat.vmdk
/dev/sda1 ext3
/dev/vol0/home ext3
/dev/vol0/root ext3
/dev/sda3 swap

И, наконец, запускаем интерактивную командную оболочку:

[andrey@f13 RHEL5_IPA]$ guestfish --ro -a RHEL5_IPA-flat.vmdk -m /dev/vol0/root

Welcome to guestfish, the libguestfs filesystem interactive shell for
editing virtual machine filesystems.

Type: 'help' for help with commands
'quit' to quit the shell

> ll /
total 192
drwxr-xr-x. 22 root root 4096 Oct 24 07:47 .
dr-xr-xr-x 29 root root 0 Jan 8 12:59 ..
drwxr-xr-x. 2 root root 4096 Oct 7 15:07 bin
drwxr-xr-x. 2 root root 4096 Oct 7 13:45 boot
drwxr-xr-x. 4 root root 4096 Oct 7 13:45 dev
drwxr-xr-x. 93 root root 12288 Oct 24 07:47 etc
drwxr-xr-x. 2 root root 4096 Oct 7 13:45 home
....

Ну, а дальше man guestfish и help для списка команд оболочки. Для виртуальных машин с включенным SELinux крайне желательно использовать ключ --selinux, иначе при попытке записи файлов вы можете создать при монтировании образа r/w файлы без меток SELinux.

2 комментария:

michigun комментирует...

а какую задачу это призвано решить?

Andrey Markelov комментирует...

Первое что приходит в голову - миграция и (возможно) резервное копирование.
Что касается миграции, еще можно использовать virsh dumpxml foo для того чтобы получить конфиг виртуальной машины. Не думаю что это интересно администраторам инфраструктуры построенной исключительно на продуктах VMware, а вот если у тебя все на XEN+libvirt/KVM+libvirt ну и парочка ESX, то - да, полезно.