Pregunta

Tengo algunas imágenes antiguas de viejos sistemas de archivos de Linux en formato de archivo plano. Bochs pueden usarlos, pero necesito ejecutarlos con Caja virtual . Virtual Box no puede usar imágenes en este formato, por lo que necesito convertir estas imágenes de archivo plano a formato de archivo .vmdk. ¿Hay alguna forma de hacer esto?

¿Fue útil?

Solución

apt-get install qemu (instala QEMU en debian / ubuntu)

Luego 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.

Otros consejos

Dado que la pregunta menciona VirtualBox, esta funciona actualmente:

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

Ejecútelo sin argumentos para algunos detalles interesantes (en particular la bandera --variant ):

VBoxManage convertfromraw

En Windows, use https://github.com/Zapotek/raw2vmdk para convertir archivos sin formato 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 arregle la ruta al archivo sin procesar (en mi caso en lugar de D: \ Temp \ flash_16gb.raw (creado por winhex) lo generado la ruta era D: Tempflash_16gb.raw). Luego, ábralo en una máquina virtual vmware versión 6.5-7 (5.1 se negaba a conectar el disco duro vmdk). ¡cómo!

Para responder TJJ: ¿Pero también es posible hacer esto sin copiar todo el archivo? Entonces, para crear de alguna manera un vmdk-metafile adicional, que haga referencia a la imagen dd sin procesar.

, es posible. Aquí se explica cómo usar una imagen de disco plano en VirtualBox:

Primero crea una imagen con dd de la forma 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 como está, pero dependiendo del SO huésped puede no ser visible de inmediato. Por ejemplo, experimenté 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:

  • Vaya al Panel de control.
  • Ir a Herramientas administrativas.
  • Vaya a Administración de computadoras.
  • Vaya a Almacenamiento \ Administración de discos en el panel lateral izquierdo.
  • Verás tu disco aquí. Cree una partición en él y formatee. Use FAT para volúmenes pequeños, FAT32 o NTFS para volúmenes grandes.

Es posible que desee acceder a sus archivos en Linux. Primero, desmóntelo del sistema operativo invitado para asegurarse y quítelo 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 utilicé loop4 porque fue 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'

¡Sí!

Tal vez debería intentar usar Starwind V2V Converter, puede obtenerlo desde 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 :)

La respuesta de

krosenvold inspiró el siguiente script que hace lo siguiente:

  • obtenga el volcado de dd a través de ssh desde un servidor remoto (como archivo gz)
  • descomprimir el basurero
  • 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 fueron:

  • 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://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: <*> 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 "       <*> frodo.lotr.org sda"
  echo "       <*> 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 "<*> $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

Solo para darle otra opción, puede usar https://sourceforge.net/projects/dd2vmdk / también. dd2vmdk es un programa basado en * nix que le permite montar imágenes de disco sin formato (creadas por dd, dcfldd, dc3dd, ftk imager, etc.) tomando la imagen sin formato, analizando el registro maestro de arranque (sector físico 0) y obteniendo información específica información necesaria para crear un archivo vmdk.

Personalmente, imo Qemu y las herramientas raw2vmdk de Zapotek son las mejores opciones generales para convertir dd a vmdks.

Divulgación: soy el autor de este proyecto.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top