Монтувати зображення приводу 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.