Mounten Sie ein VirtualBox-Laufwerk-Image (VDI)?


88

Ist es möglich, ein VirtualBox-Laufwerk-Image (.vdi) bereitzustellen, damit der Inhalt in Nautilus usw. angezeigt werden kann?

Ich besitze eine Windows 2000-VDI, die nach dem Upgrade von VirtualBox 2.x auf 3.1.6 nicht startet ("nicht zugreifbares Startgerät"). Ich glaube, die Details des IDE-Laufwerks haben sich geändert und alles, was ich tun muss, ist auf das interne Laufwerksabbild zuzugreifen und Windows so boot.inizu bearbeiten , dass es auf den neuen Speicherort verweist.


1
Wenn Ihre .vdi- und dann .img-Datei mehr als eine Partition enthält, ist dies sehr nützlich: browse-img-without-
mount

Antworten:


56

Sie können in ein Standard-Image konvertieren und es dann mounten.

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

Dann

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

ext3In diesem Fall müssen Sie den Typ des Dateisystems kennen . Gehen Sie nach dem Mounten in den Editor Ihrer Wahl und bearbeiten Sie ihn. Verwechseln Sie keine Dateien innerhalb des /mntSpeicherorts mit dem ausgeführten Host, sonst wird es schlecht.

Um zu überprüfen , Details über Ihre VDI - Datei ausführen: VBoxManage showhdinfo ubuntu.vdi.

Quelle: [Gelöst] Open .vdi mit Archiv-Manager? - ubuntuforums.org


4
Besonders nützlich in einer solchen Situation. OP wird in der Lage sein, an der Kopie zu arbeiten und das Original als Backup zu behalten.
Javier Rivera

7
Gehen Sie dabei vorsichtig vor, wenn Sie Dateien mit dynamischer Größe (.vdi) verwenden. Bei der Konvertierung in eine .img-Datei wird die Image-Datei so groß wie die logische Größe des Datenträgers. Aus diesem Grund funktioniert dieser Ansatz, sie ist jedoch möglicherweise viel größer als die .vdi-Datei. Werfen Sie einen Blick auf die Ausgabe von, VBoxManage showhdinfo [your vdi file]wenn Sie sich nicht sicher sind.
Jack O'Connor

1
-1, stwissel und Maxime R. 's Antworten bieten Lösungen - dies ist eine faire Umgehung, aber nicht die beste Antwort auf die Frage
STW

3
Wenn das Image eine Partitionstabelle enthält (wie die meisten Laufwerke), müssen Sie diese Antwort mit dieser kombinieren , um die einzelnen Partitionen bereitzustellen.
Bain

1
Funktioniert nicht Halten Sie Montagefehler falsch fs Typ. Ich habe versucht ext3 und ext2 und ext4. Virtuelle Box sagt, der HD-Fs-Typ ist ext4.
Joshua Robison

86

Verwendung qemu-nbd, der Vorgang wird bei Serverfehler und in diesem Blog erklärt .

Grundsätzlich müssen Sie qemubei Bedarf Folgendes installieren :

sudo apt-get install qemu

Dann müssen Sie das Netzwerkblock-Gerätemodul laden :

sudo rmmod nbd
sudo modprobe nbd max_part=16

Hängen Sie das .vdi-Image an eines der soeben erstellten nbd an:

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

Jetzt erhalten Sie ein / dev / nbd0-Blockgerät sowie mehrere / dev / nbd0p * -Partitionsgeräteknoten.

sudo mount /dev/nbd0p1 /mnt

Wenn Sie fertig sind, hängen Sie alles aus und trennen Sie das Gerät:

sudo qemu-nbd -d /dev/nbd0

Ich möchte darauf hinweisen, dass max_part=16dies ein kritischer Teil zu sein scheint. Ohne sie werden keine /dev/nbd0pXDateien angezeigt, obwohl das Hauptgerät ordnungsgemäß funktioniert. Überprüfen Sie die folgende Diskussion in Gentoo-Foren, um zu sehen, ob Menschen auf dieses Problem gestoßen sind.
firegurafiku

Alle Antworten funktionieren bis zu einem gewissen Grad, aber dies ist mein Favorit und sollte der akzeptierte sein. Clonehd erledigt den Job, verdoppelt aber den Speicherbedarf. virtualbox-fuse ist ideal, aber obwohl Sie es immer noch bekommen können, hat es es nicht zu den Repos in modernen Releases von OS geschafft.
Hatoru Hansou

2
Das hat super funktioniert. Beachten Sie, dass die Installation qemu-kvmanstelle von qemumöglicherweise genauso gut funktioniert. Es funktionierte für mich auf meinem Ububtu 16.04 und installierte nur 23 MB und 13 Abhängigkeiten anstelle von 230 MB und vielen weiteren Abhängigkeiten für die vollständige QEMU-Installation.
Mivk

2
Ich möchte hinzufügen, dass dies anscheinend sudo partprobemit neueren Kerneln ausgeführt werden muss, damit /dev/nbd0p*sie in Debian / Ubuntu erstellt werden ( bugs.debian.org/cgi-bin/bugreport.cgi?bug=824553 ).
Kai

1
Dies sollte die akzeptierte Antwort sein !! Mein VDI ist zu groß, um auf meiner Festplatte in ein ISO-Format zu konvertieren. Nachdem ich eine Weile gekämpft hatte, scrollte ich nach unten, um zu sehen, ob andere Methoden die VDI direkt verwendeten. Dieser ist einfach. (Hinweis: qemu benötigt ungefähr 300 MB für diejenigen von uns, die sich darum kümmern, dass die Festplatte
voll

35

Es sieht aus wie vdfuse ist das Werkzeug , das Sie suchen. Es befindet sich in den Ubuntu-Repositories. Wenn Sie sich selbst kompilieren möchten (Quelle 2010), können Sie dies auch tun .

Für die meisten von uns läuft es jedoch auf eine einfache Sache hinaus:

sudo apt-get install virtualbox-fuse

Es scheint, dass es jetzt auch dynamische VDI unterstützt.

Und um die .vdiDatei in /mntdir zu mounten, benutze den Befehl:

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

Die gesamte Festplatte wird mit Partitionen Partition1im Partition2Namensformat gemountet . Dann können diese Dateien per Loop gemountet werden. Zum Beispiel,

sudo mount -o loop /mnt/Parition1 /mountpoint

1
@mattwilkie: Der Unterschied jetzt: kein manuelles Kompilieren mehr erforderlich
stwissel

1
Bitte schön. Das Sitzen an einem richtigen Bildschirm / einer richtigen Tastatur anstatt auf Glas zu
picken,

5
Es ist nicht verfügbar in 14.04.
int_ua

2
Man kann es von hier herunterladen: sourceforge.net/projects/vdfuse/?source=typ_redirect und es funktioniert (auf 15,04)
sup

4
Nicht mehr gültig für 16.10, Paket existiert nicht mehr.
Piskvor

14

Stellen Sie den Datenträger als sekundären Master für ein anderes virtuelles Betriebssystem ein, starten Sie dieses (virtuelle) Betriebssystem und Sie können es bereitstellen.

Schritt 1: Angenommen, Sie haben bereits ein virtuelles Betriebssystem (z. B. Ubuntu 16.04) in Virtual Box installiert, fügen Sie einen neuen Speicher aus den Einstellungen dieses virtuellen Betriebssystems hinzu. Bildbeschreibung hier eingeben

Schritt 2: Durchsuchen Sie die VDI-Datei, auf die Sie zugreifen möchten, und wählen Sie sie aus.

Schritt 3: Melden Sie sich am virtuellen Betriebssystem an.

Schritt 4: Die virtuelle Festplatte wird wahrscheinlich im Betriebssystem verfügbar sein. Wenn nicht, befolgen Sie Schritt 5

Schritt 5: Verwenden Sie im virtuellen Betriebssystem Gparted und überprüfen Sie die Festplatten. und stellen Sie sicher, dass die Festplatte vom Typ ist, auf den das virtuelle Betriebssystem zugreifen kann. Ist dies nicht der Fall, müssen Sie möglicherweise die Festplatte bearbeiten, verlieren jedoch den vorhandenen Inhalt.


1
Für die Aufzeichnung im Jahr 2016 wird es nicht funktionieren
Paulo Pedroso

1
Es funktioniert in Ubuntu 16.04.
Sharun

Dies ist wirklich die einzige Lösung, wenn Sie Änderungen vornehmen und diese dann wieder verwenden müssen. rw konnte nicht mit vdfuse arbeiten
DuBistKomisch

7

Ich habe mich nicht selbst getestet, aber es gibt ein Sicherungsmodul, um sie zu montieren ( vdfuse), überprüfen Sie die folgende Seite:

Bitte beachten Sie, dass die Verwendung für den Schreibzugriff riskant ist.


Verwendungszweck:

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

So hängen Sie ein Bild direkt mit dem Dateinamen ein:

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

So mounten Sie einen Computerdatenträger (einschließlich Snapshots):

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

Nicht mehr relevant, da dieses Dienstprogramm nicht unterstützt wird.
Evan Carroll

3

Nicht das, was Sie angefordert haben, aber wenn es nur darum geht , Dateien von der VDI zu entfernen , und Sie eine sehr schnelle Lösung suchen :

  1. Führen Sie einen SSH-Server auf Ihrem Host aus ( apt-get install openssh-server && service ssh restart)
  2. Verwenden Sie VirtualBox, um eine virtuelle Maschine aus der vorhandenen VDI-Datei zu erstellen, und starten Sie dann diese virtuelle Maschine. (Ich habe gerade den Standard-Netzwerkadapter (NAT) beim Erstellen der VM beibehalten.)
  3. Senden Sie innerhalb der virtuellen Maschine SFTP an Ihren Host. ( sftp hostuser@hostip)
  4. In der SFTP-Sitzung können Sie putso viele Dateien auf dem Host speichern, wie Sie benötigen.

1
Ein hässlicher Hack, aber wenn Sie in einer schwierigen Situation sind, wird es die Arbeit erledigt.
Piskvor

Ein Problem kann sein, dass der Computer derzeit nicht korrekt bootet, sodass Sie das Problem zuerst beheben müssen und dies bedeutet, dass Sie es nicht von innen heraus tun können. Durch die Verwendung von SSH mit Ihren VirtualBox-Betriebssystemen können Sie auch Dateien kopieren. Viel schneller als der Versuch, eine Festplatte freizugeben.
Alexis Wilke

2

Wie Vojtech Trefny oben erwähnt hat,

1) konvertiere zuerst dein VDI -> IMG

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

2) Montieren Sie dann den IMG

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

3) Als ich diese Fehlermeldung bekam:

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

und dmesg sagte:

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

Sie müssen die Partitionsstruktur der .img auschecken:

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) Wie Sie sehen, beginnt die Hauptpartition mit den Bytes 16775168. Beachten Sie jedoch, dass die Sektorgröße 512 Bytes beträgt. Daher müssen Sie die Ergebnisse mit 16775168 x 512 = 8588886016 multiplizieren, um den Mount wie folgt zu versetzen:

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

5) Eigentlich hat das bei mir nicht geklappt, wenn das Dateisystem nach der Größenänderung verschmutzt war. In diesem Fall habe ich weiter folgendes gemacht:

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

1
Dies ist keine Antwort auf die Frage. Sie hatten ein anderes Problem - ein korruptes Bild. Sie sollten eine neue Frage selbst beantwortet haben.
Evan Carroll

Dies erweitert die vorherige Antwort, die den Fehlerfall abdeckt. Korruptes Bild war ein Anwendungsfall. +1 für viele neue Tricks.
FractalSpace
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.