web-dev-qa-db-fra.com

Comment convertir une image disque brute et plate en vmdk pour virtualbox ou vmplayer?

J'ai d'anciennes images d'anciens systèmes de fichiers Linux au format de fichier plat. ils peuvent être utilisés par Bochs , mais je dois les exécuter avec Virtual Box . Virtual Box ne peut pas utiliser les images dans ce format, je dois donc convertir ces images d'un fichier à plat au format de fichier .vmdk. Y a-t-il un moyen de faire ça?

58
okutane

apt-get install qemu (installe QEMU sur debian/ubuntu)

Ensuite, exécutez la commande suivante: qemu-img convert -O vmdk imagefile.dd vmdkname.vmdk

Je suppose qu'une image de disque plat est une image de style DD. L'opération de conversion gère également de nombreux autres formats.

80
krosenvold

Puisque la question mentionne VirtualBox, celle-ci fonctionne actuellement:

VBoxManage convertfromraw imagefile.dd vmdkname.vmdk --format VMDK

Exécutez-le sans arguments pour quelques détails intéressants (notamment l'indicateur --variant):

VBoxManage convertfromraw
77
Lloeki

Sous Windows, utilisez https://github.com/Zapotek/raw2vmdk pour convertir les fichiers bruts créés par dd ou winhex en vmdk. raw2vmdk v0.1.3.2 a un bogue - une fois le fichier vmdk créé, modifiez-le et fixez le chemin d'accès au fichier brut (dans mon cas, à la place de D:\Temp\flash_16gb.raw (créé par winhex) le chemin était D: Tempflash_16gb.raw). Ensuite, ouvrez-le dans une machine virtuelle vmware version 6.5-7 (5.1 refusant de connecter le disque dur vmdk). bof!

6
xhafan

Pour répondre à TJJ: Mais est-il également possible de le faire sans copier le fichier entier? Donc, juste pour créer en quelque sorte un vmdk-metafile supplémentaire, qui référence l’image brute.

Oui, c'est possible. Voici comment utiliser une image de disque plat dans VirtualBox:

Commencez par créer une image avec dd de la manière habituelle:

dd bs=512 count=60000 if=/dev/zero of=usbdrv.img

Ensuite, vous pouvez créer un fichier pour VirtualBox qui référence cette image:

VBoxManage internalcommands createrawvmdk -filename "usbdrv.vmdk" -rawdisk "usbdrv.img"

Vous pouvez utiliser cette image dans VirtualBox telle quelle, mais selon le système d'exploitation invité, il est possible qu'elle ne soit pas visible immédiatement. Par exemple, j'ai essayé d'utiliser cette méthode avec un système d'exploitation invité Windows et je devais procéder comme suit pour lui attribuer une lettre de lecteur:

  • Allez dans le panneau de configuration.
  • Aller aux outils d'administration.
  • Aller à la gestion de l'ordinateur.
  • Accédez à Stockage\Gestion des disques dans le panneau de gauche.
  • Vous verrez votre disque ici. Créez une partition dessus et formatez-la. Utilisez FAT pour les petits volumes, FAT32 ou NTFS pour les gros volumes.

Vous voudrez peut-être accéder à vos fichiers sous Linux. Commencez par le démonter de l'OS invité pour en être sûr et supprimez-le de la machine virtuelle. Nous devons maintenant créer un périphérique virtuel qui référence la partition.

sfdisk -d usbdrv.img

Réponse:

label: dos
label-id: 0xd367a714
device: usbdrv.img
unit: sectors

usbdrv.img1 : start=          63, size=       48132, type=4

Prenez note de la position de départ de la partition: 63. Dans la commande ci-dessous, j'ai utilisé loop4 car il s'agissait du premier périphérique de boucle disponible dans mon cas.

Sudo losetup -o $((63*512)) loop4 usbdrv.img
mkdir usbdrv
Sudo mount /dev/loop4 usbdrv
ls usbdrv -l

Réponse:

total 0
-rwxr-xr-x. 1 root root 0 Apr  5 17:13 'Test file.txt'

Yay!

3
Anonymous

Peut-être devriez-vous essayer d'utiliser Starwind V2V Converter, vous pouvez l'obtenir à partir d'ici - http://www.starwindsoftware.com/converter . Il prend également en charge le format de disque IMG et effectue une conversion secteur par secteur entre IMG, VMDK ou VHD vers et depuis n’importe lequel d’entre eux sans apporter de modification à l’image source. Cet outil est gratuit :)

1
Paul Svirin

la réponse de krosenvold a inspiré le script suivant qui fait ce qui suit:

  • récupère le dd dump via ssh depuis un serveur distant (sous forme de fichier gz)
  • décompressez le dépotoir
  • convertissez-le en vmware

le script peut être redémarré et vérifie l'existence des fichiers intermédiaires. Il utilise également pv et qemu-img -p pour afficher la progression de chaque étape. 

Dans mon environnement 2 x Ubuntu 12.04 LTS, les étapes ont été les suivantes:

  • 3 heures pour obtenir un dump de disque de 47 Go d'une partition de 60 Go 
  • 20 minutes pour décompresser dans un fichier dd de 60 Go
  • 45 minutes pour créer le fichier vmware
#!/bin/bash
# get a dd disk dump and convert it to vmware
#  see http://stackoverflow.com/questions/454899/how-to-convert-flat-raw-disk-image-to-vmdk-for-virtualbox-or-vmplayer
#  Author: wf  2014-10-1919

#
# get a dd dump from the given Host's given disk and create a compressed
#   image at the given target 
#
#  1: Host e.g. somehost.somedomain
#  2: disk e.g. sda
#  3: target e.g. image.gz
#
# http://unix.stackexchange.com/questions/132797/how-to-use-ssh-to-make-a-dd-copy-of-disk-a-from-Host-b-and-save-on-disk-b
getdump() {
  local l_Host="$1"
  local l_disk="$2"
  local l_target="$3"
  echo "getting disk dump of $l_disk from $l_Host"
  ssh $l_Host Sudo fdisk -l  | egrep "^/dev/$l_disk"
  if [ $? -ne 0 ]
  then
    echo "device $l_disk does not exist on Host $l_Host" 1>&2
    exit 1
  else
    if [ ! -f $l_target ]
    then
      ssh $l_Host "Sudo dd if=/dev/$disk bs=1M | gzip -1 -" | pv | dd of=$l_target
    else
      echo "$l_target already exists"
    fi
  fi
}

#
# optionally install command from package if it is not available yet
# 1: command
# 2: package
#
opt_install() {
  l_command="$1"
  l_package="$2"
  echo "checking that $l_command from package $l_package  is installed ..."
  which $l_command
  if [ $? -ne 0 ]
  then
    echo "installing $l_package to make $l_command available ..."
    Sudo apt-get install $l_package 
  fi
}

#
# convert the given image to vmware
#  1: the dd dump image
#  2: the vmware image file to convert to
#
vmware_convert() {
  local l_ddimage="$1"
  local l_vmwareimage="$2"
  echo "converting dd image $l_image to vmware $l_vmwareimage"
  #  convert to VMware disk format showing progess
  # see http://manpages.ubuntu.com/manpages/precise/man1/qemu-img.1.html
  qemu-img convert -p -O vmdk "$l_ddimage" "$l_vmwareimage"
}

#
# show usage
#
usage() {
  echo "usage: $0 Host device"
  echo "      Host: the Host to get the disk dump from e.g. frodo.lotr.org"  
  echo "            you need ssh and Sudo privileges on that Host"
  echo "
  echo "    device: the disk to dump from e.g. sda"
  echo ""
  echo "  examples:
  echo "       $0 frodo.lotr.org sda"
  echo "       $0 gandalf.lotr.org sdb"
  echo ""
  echo "  the needed packages pv and qemu-utils will be installed if not available"
  echo "  you need local Sudo rights for this to work"
  exit 1
}

# check arguments
if [ $# -lt 2 ]
then
  usage
fi

# get the command line parameters
Host="$1"
disk="$2"

# calculate the names of the image files
ts=`date "+%Y-%m-%d"`
# prefix of all images
#   .gz the zipped dd
#   .dd the disk dump file
#   .vmware - the vmware disk file
image="${Host}_${disk}_image_$ts"

echo "$0 $Host/$disk ->  $image"

# first check/install necessary packages
opt_install qemu-img qemu-utils
opt_install pv pv

# check if dd files was already loaded
#  we don't want to start this tedious process twice if avoidable
if [ ! -f $image.gz ]
then
  getdump $Host $disk $image.gz
else
  echo "$image.gz already downloaded"
fi

# check if the dd file was already uncompressed
# we don't want to start this tedious process twice if avoidable
if [ ! -f $image.dd ]
then
  echo "uncompressing $image.gz"
  zcat $image.gz | pv -cN zcat > $image.dd
else
  echo "image $image.dd already uncompressed"
fi
# check if the vmdk file was already converted
# we don't want to start this tedious process twice if avoidable
if [ ! -f $image.vmdk ]
then
  vmware_convert $image.dd $image.vmdk
else
  echo "vmware image $image.vmdk already converted"
fi
1
Wolfgang Fahl

Juste pour vous donner une autre option, vous pouvez aussi utiliser https://sourceforge.net/projects/dd2vmdk/ . dd2vmdk est un programme basé sur * nix qui vous permet de monter des images disque brutes (créées par dd, dcfldd, dc3dd, imageur ftk, etc.) en prenant l’image brute, en analysant l’enregistrement de démarrage principal (secteur physique 0) et en obtenant des informations nécessaires pour créer un fichier vmdk. 

Personnellement, les outils imo Qemu et raw2vmdk de Zapotek sont les meilleures options globales pour convertir dd en vmdks.

Divulgation: Je suis l'auteur de ce projet.

0
labgeek