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

88

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

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

Мэтт Уилки
источник
1
Если ваш файл .vdi, а затем файл .img содержит более 1 раздела, это очень полезно: browse-img-без-
mount

Ответы:

56

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

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

Войтех Трефны
источник
4
Особенно полезно в такой ситуации. ОП сможет работать с копией, сохраняя оригинал в качестве резервной копии.
Хавьер Ривера
7
Будьте осторожны с динамическими файлами .vdi. Преобразование в .img приведет к тому, что файл образа будет иметь такой же большой размер, как и логический размер диска, поэтому этот подход работает, но он может быть намного больше, чем файл .vdi. Посмотрите на вывод, VBoxManage showhdinfo [your vdi file]если вы не уверены.
Джек О'Коннор
1
-1, ответы stwissel и Maxime R. дают решения - это справедливый обходной путь, но не лучший ответ на вопрос
STW
3
Если у образа есть таблица разделов (как и у большинства дисков), вам нужно будет объединить этот ответ с этим, чтобы смонтировать отдельные разделы.
Bain
1
Не работает Продолжайте получать ошибки монтажа неправильный тип фс. Я пробовал ext3 и ext2 и ext4. Виртуальная коробка говорит, что тип hd fs - ext4.
Джошуа Робисон
86

Используйте 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
Максим Р.
источник
Я хотел бы отметить, что это max_part=16кажется важной частью. Без него вы не увидите никаких /dev/nbd0pXфайлов, несмотря на то, что основное устройство будет работать правильно. Проверьте следующее обсуждение на форумах Gentoo, чтобы увидеть, как люди встречали эту проблему.
firegurafiku
Все ответы работают в некоторой степени, но это мой любимый и должен быть принят. clonehd выполняет работу, но удваивает требования к хранилищу. virtualbox-fuse идеален, но, хотя вы все еще можете его получить, он не попал в репозитории в современных выпусках ОС.
Hatoru Hansou
2
Это сработало отлично. Обратите внимание, что установка qemu-kvmвместо qemuможет работать так же хорошо. Это было сделано для меня на моем Ububtu 16.04 и установило только 23 МБ и 13 зависимостей вместо 230 МБ и еще много зависимостей для полной установки qemu.
Mivk
2
Я хотел бы добавить, что, по-видимому, sudo partprobeнужно выполнять с более новыми ядрами, чтобы /dev/nbd0p*они создавались в Debian / Ubuntu ( bugs.debian.org/cgi-bin/bugreport.cgi?bug=824553 ).
Кай
1
Это должен быть принятый ответ !! Мой VDI слишком большой, чтобы преобразовать в .ISO на моем жестком диске. Поработав некоторое время, я прокрутил страницу вниз, чтобы увидеть, не использовали ли другие методы напрямую vdi. Этот прост. (Примечание: qemu занимает около 300 МБ для тех из нас, кто заботится о заполнении нашего жесткого диска.)
psitae
35

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

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

sudo apt-get install virtualbox-fuse

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

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

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

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

sudo mount -o loop /mnt/Parition1 /mountpoint
stwissel
источник
1
@mattwilkie: Разница сейчас: ручная компиляция больше не требуется
stwissel
1
Добро пожаловать. Сидя за пропеллером экран / клавиатура вместо того, чтобы клевать на стекло, все
изменилось
5
Это не доступно в 14.04.
int_ua
2
Можно скачать здесь: sourceforge.net/projects/vdfuse/?source=typ_redirect и он работает (на 15.04)
вечерять
4
Больше не действителен для 16.10, пакет больше не существует.
Писквор
14

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

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

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

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

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

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

йозеф
источник
1
Для справки, в 2016 году это не сработает
Пауло Педросо,
1
Работает в Ubuntu 16.04.
Шарун
это действительно единственное решение, когда вам нужно внести изменения, а затем вернуться к их использованию, не может получить работу с vdfuse
DuBistKomisch
7

Я не проверял себя, но есть модуль предохранителей для их монтажа ( 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
Жоау Пинту
источник
Больше не актуально, так как эта утилита не поддерживается.
Эван Кэрролл
3

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

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

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

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
PHZ.fi-Фаразон
источник
1
Это не ответ на вопрос. У вас была другая проблема - испорченный образ. Вы должны были самостоятельно ответить на новый вопрос.
Эван Кэрролл
Это распространяется на предыдущий ответ, охватывающий случай ошибки. Поврежденное изображение было одним из вариантов использования. +1 за много новых трюков.
FractalSpace