Ich habe einige Bilder von alten Linux im flachen Dateiformat verteilt, können sie von virtuellen Maschinen verwendet werden, aber ich muss sie mit Sun Virtual Box ausführen. Virtual Box kann keine Bilder in diesem Format verwenden, daher muss ich diese Bilder von einer flachen Datei in ein .vmdk-Dateiformat konvertieren. Gibt es eine Möglichkeit, dies zu tun?Wie konvertiert man ein unformatiertes Raw-Disk-Image in vmdk für virtualbox oder vmplayer?
Antwort
apt-get install qemu
(installiert QEMU auf Debian/Ubuntu)
dann den folgenden Befehl ausführen: qemu-img convert -O vmdk imagefile.dd vmdkname.vmdk
Ich bin eine flache Scheibe Bild unter der Annahme ist eine dd-Stil Bild. Die Konvertierungsoperation verarbeitet auch zahlreiche andere Formate.
Kann es sein, dass ein Disk-Image oder ein Partitions-Image ebenfalls verwendet werden könnte? –
Es ist ausreichend, qemu-utils zu installieren (apt-get install qemu-utils). Diese Lösung funktioniert gut (wenn auch ein wenig langsam ..) – akw
Ich habe ein Bash-Skript erstellt, um den Prozess zu automatisieren - siehe meine Antwort @krosenvold - danke das hat gut funktioniert –
Vielleicht sollten Sie mit Starwind V2V Converter versuchen, können Sie es von hier bekommen - http://www.starwindsoftware.com/converter. Es unterstützt auch IMG-Disk-Format und führt Sektor-für-Sektor-Konvertierung zwischen IMG, VMDK oder VHD in und von jedem von ihnen, ohne Änderungen am Quellbild vorzunehmen. Dieses Werkzeug ist kostenlos :)
Verwenden Sie unter Windows https://github.com/Zapotek/raw2vmdk, um rohe Dateien, die von dd oder winhex erstellt wurden, in vmdk zu konvertieren. raw2vmdk v0.1.3.2 hat einen Fehler - nachdem die vmdk-Datei erstellt wurde, bearbeite die vmdk-Datei und behebe den Pfad zur Rohdatei (in meinem Fall anstelle von D: \ Temp \ flash_16gb.raw (erstellt von winhex)) Pfad war D: Tempflash_16gb.raw). Dann öffne es in einer virtuellen VMware-Maschine Version 6.5-7 (5.1 weigerte sich, die vmdk-Festplatte anzuhängen). howgh!
warum nicht-kommentierte downvote? – xhafan
Da die Frage VirtualBox erwähnt, arbeitet diese zur Zeit:
VBoxManage convertfromraw imagefile.dd vmdkname.vmdk --format VMDK
Run es ohne Argumente für ein paar interessanten Details (vor allem des --variant
flag):
VBoxManage convertfromraw
IMHO ist dies eine sauberere Lösung, da es nur Vbox-Tools benötigt, und Vbox soll schon da sein. –
+1 und VBoxManage kann auch verwendet werden, um den anderen Weg zu konvertieren (virtual-image zu rohen) 'VBoxManage clonehd --format room vmdiskimage.vmdk imagefile.dd' – karmakaze
+1, weil die Verwendung von virtuellen Box-Tools ist es wahrscheinlicher, dass es funktioniert mit virtueller Box (falls es irgendwelche merkwürdigkeiten gibt über die Art, wie es Dinge macht) – MikeKulls
krosenvold Antwort inspirierte den folgenden Skript, das Folgendes tut:
- Holen Sie sich die Dd-Dump über SSH f rom ein Remote-Server (als gz-Datei)
- entpacken Sie die Dump
- wandeln es
das Skript VMWare anlauffähigen und überprüft die Existenz 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 die Schritte unternommen haben:
- 3 Stunden, um eine 47-GByte-Festplatte Dump einer Partition 60 GByte zu bekommen
- 20 Minuten zu einer 60 GByte dd-Datei zu entpacken
- 45 Minuten die 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
für MacOS können Sie apt-get install mit sudo port install ändern und anstelle von qemu-utils benötigen Sie qemu dann ... –
potentiell nützlich zu erstellen: http://en.wikipedia.org/wiki/Physical-to-Virtual – isuldor
Vorsicht bei der Verwendung von '' 'qemu-img''' zum Konvertieren von Bildern zur Verwendung mit VMWare Fusion - Fusion mag keine Festplatten, deren Größe nicht genau dem Megabyte entspricht. Wenn Sie ein solches Bild haben, stellen Sie sicher, dass Sie zuerst die Größe auf das nächste Megabyte ändern und dann in das vmdk-Format konvertieren.Wenn Sie dies nicht tun, wird eine vmdk-Datei erstellt, die zur Installationszeit an eine VM angehängt werden kann. Versuche, sie später zu einer VM hinzuzufügen, führen jedoch dazu, dass die Schaltfläche "Anwenden" nicht funktioniert. – Anon
Danke für diesen Kommentar. Ich hatte Mühe herauszufinden, warum der 'Apply'-Button nicht funktionierte. Ich brauchte ein paar Minuten, um herauszufinden, wie die Dateigröße auf das nächste Megabyte erhöht werden kann. Hier ist, wie ich es gemacht habe. Meine Datei musste um 600 Kilobyte erweitert werden. Dieser Befehl hat die Arbeit "dd if =/dev/zero count = 600 bs = 1k >> image.dd" –