Доступ к виртуальным дискам из-вне виртуальной машины.
Иногда возникает потребность списать что-нибудь с виртуального диска, созданного под 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