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?
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.
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
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?
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:
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!
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 :)
die Antwort von krosenvold inspirierte das folgende Skript, das Folgendes bewirkt:
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:
#!/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
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.