wake-up-neo.com

Wie konvertiere ich ein Flat-Raw-Image in vmdk für Virtualbox oder vmplayer?

Ich habe einige alte Bilder alter Linux-Dateisysteme im Flat-File-Format. Sie können von Bochs verwendet werden, aber ich muss sie mit Virtual Box ausführen. Virtual Box kann keine Bilder in diesem Format verwenden. Daher muss ich diese Bilder von der flachen Datei in das .vmdk-Dateiformat konvertieren. Gibt es eine Möglichkeit, dies zu tun?

58
okutane

apt-get install qemu (installiert QEMU unter debian/ubuntu)

Führen Sie dann den folgenden Befehl aus: qemu-img convert -O vmdk imagefile.dd vmdkname.vmdk

Ich gehe davon aus, dass ein Flat-Disk-Image ein DD-Style-Image ist. Die Konvertierungsoperation verarbeitet auch zahlreiche andere Formate.

80
krosenvold

Da in der Frage VirtualBox erwähnt wird, funktioniert diese derzeit:

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

Führen Sie es ohne Argumente für einige interessante Details aus (insbesondere das Flag --variant):

VBoxManage convertfromraw
77
Lloeki

Verwenden Sie unter Windows https://github.com/Zapotek/raw2vmdk , um von dd oder winhex erstellte Rohdateien in vmdk zu konvertieren. raw2vmdk v0.1.3.2 hat einen Fehler: Sobald die vmdk-Datei erstellt wurde, bearbeiten Sie die vmdk-Datei und korrigieren Sie den Pfad zur Rohdatei (in meinem Fall anstelle von D:\Temp\flash_16gb.raw (erstellt von winhex) die generierte Datei) Pfad war D: Tempflash_16gb.raw). Öffnen Sie es dann in einer virtuellen VMware-Version 6.5-7 (5.1 weigerte sich, die vmdk-Festplatte anzuschließen). Wie geht's?

6
xhafan

Um TJJ zu beantworten: Aber ist es auch möglich, die gesamte Datei zu kopieren? Also, um irgendwie eine zusätzliche vmdk-Metadatei zu erstellen, die auf das rohe dd-Image verweist.

Ja, es ist möglich. So verwenden Sie ein Flat-Disk-Image in VirtualBox:

Zuerst erstellen Sie mit dd wie üblich ein Bild:

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

Dann können Sie eine Datei für VirtualBox erstellen, die auf dieses Bild verweist:

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

Sie können dieses Image in VirtualBox unverändert verwenden, aber je nach Gastbetriebssystem ist es möglicherweise nicht sofort sichtbar. Ich experimentierte beispielsweise mit dieser Methode mit einem Windows-Gastbetriebssystem, und ich musste Folgendes tun, um einen Laufwerksbuchstaben zu geben:

  • Gehen Sie zur Systemsteuerung.
  • Gehen Sie zu Verwaltung.
  • Wechseln Sie zu Computerverwaltung.
  • Wechseln Sie im linken Bereich zu Storage\Disk Management.
  • Sie sehen Ihre Festplatte hier. Erstellen Sie eine Partition und formatieren Sie sie. Verwenden Sie FAT für kleine Volumes, FAT32 oder NTFS für große Volumes.

Möglicherweise möchten Sie unter Linux auf Ihre Dateien zugreifen. Trennen Sie es zuerst vom Gastbetriebssystem, um sicherzugehen, und entfernen Sie es von der virtuellen Maschine. Jetzt müssen wir ein virtuelles Gerät erstellen, das auf die Partition verweist.

sfdisk -d usbdrv.img

Antwort:

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

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

Beachten Sie die Startposition der Partition: 63. Im folgenden Befehl habe ich loop4 verwendet, weil es in meinem Fall das erste verfügbare Loop-Gerät war.

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

Antwort:

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

Yay!

3
Anonymous

Vielleicht sollten Sie Starwind V2V Converter verwenden. Sie können ihn hier herunterladen - http://www.starwindsoftware.com/converter . Es unterstützt auch das IMG-Plattenformat und führt eine Sektor-für-Sektor-Konvertierung zwischen IMG, VMDK oder VHD in und aus einem beliebigen von ihnen durch, ohne Änderungen am Quellabbild vorzunehmen. Dieses Tool ist kostenlos :)

1
Paul Svirin

die Antwort von krosenvold inspirierte das folgende Skript, das Folgendes bewirkt:

  • dd-dump via ssh von einem fernen server erhalten (als gz-datei)
  • Öffne das Dump
  • konvertiere es in vmware

das Skript kann neu gestartet werden und überprüft das Vorhandensein der Zwischendateien. Es verwendet auch pv und qemu-img -p, um den Fortschritt jedes Schrittes anzuzeigen. 

In meiner Umgebung 2 x Ubuntu 12.04 LTS wurden folgende Schritte unternommen:

  • 3 Stunden, um einen 47-GByte-Datenträgerauszug einer 60-GByte-Partition zu erhalten 
  • 20 Minuten zum Entpacken in eine 60 GByte dd-Datei
  • 45 Minuten zum Erstellen der VMware-Datei
#!/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

Um Ihnen eine weitere Option zu geben, können Sie auch https://sourceforge.net/projects/dd2vmdk/ verwenden. dd2vmdk ist ein * nix-basiertes Programm, mit dem Sie Raw-Disk-Images (erstellt von dd, dcfldd, dc3dd, ftk imager usw.) mounten können, indem Sie das Roh-Image nehmen, den Master-Boot-Datensatz (physischer Sektor 0) analysieren und spezifisch werden Informationen, die zum Erstellen einer vmdk-Datei erforderlich sind. 

Persönlich sind imo Qemu und die raw2vmdk-Tools von Zapotek die besten Gesamtoptionen für die Konvertierung von dd in vmdks.

Offenlegung: Ich bin der Autor dieses Projekts.

0
labgeek