Дополнение А. Доступ к виртуальным дискам из-вне виртуальной машины.

Иногда возникает потребность списать что-нибудь с виртуального диска, созданного под VMWare, на диск реального компьютера. Это можно сделать, запустив VMWare, загрузить установленную под ней ОС и переписать это "что-нибудь" на реальный диск, подключенный в VMWare как Raw Disk или через Samba и т.д.. А если твоя виртуальная машина создана без поддержки сети? Или у тебя нет времени или желания запускать Windows под VMWare и ждать его загрузки только для того, чтоб переписать пару килобайт?

Именно для таких целей служит программа, входящая в поставку VMWare - vmware-loop. Эта программа предназначена для связывания какого-нибудь NBD (Network Block Device)-устройства с файлом виртуального диска. После этого NBD-устройство можно монтировать как обычный диск или loopback-устройство.

Для того, чтобы все это работало, твое ядро должно поддерживать NBD/usr/src/linux/.config должны быть строчка CONFIG_BLK_DEV_NBD=m или CONFIG_BLK_DEV_NBD=y). По-умолчанию она есть. Если нет - придется пересобрать ядро, добавив поддержку NBD.:)

NBD-устройства имеют имена /dev/nbX или /dev/ndX, где X - номер устройства. Для связывания NBD и виртуального диска надо выполнить следующую команду:


vmware-loop имя_файла_виртуального_диска номер_партиции_виртуального_диска /dev/nbX

Т.е. если файл виртуального диска - /home/vmware/win98/win98.dsk, ты хочешь подключить первую партицию на этом диске к устройству /dev/nb0, тогда надо выполнить команду:


vmware-loop /home/vmware/win98/win98.dsk 1 /dev/nb0

Для того, чтоб открыть файл виртуального диска только для чтения, надо запускать vmware-loop с ключом -r.


vmware-loop -r имя_файла_виртуального_диска номер_партиции_виртуального_диска /dev/nbX

После запуска vmware-loop останется активной в текущем окне терминале, ожидая нажатия Ctrl+C. Теперь в другом окне можно запустить mount:


mount -t файловая_система /dev/nbX точка_монтирования

В моем примере, можно использовать такую команду:


mount -t vfat /dev/nb0 /mnt/vmware

Обрати внимание: каталог, к которому ты монтируешь устройство, должен существовать. Остальные опции команды mount ты можешь посмотреть, набрав man mount.

Теперь перейди в каталог, являющийся точкой мотирования, и можешь копировать с диска и на диск что хочешь и чем хочешь...:)

После этого нужно отмонтировать виртуальный диск командой:


umount точка_монтирования

В моем примере:


umount /mnt/vmware

Теперь надо перейти в то окно терминала, в котором запущен vmware-loop и нажать Ctrl+C.

Программа vmware-loop позволяет также просмотреть информацию о партициях виртуального диска.


vmware-loop -p имя_файла_виртуального_диска

В моем примере:


vmware-loop -p /home/vmware/win98/win98.dsk

Для автоматизации всего этого процесса (связывания с NBD и монтирования) служит скрипт vmware-mount.pl, также входящий в поставку VMWare. Вызывается он следующим образом:


vmware-mount.pl имя_файла_виртуального_диска номер_партиции точка_монтирования

Применительно к моему примеру:


vmware-mount.pl /home/vmware/win98/win98.dsk 1 /mnt/vmware

Скрипт пытается автоматически определить файловую систему монтируемой партиции. Если это не удается, можно воспользоваться ключом -t:


vmware-mount.pl имя_файла_виртуального_диска номер_партиции -t тип_файловой_системы точка_монтирования

После выполнения всех необходимых операций скрипт остается активным в своем окне терминала и сообщает о том, что для выхода из него нужно нажать Ctrl+C. При нажатии Ctrl+C происходит отмонтирование виртуального диска и разрыв связи с NDB-устройством.

При запуске vmware-loop (соответственно и vmware-mount.pl) блокирует файл виртуального диска, запрещая запись и чтение. Из-за этого запуск виртуальной машины, использующей этот диск невозможен. Также нельзя связать с NBD-устройством файл виртуального диска, который занят запущенной виртуальной машиной.

Предыдущая

Содержание

Следующая


(c)Ерижоков А.А., 2000.
Использование данного документа разрешено только с согласия автора и с указанием первоисточника: DH's Linux Site