Монтирование vdi (образ VirtualBox) в Ubuntu: различия между версиями

Материал из support.qbpro.ru
imported>Vix
Нет описания правки
imported>Vix
 
(не показано 13 промежуточных версий этого же участника)
Строка 1: Строка 1:
=='''Монтирование через стандартную утилиту virtualbox-fuse'''==
По некоторым причинам мне приходится пользоваться '''VirtualBox''', к сожалению Wine может запустить далеко не все приложения, которые мне нужны для работы. И иногда нужно что то достать с виртуального жёсткого диска, но каждый раз запускать '''VirtualBox''' слишком долго.
По некоторым причинам мне приходится пользоваться '''VirtualBox''', к сожалению Wine может запустить далеко не все приложения, которые мне нужны для работы. И иногда нужно что то достать с виртуального жёсткого диска, но каждый раз запускать '''VirtualBox''' слишком долго.


Строка 36: Строка 38:


* [http://ubuntovod.ru/instructions/montirovanie-vdi-v-ubuntu.html взято тут...]
* [http://ubuntovod.ru/instructions/montirovanie-vdi-v-ubuntu.html взято тут...]
=='''Монтирование через утилиты qemu-kvm (kvm)'''==
Перед монтированием жесткого диска виртуальной машины необходимо ее выключить.
# установка необходимого приложения
$ sudo apt-get install qemu-kvm
# загрузка модуля
$ sudo modprobe nbd
# создание loopback устройства для образа
$ sudo qemu-nbd -c /dev/nbd0 [image].vdi
# монтируем разделы, которые доступны как /dev/nbd0pXXX
$ sudo mount -o noatime,noexec /dev/nbd0p1 /tmp/vdi/
По завершению работы с образом необходимо отмантировать и выключить nbd.
$ sudo umount /tmp/vdi/
$ sudo qemu-nbd -d /dev/nbd0
* [http://andrey.fishchenko.name/linux/ubuntu-%D0%BC%D0%BE%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-vdi взято тут]
=='''Монтирование стандартными утилитами virtualbox от oracle и Linux'''==
Сначала определим  какие есть у нас образы и их тип - динамические или статические:
$vboxmanage list hdds
UUID:        c8ee2279-a3cc-4ad6-91a7-6846cd4e84e7
Parent UUID: base
Format:      VDI
Location:    /home/user/VirtualBox_VMs/WinXp/WinXp.vdi
State:      created
Type:        normal
Usage:      WinXp (UUID: 3e3b5aa6-eccc-5efd-a2c2-3bbb4e71f8ba)
UUID:        d9c6f76b-2db3-4d48-bcc6-e5170414b1fd
Parent UUID: base
Format:      VDI
Location:    /home/user/VirtualBox_VMs/Debian/Debian.vdi
State:      created
Type:        normal
Usage:      Debian (UUID: a634089b-bfa8-4376-83f7-3d54cc2560cb)
проверяем статический образ или нет:
$vboxmanage showhdinfo /home/user/VirtualBox_VMs/WinXp/WinXp.vdi
UUID:                c8ee2279-a3cc-4ad6-91a7-6846cd4e84e7
Accessible:          yes
Logical size:        15389 MBytes
Current size on disk: 15390 MBytes
Type:                normal (base)
Storage format:      VDI
'''Format variant:      fixed default'''
In use by VMs:        WinXp (UUID: 3e3b5aa6-eccc-5efd-a2c2-3bbb4e71f8ba)
Location:            /home/user/VirtualBox VMs/WinXp/WinXp.vdi
если '''fixed default''' - значит статический, что нам и нужно...
теперь вычисляем смещение первого раздела на нужном нам образе:
$head -c 348 /home/user/VirtualBox_VMs/WinXp/WinXp.vdi |tail -c 4|perl -ne 'print unpack("L",$_),"/n"'
$69632
или так:
$od -j344 -N4 -td4 /home/user/VirtualBox_VMs/WinXp/WinXp.vdi | awk 'NR==1{print $2;}'
$69632
узнаем все о нашем диске:
$dd if=/home/user/VirtualBox_VMs/WinXp/WinXp.vdi of=vdstart bs=1 skip=69632 count=1b >/dev/null
$/sbin/sfdisk -luS vdstart
Disk vdstart: cannot get geometry
Disk vdstart: 0 cylinders, 255 heads, 63 sectors/track
Units = sectors of 512 bytes, counting from 0
Device Boot    Start      End  #sectors  Id  System
vdstart1  *        63  31487399  31487337  7  HPFS/NTFS/exFAT
vdstart2            0        -          0  0  Empty
vdstart3            0        -          0  0  Empty
vdstart4            0        -          0  0  Empty
информация получена..
удаляем теперь ненужное:
$rm vdstart
теперь можно просто примонтировать и работать с данными:
sudo mount -o loop,offset=$((69632+63*512)) /home/user/VirtualBox_VMs/WinXp/WinXp.vdi /mnt
или делаем устройство для снятие образа или обслуживания:
losetup -o $((69632+63*512)) /dev/loop11 /home/user/VirtualBox_VMs/WinXp/WinXp.vdi
для проверки монтирование:
ntfs-3g /dev/loop11 /mnt
в каталоге /mnt должно появиться содержимое диска...
* [http://binsh.ru/2010/07/21/mount-fs-from-vdi.html использованы материалы от сюда]
* [http://isaleksey.blogspot.ru/2011/03/dos-vs-virtualbox-for-linux.html и от сюда]
* [http://przemoc.net/tips/linux#mounting_partition_from_vdi_fixed-size_image и от сюда]

Текущая версия от 22:51, 29 сентября 2013

Монтирование через стандартную утилиту virtualbox-fuse

По некоторым причинам мне приходится пользоваться VirtualBox, к сожалению Wine может запустить далеко не все приложения, которые мне нужны для работы. И иногда нужно что то достать с виртуального жёсткого диска, но каждый раз запускать VirtualBox слишком долго.

Вот тут то и поможет пакет virtualbox-fuse. Он использует библиотеку для доступа к образам VirtualBox и монтирует в локальную папку, используя FUSE. В локальной папке вы обнаружите EntireDisk, Partition1, Partition2 и т.д.

Итак, для начала установим сам пакет:

sudo apt-get install virtualbox-fuse

Теперь откройте файл /etc/fuse.conf:

sudo nano /etc/fuse.conf

В данном файле найдите такую строчку:

#user_allow_other

Уберите решётку (#) и сохраните файл.

Теперь разберёмся с самой программой. Подключим образ vdi:

sudo vdfuse -f /home/sk8er/VirtualBoxVMs/Windows7/Windows7.vdi /home/sk8er/VirtualBoxVMs/Windows7/mount

Где:

   /home/sk8er/VirtualBoxVMs/Windows7/Windows7.vdi - путь к образу vdi
   /home/sk8er/VirtualBoxVMs/Windows7/mount - путь для монтирования

В монтируемой папке появятся файлы EntireDisk, Partition1, Partition2 и т.д. Собственно их и нужно подключить, чтобы видеть файлы и папки на разделах виртуального диска.

Итак, ищем нужный файл (я просто выбрал тот, что имел самый большой объём) и подключаем:

sudo mount /home/sk8er/VirtualBoxVMs/Windows7/mount/Partition1 /home/sk8er/VirtualBoxVMs/Windows7/mount/disk

Где:

   /home/sk8er/VirtualBoxVMs/Windows7/mount/Partition1 - путь к файлу
   /home/sk8er/VirtualBoxVMs/Windows7/mount/disk - путь для монтирования

Вот и всё, теперь вы можете спокойно редактировать виртуальный жёсткий диск VirtualBox.

Монтирование через утилиты qemu-kvm (kvm)

Перед монтированием жесткого диска виртуальной машины необходимо ее выключить.

  1. установка необходимого приложения
$ sudo apt-get install qemu-kvm
  1. загрузка модуля
$ sudo modprobe nbd
  1. создание loopback устройства для образа
$ sudo qemu-nbd -c /dev/nbd0 [image].vdi
  1. монтируем разделы, которые доступны как /dev/nbd0pXXX
$ sudo mount -o noatime,noexec /dev/nbd0p1 /tmp/vdi/

По завершению работы с образом необходимо отмантировать и выключить nbd.

$ sudo umount /tmp/vdi/
$ sudo qemu-nbd -d /dev/nbd0

Монтирование стандартными утилитами virtualbox от oracle и Linux

Сначала определим какие есть у нас образы и их тип - динамические или статические:

$vboxmanage list hdds
UUID:        c8ee2279-a3cc-4ad6-91a7-6846cd4e84e7
Parent UUID: base
Format:      VDI
Location:    /home/user/VirtualBox_VMs/WinXp/WinXp.vdi
State:       created
Type:        normal
Usage:       WinXp (UUID: 3e3b5aa6-eccc-5efd-a2c2-3bbb4e71f8ba)
UUID:        d9c6f76b-2db3-4d48-bcc6-e5170414b1fd
Parent UUID: base
Format:      VDI
Location:    /home/user/VirtualBox_VMs/Debian/Debian.vdi
State:       created
Type:        normal
Usage:       Debian (UUID: a634089b-bfa8-4376-83f7-3d54cc2560cb)

проверяем статический образ или нет:

$vboxmanage showhdinfo /home/user/VirtualBox_VMs/WinXp/WinXp.vdi

UUID:                 c8ee2279-a3cc-4ad6-91a7-6846cd4e84e7
Accessible:           yes
Logical size:         15389 MBytes
Current size on disk: 15390 MBytes
Type:                 normal (base)
Storage format:       VDI
Format variant:       fixed default
In use by VMs:        WinXp (UUID: 3e3b5aa6-eccc-5efd-a2c2-3bbb4e71f8ba)
Location:             /home/user/VirtualBox VMs/WinXp/WinXp.vdi


если fixed default - значит статический, что нам и нужно... теперь вычисляем смещение первого раздела на нужном нам образе:

$head -c 348 /home/user/VirtualBox_VMs/WinXp/WinXp.vdi |tail -c 4|perl -ne 'print unpack("L",$_),"/n"'
$69632

или так:

$od -j344 -N4 -td4 /home/user/VirtualBox_VMs/WinXp/WinXp.vdi | awk 'NR==1{print $2;}'
$69632

узнаем все о нашем диске:

$dd if=/home/user/VirtualBox_VMs/WinXp/WinXp.vdi of=vdstart bs=1 skip=69632 count=1b >/dev/null
$/sbin/sfdisk -luS vdstart

Disk vdstart: cannot get geometry

Disk vdstart: 0 cylinders, 255 heads, 63 sectors/track
Units = sectors of 512 bytes, counting from 0

Device Boot    Start       End   #sectors  Id  System
vdstart1   *        63  31487399   31487337   7  HPFS/NTFS/exFAT
vdstart2             0         -          0   0  Empty
vdstart3             0         -          0   0  Empty
vdstart4             0         -          0   0  Empty

информация получена..

удаляем теперь ненужное:

$rm vdstart

теперь можно просто примонтировать и работать с данными:

sudo mount -o loop,offset=$((69632+63*512)) /home/user/VirtualBox_VMs/WinXp/WinXp.vdi /mnt

или делаем устройство для снятие образа или обслуживания:

losetup -o $((69632+63*512)) /dev/loop11 /home/user/VirtualBox_VMs/WinXp/WinXp.vdi

для проверки монтирование:

ntfs-3g /dev/loop11 /mnt

в каталоге /mnt должно появиться содержимое диска...