Монтувати зображення приводу VirtualBox (vdi)?


88

Чи можливо встановити зображення приводу VirtualBox (.vdi), щоб вміст можна було переглянути в Nautilus тощо?

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


1
Якщо ваш файл .vdi, а потім .img містить більше одного розділу, це дуже корисно: перегляньте-img-without-mounting
user2689749

Відповіді:


55

Ви можете конвертувати в стандартне зображення, а потім змонтувати його.

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
Якщо на зображенні є таблиця розділів (як і більшість дисків), вам знадобиться поєднати цю відповідь з цією, щоб змонтувати окремі розділи.
бей

1
Не працює. Продовжуйте отримувати помилки монтажу неправильного типу fs. Я спробував ext3 і ext2 і ext4. У віртуальному вікні вказано, що тип hd fs ext4.
Джошуа Робісон

86

Використання qemu-nbd, процес пояснюється на сервері за замовчуванням і в цьому блозі .

В основному, вам потрібно буде встановити, 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

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), додайте нове сховище з налаштувань цього віртуального ОС. введіть тут опис зображення

Крок 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) під час створення VM.)
  3. У віртуальній машині перейдіть до свого хоста. ( sftp hostuser@hostip)
  4. У сеансі sftp putстільки файлів хосту, скільки вам потрібно.

1
Некрасивий хакер, але якщо ви в тісному місці, це робить роботу.
Пісквор

Одна з проблем може полягати в тому, що машина наразі не завантажується належним чином, тож вам потрібно спочатку виправити цю проблему, а це означає, що ви не можете це зробити зсередини. Також використовувати SSH з вашими операційними програмами virtualbox - це спосіб скопіювати файли навколо. Швидше, ніж намагатися поділитися диском.
Алексіс Вілке

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

1
Це не відповідь на питання. У вас виникла ще одна проблема - зіпсований образ. Ви повинні були самостійно відповісти на нове запитання.
Еван Керролл

Це поширюється на попередню відповідь, що охоплює випадок помилки. Пошкоджене зображення було одним із випадків використання. +1 для багатьох нових хитрощів.
FractalSpace
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.