Иногда обмен файлами между виртуальной и хостовой операционными системами может стать проблемой (по крайней мере, у меня такое не раз бывало). Штатные средства на уровне гостевой ОС требуют установленных VMware-Tools, дополнительных настроек виртуальной сети и т.п.
А что делать, если нам просто нужно перекинуть небольшой файл из хостовой ОС Linux на диск виртуальной машины, но шаманить с тулзами и дополнительными настройками нету ни времени ни желания?
Как по мне, простейший способ сделать это — выключить ВМ (если есть возможность) и смонтировать ее виртуальный диск в хостовую ОС. О том как я это делал — ниже.
Итак, все происходило на моем любимом Дебиане 5.0 с установленным на нем VMware Server 2. На VMware крутится Windows 7.
У VMware Server для таких целей есть тулза vmware-mount, которая расположена в папке с самим гипервизором. Принцип ее использования достаточно прост:
./vmware-mount <путь к файлу диска> [номер раздела] <точка монтирования>
«путь к файлу диска» — это путь к самому .vmdk файлу нашей виртуальной машинки, который, как правило, расположен в папке с самой виртуальной машиной;
«номер раздела» — номер логического раздела на диске, начинается, по ходу с «1» т.к. «0» и «1», в моем случае, были загрузочным сектором, а раздел номер «2» был собственно разделом с виндой;
«точка монтирования» — папка, в которую хотим примонтировать наш диск;
Собственно у меня получилась вот такая команда:
$ sudo ./vmware-mount /var/vm-machines/windows7/windows7.vmdk 2 /mnt/windows7
что бы отмонтировать это дело, я не додумался до чего-то более умного чем:
$ sudo umount /mnt/windows7
думаю это есть правильно :)
Возможные ошибки (куда же без них):
Для начала, тулза не хотела ничего монтировать и вылетала с ошибкой:
./vmware-mount: error while loading shared libraries: libfuse.so.2: cannot open shared object file: No such file or directory
пофиксилось установкой 2-х пакетов: fuse-utils и libfuse2:
$ sudo apt-get install fuse-utils
но это не все, дальше появилась еще одна ошибка:
SSLLoadSharedLibrary: Failed to load library libcrypto.so.0.9.8:/vmserver/libdir/lib/libcrypto.so.0.9.8/libcrypto.so.0.9.8: cannot open shared object file: No such file or directory Core dump limit is 0 KB. Child process 16980 failed to dump core (status 0x6). VMware Server Error: VMware Server unrecoverable error: (app) SSLLoadSharedLibrary: Failed to load library libcrypto.so.0.9.8:/vmserver/libdir/lib/libcrypto.so.0.9.8/libcrypto.so.0.9.8: cannot open shared object file: No such file or directory Please request support. To collect data to submit to VMware support, select Help > About and click "Collect Support Data". You can also run the "vm-support" script in the Workstation folder directly. We will respond on the basis of your support entitlement. Press "Enter" to continue...
Насколько я понял,связана она с тем, что VMware Server у меня был установлен не в /usr, а в /vmserver, а если конкретней, то сами библиотеки ВМтвари расположены не в /usr/lib/vmware а в /vmserver/lib/vmware. Пофиксить это достаточно просто, нужно создать симлинк на наши библиотеки:
$ sudo ln -s /vmserver/lib/vmware /usr/lib/vmware
vmserver в моем случае, это папка, в которую установлены быблиотеки гипервизора и сам гипервизор (инсталяциооный скрипт в процессе установки VMware сервера, спрашивает куда их устанавливать).
Вроде бы ничего не забыл :)