ovf - ¿Cómo convertir una imagen de disco plano sin formato a vmdk para virtualbox o vmplayer?
importar maquina virtual vmware esxi 5 (6)
Dado que la pregunta menciona a VirtualBox, esta funciona actualmente:
VBoxManage convertfromraw imagefile.dd vmdkname.vmdk --format VMDK
Ejecútelo sin argumentos para algunos detalles interesantes (notablemente la bandera --variant
):
VBoxManage convertfromraw
Tengo algunas imágenes de distribuciones de Linux antiguas 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?
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!
La respuesta de Krosenvold inspiró la siguiente secuencia de comandos que hace lo siguiente:
- obtener el dd dump a través de ssh desde un servidor remoto (como archivo gz)
- descomprimir el volcado
- convertirlo a vmware
el script es reiniciable y verifica la existencia de los archivos intermedios. También usa pv y qemu-img -p para mostrar el progreso de cada paso.
En mi entorno 2 x Ubuntu 12.04 LTS los pasos tomaron:
- 3 horas para obtener un volcado de disco de 47 GByte de una partición de 60 GByte
- 20 minutos para descomprimir en un archivo dd de 60 GByte
- 45 minutos para crear el archivo vmware
#!/bin/bash
# get a dd disk dump and convert it to vmware
# see http://.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 responder a TJJ: ¿ Pero también es posible hacer esto sin copiar todo el archivo? Entonces, solo para crear de alguna manera un vmdk-metarchivo adicional, que haga referencia a la imagen dd sin formato.
Sí , es posible. Aquí se explica cómo usar una imagen de disco plano en VirtualBox:
Primero creas una imagen con dd de la manera habitual:
dd bs=512 count=60000 if=/dev/zero of=usbdrv.img
Luego puede crear un archivo para VirtualBox que haga referencia a esta imagen:
VBoxManage internalcommands createrawvmdk -filename "usbdrv.vmdk" -rawdisk "usbdrv.img"
Puede usar esta imagen en VirtualBox tal cual, pero dependiendo del sistema operativo invitado, puede que no sea visible inmediatamente. Por ejemplo, experimenté con el uso de este método con un sistema operativo invitado de Windows y tuve que hacer lo siguiente para darle una letra de unidad:
- Ve al Panel de control.
- Vaya a Herramientas administrativas.
- Ve a Administración de Computadora.
- Vaya a Storage / Disk Management en el panel lateral izquierdo.
- Verás tu disco aquí. Cree una partición en ella y formatéela. Utilice FAT para volúmenes pequeños, FAT32 o NTFS para grandes volúmenes.
Es posible que desee acceder a sus archivos en Linux. Primero, desmóntelo del sistema operativo invitado para asegurarse y elimínelo de la máquina virtual. Ahora necesitamos crear un dispositivo virtual que haga referencia a la partición.
sfdisk -d usbdrv.img
Respuesta:
label: dos
label-id: 0xd367a714
device: usbdrv.img
unit: sectors
usbdrv.img1 : start= 63, size= 48132, type=4
Tome nota de la posición de inicio de la partición: 63. En el siguiente comando usé loop4 porque era el primer dispositivo de bucle disponible en mi caso.
sudo losetup -o $((63*512)) loop4 usbdrv.img
mkdir usbdrv
sudo mount /dev/loop4 usbdrv
ls usbdrv -l
Respuesta:
total 0
-rwxr-xr-x. 1 root root 0 Apr 5 17:13 ''Test file.txt''
¡Hurra!
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 gratis :)
apt-get install qemu
(instala QEMU en debian / ubuntu)
A continuación, ejecute el siguiente comando: qemu-img convert -O vmdk imagefile.dd vmdkname.vmdk
Supongo que una imagen de disco plano es una imagen de estilo dd. La operación de conversión también maneja muchos otros formatos.