Montare un'immagine dell'unità VirtualBox (vdi)?


88

È possibile montare un'immagine dell'unità VirtualBox (.vdi) in modo che i contenuti possano essere visualizzati in Nautilus ecc.?

Ho un Windows 2000 .vdi che non si avvia ("dispositivo di avvio inaccessibile") dopo l'aggiornamento da VirtualBox 2.xa 3.1.6. Credo che i dettagli dell'unità IDE siano cambiati e che tutto ciò che devo fare è accedere all'immagine dell'unità interna e modificare Windows boot.iniper puntare alla nuova posizione.


1
Se il tuo file .vdi e poi .img contiene più di 1 partizione, questo è molto utile: sfogliare-img-senza-montaggio
user2689749

Risposte:


56

È possibile convertire in un'immagine standard e quindi montarla.

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

Poi

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

In ext3questo caso dovrai conoscere il tipo di file system . Dopo che è stato montato, entra e modifica con l'editor di tua scelta. Non confondere i file all'interno della /mntposizione con l'host in esecuzione, altrimenti sarà danneggiato.

Per verificare i dettagli circa il file VDI, eseguire: VBoxManage showhdinfo ubuntu.vdi.

Fonte: [RISOLTO] Aprire .vdi con il gestore dell'archivio? - ubuntuforums.org


4
Utilmente utile in una situazione come questa. OP sarà in grado di lavorare sulla copia mantenendo l'originale come backup.
Javier Rivera,

7
Attento a farlo con file .vdi di dimensioni dinamiche. La conversione in .img costringe il file di immagine ad essere grande quanto la dimensione logica del disco, motivo per cui questo approccio funziona, ma potrebbe essere molto più grande del file .vdi. Dai un'occhiata all'output di VBoxManage showhdinfo [your vdi file]se non sei sicuro.
Jack O'Connor,

1
-1, le risposte di stwissel e Maxime R. forniscono soluzioni - questa è una soluzione equa, ma non la migliore risposta alla domanda
STW

3
Se l'immagine ha una tabella delle partizioni (come la maggior parte delle unità), dovrai combinare questa risposta con questa per montare le singole partizioni.
Guadagna il

1
Non funziona Continuare a ricevere errori di montaggio di tipo fs sbagliato. Ho provato ext3 ed ext2 ed ext4. La scatola virtuale dice che il tipo di hd fs è ext4.
Joshua Robison,

86

Usa qemu-nbd, il processo è spiegato su serverfault e in questo blog .

Fondamentalmente, dovrai installare qemuse necessario:

sudo apt-get install qemu

Quindi dovrai caricare il modulo del dispositivo di blocco di rete :

sudo rmmod nbd
sudo modprobe nbd max_part=16

Allega l'immagine .vdi a uno degli nbd appena creati:

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

Ora otterrai un dispositivo a blocchi / dev / nbd0, insieme a diversi nodi del dispositivo di partizione / dev / nbd0p *.

sudo mount /dev/nbd0p1 /mnt

Al termine, smonta tutto e disconnetti il ​​dispositivo:

sudo qemu-nbd -d /dev/nbd0

Vorrei sottolineare che max_part=16sembra essere una parte critica. Senza di essa non vedrai alcun /dev/nbd0pXfile, nonostante il dispositivo principale funzionerà correttamente. Controlla la seguente discussione sui forum di Gentoo per vedere le persone che hanno incontrato questo problema.
firegurafiku,

Tutte le risposte funzionano in una certa misura, ma questa è la mia preferita e dovrebbe essere accettata. clonehd fa il lavoro ma raddoppia i requisiti di archiviazione. virtualbox-fuse è l'ideale ma, sebbene sia ancora possibile ottenerlo, non è arrivato ai repository nelle versioni moderne del sistema operativo.
Hatoru Hansou,

2
Questo ha funzionato alla grande. Si noti che l'installazione qemu-kvminvece di qemupotrebbe funzionare altrettanto bene. Lo ha fatto sul mio Ububtu 16.04 e ha installato solo 23 MB e 13 dipendenze invece di 230 MB e molte altre dipendenze per l'installazione completa di qemu.
mivk

2
Vorrei aggiungere che apparentemente sudo partprobedeve essere eseguito con kernel più recenti in modo che /dev/nbd0p*vengano creati in Debian / Ubuntu ( bugs.debian.org/cgi-bin/bugreport.cgi?bug=824553 ).
Kai,

1
Questa dovrebbe essere la risposta accettata !! Il mio vdi è troppo grande per essere convertito in un .iso sul mio disco rigido. Dopo aver lottato per un po ', ho scorrere verso il basso per vedere se altri metodi utilizzavano direttamente il VDI. Questo è semplice. (Nota: qemu richiede circa 300 MB per quelli di noi che si preoccupano del riempimento del disco rigido.)
psitae

35

Sembra che vdfuse sia lo strumento che stai cercando. È nei repository Ubuntu. Se vuoi compilare te stesso (fonte 2010) puoi farlo anche tu .

Tuttavia per la maggior parte di noi si riduce a un semplice:

sudo apt-get install virtualbox-fuse

Sembra che ora supporti anche il Vdi dinamico.

E per montare il .vdifile in /mntdir usa il comando:

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

L'intero disco verrà montato con partizioni Partition1, Partition2formato di denominazione. Quindi quei file possono essere montati in loop. Per esempio,

sudo mount -o loop /mnt/Parition1 /mountpoint

1
@mattwilkie: La differenza adesso: non è più necessaria la compilazione manuale
stwissel

1
Prego. Sedersi su uno schermo / tastiera di un propper invece di beccare glas ha fatto la differenza :-)
stwissel

5
Non è disponibile in 14.04.
int_ua,

2
Puoi scaricarlo da qui: sourceforge.net/projects/vdfuse/?source=typ_redirect e funziona (il 15.04)
sup

4
Non più valido per il 16.10, il pacchetto non esiste più.
Piskvor,

14

Imposta il disco come master secondario per un altro sistema operativo virtuale, quindi esegui l'avvio in questo sistema operativo (virtuale) e potrai montarlo.

Passo 1: Supponendo che tu abbia un sistema operativo virtuale (ad esempio Ubuntu 16.04) già installato nella casella virtuale, aggiungi un nuovo spazio di archiviazione dalle impostazioni di quel sistema operativo virtuale. inserisci qui la descrizione dell'immagine

Passaggio 2: sfoglia il file Vdi a cui desideri accedere e selezionalo.

Passaggio 3: accedere al sistema operativo virtuale.

Passaggio 4: il disco virtuale sarà probabilmente disponibile all'interno del sistema operativo. In caso contrario, seguire il passaggio 5

Passaggio 5: all'interno del sistema operativo virtuale, utilizzare Gparted e controllare i dischi. e assicurarsi che il disco sia di tipo accessibile dal sistema operativo virtuale. In caso contrario, potrebbe essere necessario modificare il disco, ma si perderanno i contenuti esistenti.


1
Per la cronaca, nel 2016 non funzionerà
Paulo Pedroso,

1
Funziona in Ubuntu 16.04.
Sharun,

questa è davvero l'unica soluzione quando è necessario apportare modifiche e poi tornare a usarla, non è possibile far funzionare rw con vdfuse
DuBistKomisch

7

Non mi sono testato ma c'è un modulo fusibile per montarli ( vdfuse), controlla la pagina seguente:

Si noti che l'utilizzo per l'accesso in scrittura è rischioso.


Uso:

$ ./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

Per montare un'immagine direttamente usando il suo nome file:

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

Per montare un disco macchina (comprese le istantanee):

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

Non più pertinente in quanto questa utility non è supportata.
Evan Carroll,

3

Non è quello che hai richiesto, ma se si tratta solo di rimuovere i file dal VDI e vuoi una soluzione molto rapida :

  1. Esegui un server SSH sul tuo host ( apt-get install openssh-server && service ssh restart)
  2. Utilizzare VirtualBox per creare una macchina virtuale dal file vdi esistente, quindi avviare quella macchina virtuale. (Ho appena mantenuto la scheda di rete (NAT) predefinita durante la creazione della VM.)
  3. All'interno della macchina virtuale, sftp sul tuo host. ( sftp hostuser@hostip)
  4. Nella sessione sftp, puttutti i file per l'host di cui hai bisogno.

1
Un brutto trucco, ma se sei in difficoltà, fa il lavoro.
Piskvor,

Un problema potrebbe essere che al momento la macchina non si avvia correttamente, quindi dovresti prima risolvere il problema e ciò significa che non puoi farlo dall'interno. Anche l'uso di SSH con i sistemi operativi virtualbox è il modo migliore per copiare i file. Molto più veloce del tentativo di condividere un disco.
Alexis Wilke,

2

Come menzionato sopra Vojtech Trefny,

1) prima converti il ​​tuo VDI -> IMG

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

2) Quindi montare l'IMG

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

3) Tuttavia, come ho ricevuto questo messaggio di errore:

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

e dmesg ha detto:

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

devi controllare la struttura delle partizioni di .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) Come puoi vedere, la partizione principale inizia a 16775168 byte. Tuttavia, tieni presente che la dimensione del settore è di 512 byte, quindi devi moltiplicare i risultati 16775168 x 512 = 8588886016, quindi devi compensare il montaggio in questo modo:

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

5) In realtà questo non ha funzionato per me nel caso in cui il filesystem fosse sporco dopo il ridimensionamento. In questo caso ho ulteriormente fatto questo:

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

1
Questa non è una risposta alla domanda. Hai avuto un altro problema: un'immagine corrotta. Avresti dovuto rispondere da solo a una nuova domanda.
Evan Carroll,

Questo si espande alla risposta precedente relativa al caso di errore. L'immagine corrotta era un caso d'uso. +1 per molti nuovi trucchi.
FractalSpace il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.