Tengo algunas imágenes de Linux distribuido en formato de archivo plano, pueden ser usadas por máquinas virtuales bochs, pero necesito ejecutarlas con Sun Virtual Box. Virtual Box no puede usar imágenes en este formato, por lo que necesito convertir estas imágenes de un archivo plano a formato de archivo .vmdk. ¿Hay alguna manera de hacer esto?Cómo convertir imágenes planas de discos en vmdk para virtuales o vmplayer?
Respuesta
apt-get install qemu
(QEMU instala en Debian/Ubuntu)
A continuación, ejecute el siguiente comando: qemu-img convert -O vmdk imagefile.dd vmdkname.vmdk
Estoy asumiendo una imagen de disco plano es una imagen de estilo dd. La operación de conversión también maneja muchos otros formatos.
¿Debería ser una imagen de disco o también se podría usar una imagen de partición? –
Es suficiente instalar qemu-utils (apt-get install qemu-utils). Esta solución funciona bien (aunque un poco lenta ...) – akw
Creé un script bash para automatizar el proceso - ver mi respuesta @krosenvold - gracias, esto funcionó muy bien –
Tal vez deberías probar usar Starwind V2V Converter, puedes obtenerlo aquí - http://www.starwindsoftware.com/converter. También es compatible con el formato de disco IMG y realiza la conversión sector por sector entre IMG, VMDK o VHD en y desde cualquiera de ellos sin realizar ningún cambio en la imagen de origen. Esta herramienta es gratuita :)
En Windows, use https://github.com/Zapotek/raw2vmdk para convertir archivos raw creados por dd o winhex a vmdk. raw2vmdk v0.1.3.2 tiene un error: una vez que se crea el archivo vmdk, edite el archivo vmdk y corrija la ruta al archivo sin formato (en mi caso en lugar de D: \ Temp \ flash_16gb.raw (creado por winhex) el generado la ruta fue D: Tempflash_16gb.raw). Luego, ábralo en una máquina virtual vmware versión 6.5-7 (5.1 se negaba a adjuntar el disco duro vmdk). ¡cómo!
¿por qué no downvote no comentado? – xhafan
Dado que la cuestión menciona VirtualBox, esto se trabaja actualmente:
VBoxManage convertfromraw imagefile.dd vmdkname.vmdk --format VMDK
ejecutarlo sin argumentos a favor de algunos detalles interesantes (sobre todo la bandera --variant
): respuesta
VBoxManage convertfromraw
En mi humilde opinión esta es una solución más limpia ya que solo necesita las herramientas de Vbox, y se supone que vbox ya está allí. –
+1 y VBoxManage también se pueden usar para convertir de la otra manera (imagen virtual a raw) 'VBoxManage clonehd --format raw vmdiskimage.vmdk imagefile.dd' – karmakaze
+1 porque usar herramientas de caja virtual es más probable que lo haga funcionar con cuadro virtual (en caso de que haya alguna rareza sobre la forma en que hace las cosas) – MikeKulls
de krosenvold inspiró la siguiente secuencia de comandos que hace lo siguiente:
- obtener el dd volcado a través de ssh f rom un servidor remoto (como archivo gz)
- descomprimir el vertedero
- convertirlo en VMware
la secuencia de comandos se puede reiniciar y se comprueba la existencia de los archivos intermedios. También usa pv y qemu-img -p para mostrar el progreso de cada paso.
En mi entorno de 2 x Ubuntu 12.04 LTS los pasos tomaron:
- de 3 horas para obtener un volcado del disco 47 Gbyte de una partición de 60 Gbyte
- de 20 minutos para descomprimir un archivo dd 60 Gbyte
- 45 minutos en crear el archivo 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
para MacOS es posible que desee cambiar apt-get install con sudo port install y en lugar de qemu-utils necesita qemu entonces ... –
- 1. creando discos duros virtuales
- 2. ¿Debo usar tablas planas o una base de datos normalizada?
- 3. Archivos VirtualBox y vmdk vmx
- 4. Discos dispersos en Haskell?
- 5. ¿Una biblioteca para convertir svg en imágenes?
- 6. ¿Cómo puedo montar vmdk en 10.7?
- 7. Cómo convertir imágenes en matriz de bytes
- 8. Discos de Python en sqlalchemy
- 9. Cómo convertir imágenes a html?
- 10. sujetapapeles - convertir imágenes tiff en jpg o png
- 11. Número de discos de artistas
- 12. Grande en la matriz de discos para numpy
- 13. Uso de una ISO para crear VMware vmdk
- 14. Métodos o eventos virtuales en C#
- 15. Cálculo de coordenadas UV planas para mallas arbitrarias
- 16. Cómo convertir imágenes de ppt slide a jpeg en php
- 17. cómo convertir imágenes en matriz de bytes en java?
- 18. Construyendo expresiones 'planas' en lugar de 'árbol' LINQ
- 19. Convertir PDF a imágenes automáticamente
- 20. Java o C para procesamiento de imágenes
- 21. ¿Cómo convertir imágenes a pdf usando PHP?
- 22. Para convertir imágenes a dibujos animados en ios
- 23. Android: Convertir PDF a imágenes
- 24. Convertir varias imágenes en Imagemagick (Windows)
- 25. Interfaz, Resumen o solo métodos virtuales?
- 26. cómo servidores virtuales nginx + fcgi para django?
- 27. ¿Cómo establecer la alineación para funciones virtuales?
- 28. C# métodos estáticos virtuales (o abstractos)
- 29. Convertir imágenes en 2D a modelos 3D
- 30. Cómo convertir una colección java de imágenes a CvArr
potencialmente útil: http://en.wikipedia.org/wiki/Physical-to-Virtual – isuldor
Una palabra de advertencia al usar '' 'qemu-img''' para convertir imágenes para usar con VMWare Fusion - Fusion no le gustan los discos que no tienen el tamaño exacto del megabyte. Si tiene una imagen así, asegúrese de cambiar el tamaño al megabyte más cercano primero y luego conviértalo al formato vmdk.De lo contrario, se generará una vmdk que se puede conectar a una VM en el momento de la instalación, pero cualquier intento de agregarla a una VM en un momento posterior dará como resultado que el botón Aplicar no funcione. – Anon
Gracias por este comentario. Estaba luchando para descubrir por qué el botón 'Apply' no funcionaba. Me llevó unos minutos descubrir cómo aumentar el tamaño del archivo al megabyte más cercano. Así es como lo hice. Mi archivo debe expandirse en 600 kilobytes. Este comando hizo el trabajo 'dd if =/dev/zero count = 600 bs = 1k >> image.dd' –