Monter une image de lecteur VirtualBox (vdi)?

88

Est-il possible de monter une image de lecteur VirtualBox (.vdi) afin que le contenu puisse être visualisé dans Nautilus, etc.?

J'ai un Windows 2000 .vdi qui ne démarre pas ("périphérique d'amorçage inaccessible") après la mise à niveau de VirtualBox 2.x à 3.1.6. Je pense que les détails du lecteur IDE ont changé et que tout ce que j'ai à faire est d'accéder à l'image du lecteur interne et de modifier Windows boot.inipour qu'il pointe vers le nouvel emplacement.

Matt Wilkie
la source
1
Si votre fichier .vdi puis .img contient plus d'une partition, ceci est très utile: browse-img-without-
mount

Réponses:

56

Vous pouvez convertir en image standard et ensuite le monter.

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

ensuite

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

Vous devrez CONNAÎTRE le type de système de fichiers, ext3dans ce cas. Une fois celui-ci monté, entrez-y et éditez-le avec l'éditeur de votre choix. Ne confondez pas les fichiers de l’ /mntemplacement avec l’hôte en cours d’exécution, sinon ce sera mauvais.

Pour vérifier les détails au sujet de votre fichier VDI, exécutez: VBoxManage showhdinfo ubuntu.vdi.

Source: [RESOLU] Ouvrir .vdi avec le gestionnaire d'archives? - ubuntuforums.org

Vojtech Trefny
la source
4
Spécifiquement utile dans une situation comme celle-ci. OP pourra travailler sur la copie en conservant l’original comme sauvegarde.
Javier Rivera
7
Faites-le avec précaution avec des fichiers .vdi de taille dynamique. La conversion en .img obligera le fichier image à atteindre la taille logique du disque. C’est pourquoi cette approche fonctionne, mais elle est peut-être beaucoup plus volumineuse que le fichier .vdi. Jetez un oeil à la sortie de VBoxManage showhdinfo [your vdi file]si vous n'êtes pas sûr.
Jack O'Connor
1
-1, les réponses de stwissel et de Maxime R. apportent des solutions. Il s'agit d'une solution de contournement juste, mais qui ne constitue pas la meilleure réponse à la question
STW
3
Si l'image comporte une table de partitions (comme la plupart des lecteurs), vous devrez combiner cette réponse à celle-ci pour monter les partitions individuelles.
bain
1
Ça ne marche pas Continuez à avoir des erreurs de montage avec un type de fs incorrect. J'ai essayé ext3 et ext2 et ext4. La boîte virtuelle indique que le type de fichier hd est ext4.
Joshua Robison
86

Utilisez qemu-nbd, le processus est expliqué sur serverfault et dans ce blog .

Fondamentalement, vous devrez installer qemusi nécessaire:

sudo apt-get install qemu

Ensuite, vous devrez charger le module de périphérique de bloc réseau :

sudo rmmod nbd
sudo modprobe nbd max_part=16

Associez l'image .vdi à l'un des nbd que vous venez de créer:

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

Vous obtiendrez maintenant un périphérique de bloc / dev / nbd0, ainsi que plusieurs nœuds de périphérique de partition / dev / nbd0p *.

sudo mount /dev/nbd0p1 /mnt

Une fois que vous avez terminé, démontez tout et débranchez le périphérique:

sudo qemu-nbd -d /dev/nbd0
Maxime R.
la source
Je tiens à noter que cela max_part=16semble être une partie critique. Sans cela, vous ne verrez aucun /dev/nbd0pXfichier, même si l'appareil principal fonctionnera correctement. Consultez la discussion suivante sur les forums Gentoo pour voir les personnes rencontrant ce problème.
firegurafiku
Toutes les réponses fonctionnent dans une certaine mesure mais ceci est mon préféré et devrait être celui accepté. clonehd fait le travail mais double les besoins en stockage. virtualbox-fuse est idéal, mais bien que vous puissiez toujours l'obtenir, il n'a pas pu être mis en pension dans les versions modernes d'OS.
Hatoru Hansou
2
Cela a très bien fonctionné. Notez que l'installation à la qemu-kvmplace de qemupeut fonctionner aussi bien. Cela a fonctionné pour moi sur mon Ububtu 16.04 et n’a installé que 23 Mo et 13 dépendances au lieu de 230 Mo et de nombreuses autres dépendances pour l’installation complète de Qemu.
mardi
2
J'aimerais ajouter qu'apparemment, il sudo partprobedoit être exécuté avec de nouveaux noyaux, qui /dev/nbd0p*sont donc créés dans Debian / Ubuntu ( bugs.debian.org/cgi-bin/bugreport.cgi?bug=824553 ).
Kai
1
Cela devrait être la réponse acceptée !! Mon vdi est trop gros pour être converti en .iso sur mon disque dur. Après avoir lutté pendant un moment, j'ai fait défiler l'écran vers le bas pour voir si d'autres méthodes utilisaient directement le vdi. Celui-ci est simple. (Remarque: qemu nécessite environ 300 Mo pour ceux d'entre nous qui se soucient de la saturation de notre disque dur.)
psitae
35

Il semble que vdfuse soit l'outil que vous recherchez. C'est dans les dépôts Ubuntu. Si vous voulez vous compiler (source 2010), vous pouvez le faire aussi .

Cependant, pour la plupart d'entre nous, cela se résume à un simple:

sudo apt-get install virtualbox-fuse

Il semble qu’il supporte maintenant le vdi dynamique également.

Et pour monter le .vdifichier dans /mntdir, utilisez la commande:

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

Le disque entier sera monté avec des partitions Partition1, en Partition2nommant le format. Ensuite, ces fichiers peuvent être montés en boucle. Par exemple,

sudo mount -o loop /mnt/Parition1 /mountpoint
Stwissel
la source
1
@mattwilkie: La différence maintenant: plus besoin de compiler manuellement
stwissel
1
Je vous en prie. S'asseoir devant un écran / clavier correct au lieu de picorer du verre a fait toute la différence:
)
5
Ce n'est pas disponible dans 14.04.
Int_ua
2
On peut le télécharger ici: sourceforge.net/projects/vdfuse/?source=typ_redirect et ça marche (le 15.04)
sup
4
N'est plus valable pour 16.10, le package n'existe plus.
Piskvor
14

Définissez le disque en tant que maître secondaire pour un autre système d'exploitation virtuel, puis démarrez-le dans ce système d'exploitation (virtuel) et vous pourrez le monter.

Étape 1: En supposant que votre système d’exploitation virtuel (par exemple Ubuntu 16.04) soit déjà installé dans Virtual Box, ajoutez un nouveau stockage à partir des paramètres de ce système virtuel. entrez la description de l'image ici

Étape 2: Parcourez le fichier Vdi auquel vous souhaitez accéder et sélectionnez-le.

Étape 3: connexion au système d'exploitation virtuel.

Étape 4: Le disque virtuel sera probablement disponible dans le système d'exploitation. Sinon, suivez l'étape 5

Étape 5: À l’intérieur du système d’exploitation virtuel, utilisez Gparted et vérifiez les disques. et assurez-vous que le disque est d'un type accessible par le système d'exploitation virtuel. Si ce n'est pas le cas, vous devrez peut-être éditer le disque, mais vous perdrez alors le contenu existant.

josef
la source
1
Pour mémoire, en 2016 ça ne marchera pas
Paulo Pedroso
1
Cela fonctionne dans Ubuntu 16.04.
Sharun
c’est vraiment la seule solution lorsque vous devez apporter des modifications, puis revenir à l’utiliser, impossible de faire fonctionner rw avec vdfuse
DuBistKomisch
7

Je ne me suis pas testé mais il existe un module de fusible pour les monter ( vdfuse), consultez la page suivante:

Veuillez noter que l’utiliser pour un accès en écriture est risqué.


Usage:

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

Pour monter une image directement à l'aide de son nom de fichier:

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

Pour monter un disque de machine (y compris les instantanés):

$ ./vdautomount-<version> -p /path/to/vdfuse WinXP /mnt/vdi
$ mount -o loop /mnt/vdi/Partition1 /mnt/WindowsXP
João Pinto
la source
N'est plus pertinent car cet utilitaire n'est pas supporté.
Evan Carroll
3

Ce n’est pas ce que vous avez demandé, mais s’il s’agit simplement d’ obtenir des fichiers du vdi et que vous souhaitez une solution très rapide :

  1. Exécuter un serveur ssh sur votre hôte ( apt-get install openssh-server && service ssh restart)
  2. Utilisez VirtualBox pour créer une machine virtuelle à partir du fichier vdi existant, puis démarrez cette machine virtuelle. (Je viens de conserver la carte réseau par défaut lors de la construction de la machine virtuelle.)
  3. Dans la machine virtuelle, envoyez le sftp à votre hôte. ( sftp hostuser@hostip)
  4. Dans la session sftp, putautant de fichiers sur l'hôte dont vous avez besoin.
JellicleCat
la source
1
Un bidule moche, mais si vous êtes dans une impasse, le travail est fait.
Piskvor
L’un des problèmes est peut-être que la machine ne démarre pas correctement, vous devez donc régler ce problème en premier lieu. Cela signifie que vous ne pouvez pas le faire de l’intérieur. Utiliser également SSH avec les systèmes d’exploitation de votre virtualbox est la meilleure façon de copier des fichiers. Bien plus rapide que d'essayer de partager un disque.
Alexis Wilke
2

Vojtech Trefny mentionné ci-dessus,

1) convertissez d'abord votre VDI -> IMG

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

2) Puis montez l'IMG

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

3) Cependant, comme j'ai eu ce message d'erreur:

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

et dmesg dit:

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

vous devez vérifier la structure de partition du .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) Comme vous pouvez le constater, la partition principale commence par les octets 16775168. Toutefois, notez que la taille du secteur est de 512 octets. Vous devez donc multiplier les résultats par 16775168 x 512 = 8588886016. Vous devez donc décaler le montage de la manière suivante:

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

5) En fait, cela ne fonctionnait pas dans le cas où le système de fichiers était sale après le redimensionnement. Dans ce cas, j'ai également fait ceci:

dd if=ubuntu.img of=ubuntu.disk bs=512 skip=16775168 count=12092416
e2fsck ubuntu.disk
mount ubuntu.disk /mnt
PHZ.fi-Pharazon
la source
1
Ce n'est pas une réponse à la question. Vous avez eu un autre problème - une image corrompue. Vous devriez avoir répondu à une nouvelle question.
Evan Carroll
Cela s'étend à la réponse précédente couvrant le cas d'erreur. L'image corrompue était un cas d'utilisation. +1 pour de nombreuses nouvelles astuces.
FractalSpace