Смонтировать образ диска VirtualBox (vdi)?

Можно ли смонтировать образ диска VirtualBox (.vdi), чтобы содержимое можно было просматривать в Nautilus и т. Д.?

У меня есть windows 2000 .vdi, который не загружается ("недоступное загрузочное устройство") после обновления с VirtualBox 2.x до 3.1.6. Я считаю, что данные IDE-диска изменились, и все, что мне нужно сделать, это получить доступ к образу внутреннего диска и отредактировать Windows boot.ini указать на новое место.

11 ответов

Решение

Вы можете конвертировать в стандартный образ, а затем смонтировать его.

VBoxManage clonehd --format RAW ubuntu.vdi ubuntu.img

затем

mount -t ext3 -o loop,rw ./ubuntu.img /mnt

Вам нужно будет знать тип файловой системы, ext3 в этом случае. После того, как он смонтирован, зайдите и отредактируйте его с помощью редактора по вашему выбору. Не путайте файлы внутри /mnt расположение с работающим хостом, иначе будет плохо.

Чтобы проверить детали вашего файла VDI, запустите: VBoxManage showhdinfo ubuntu.vdi,

Источник: [решено] Открыть.vdi с менеджером архива? - ubuntuforums.org

Использование qemu-nbd, процесс объяснен на serverfault и в этом блоге.

В основном вам придется установить qemu если нужно:

sudo apt-get install qemu

Затем вам нужно загрузить модуль сетевого блочного устройства:

sudo rmmod nbd
sudo modprobe nbd max_part=16

Прикрепите изображение.vdi к одному из созданных вами nbd:

sudo qemu-nbd -c /dev/nbd0 drive.vdi

Теперь вы получите блочное устройство /dev/nbd0, а также несколько узлов устройства /dev/nbd0p*.

sudo mount /dev/nbd0p1 /mnt

Как только вы закончите, размонтируйте все и отключите устройство:

sudo qemu-nbd -d /dev/nbd0

Похоже, vdfuse это инструмент, который вы ищете. Это в репозиториях Ubuntu. Если вы хотите скомпилировать себя (источник 2010 года), вы можете сделать это тоже.

Однако для большинства из нас это сводится к простому:

sudo apt-get install virtualbox-fuse

Кажется, теперь он поддерживает динамический VDI.

И смонтировать .vdi файл в /mnt dir используйте команду:

sudo vdfuse -a -f /path-to-vdi-file /mnt

Весь диск будет смонтирован с разделами Partition1, Partition2 формат именования Затем эти файлы можно смонтировать. Например,

sudo mount -o loop /mnt/Parition1 /mountpoint

Установите диск в качестве вторичного мастера для другой виртуальной ОС, затем загрузитесь в эту (виртуальную) ОС, и вы сможете смонтировать его.

Шаг 1: Предполагая, что у вас уже установлена ​​виртуальная ОС (скажем, Ubuntu 16.04) в Virtual Box, добавьте новое хранилище из настроек этой виртуальной ОС.

Шаг 2: Найдите файл Vdi, к которому вы хотите получить доступ, и выберите его.

Шаг 3: Войдите в виртуальную ОС.

Шаг 4: Виртуальный диск, вероятно, будет доступен внутри ОС. Если нет, выполните шаг 5

Шаг 5: Внутри виртуальной ОС используйте Gparted и проверьте диски. и убедитесь, что диск имеет тип, доступный для виртуальной ОС. Если это не так, возможно, вам придется редактировать диск, но тогда вы потеряете существующее содержимое.

Я не проверял себя, но есть модуль предохранителей для их установки (vdfuse), проверьте следующую страницу:

Обратите внимание, что использовать его для доступа к записи рискованно.


Использование:

$ ./vdfuse-v<version> -h
USAGE: ./vdfuse [options] -f image-file mountpoint
   -h   help
   -r   readonly
   -t   specify type (VDI, VMDK, VHD, or raw; default: auto)
   -f   VDimage file
   -a   allow all users to read disk
   -w   allow all users to read and write to disk
   -g   run in foreground
   -v   verbose
   -d   debug

Чтобы смонтировать изображение напрямую, используя его имя файла:

$ ./vdfuse-v<version> -f image.vdi /mnt/vdi
$ mount -o loop /mnt/vdi/Partition1 /mnt/WindowsXP

Чтобы смонтировать диск компьютера (включая снимки):

$ ./vdautomount-<version> -p /path/to/vdfuse WinXP /mnt/vdi
$ mount -o loop /mnt/vdi/Partition1 /mnt/WindowsXP

Делать VirtualBoxобразы дисков, доступные хосту с помощью утилиты vboximg-mount :

Открыть VDI

      sudo mkdir -p /mnt/vdi/expanded
sudo vboximg-mount -i <path-to-vdi> -o allow_other /mnt/vdi/expanded
Пример вывода
      ls /mnt/vdi/expanded
<filename.vdi>  vhdd  vol0  vol1

Смонтировать диск

      mkdir /mnt/vdi/vol1
sudo mount /mnt/vdi/expanded/vol1 /mnt/vdi/vol1

Размонтировать

      cd /mnt                       # Optional (avoid mount: ... target is busy)
sudo umount /mnt/vdi/vol1     # Order importent
sudo umount /mnt/vdi/expanded
rm -rf /mnt/vdi               # Optional (clean-up resources)

Ты можешь использовать vboximg-mount программа, которая является частью инструментов командной строки VirtualBox.

Как упоминалось выше Войтех Трефны,

1) сначала конвертируй свой VDI -> IMG

VBoxManage clonehd --format RAW ubuntu.vdi ubuntu.img

2) Затем смонтировать IMG

mount -t ext3 -o loop,rw ./ubuntu.img /mnt

3) Однако, как я получил это сообщение об ошибке:

mount: wrong fs type, bad option, bad superblock on /dev/loop0,
       missing codepage or helper program, or other error
       In some cases useful info is found in syslog - try
       dmesg | tail  or so

и dmesg сказал:

[3105578.013671] EXT4-fs (loop0): VFS: Can't find ext3 filesystem

вам нужно проверить структуру разделов.img:

fdisk -l ubuntu.img

Disk ubuntu.img: 21.0 GB, 20971520000 bytes
255 heads, 63 sectors/track, 2549 cylinders, total 40960000 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xf45bc910

   Device Boot      Start         End      Blocks   Id  System
ubuntu.img1   *        2048    12582911     6290432   83  Linux
ubuntu.img2        12584958    16775167     2095105    5  Extended
ubuntu.img3        16775168    40959999    12092416   83  Linux
ubuntu.img5        12584960    16775167     2095104   82  Linux swap / Solaris

4) Как видите, основной раздел начинается с байтов 16775168. Однако обратите внимание, что размер сектора составляет 512 байт, поэтому вам нужно умножить результаты на 16775168 x 512 = 8588886016, поэтому вам необходимо сместить монтирование следующим образом:

mount -t ext3 -o loop,rw,offset=8588886016 ./ubuntu.img /mnt

5) На самом деле это не сработало для меня, если файловая система была грязной после изменения размера. В этом случае я сделал следующее:

dd if=ubuntu.img of=ubuntu.disk bs=512 skip=16775168 count=12092416
e2fsck ubuntu.disk
mount ubuntu.disk /mnt

Не то, что вы просили, но если это просто вопрос извлечения файлов из vdi, и вы хотите очень быстрое решение:

  1. Запустите на своем хосте сервер ssh (apt-get install openssh-server && service ssh restart)
  2. Используйте VirtualBox для создания виртуальной машины из существующего файла vdi, затем загрузите эту виртуальную машину. (Я просто оставил сетевой адаптер по умолчанию (NAT) при создании виртуальной машины.)
  3. В виртуальной машине sftp к вашему хосту. (sftp hostuser@hostip)
  4. В сеансе sftp put столько файлов на хост, сколько вам нужно.

P7Zip откроет файлы VDI

  • Установите P7Zip - Desktop из Ubuntu Software по этой ссылке или запустив:

            sudo snap install p7zip-desktop
    
  • Запустите P7Zip Desktop и перейдите в папку, содержащую .vdiфайл (вероятно, под VirtualBox VMsв вашем домашнем каталоге)

  • Дважды щелкните файл VDI в окне P7Zip.

  • Просмотрите или извлеките файлы, как вам нравится.

В qemuподход из этого ответа необходимо немного изменить для работы в Ubuntu 20.04.1. Сначала мне пришлось загрузитьnbd модуль:

lsmod | grep nbd
modprobe nbd

Это не сработало:

sudo mount /dev/nbd0p1 /mnt

Вместо этого мне нужно было сделать это:

sudo mount /dev/nbd0p2 /mnt
Другие вопросы по тегам