Domanda

Ho alcune vecchie immagini di vecchi filesystem Linux in formato file flat. possono essere utilizzati da Bochs , ma devo eseguirli con Scatola virtuale . Virtual Box non può usare le immagini in questo formato, quindi ho bisogno di convertire queste immagini da file flat in formato di file .vmdk. C'è un modo per farlo?

È stato utile?

Soluzione

apt-get install qemu (installa QEMU su debian / ubuntu)

Quindi eseguire il comando seguente: qemu-img convert -O vmdk imagefile.dd vmdkname.vmdk

Suppongo che un'immagine del disco piatto sia un'immagine in stile dd. L'operazione di conversione gestisce anche numerosi altri formati.

Altri suggerimenti

Poiché la domanda menziona VirtualBox, questa funziona attualmente:

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

Eseguilo senza argomenti per alcuni dettagli interessanti (in particolare il flag --variant ):

VBoxManage convertfromraw

Su Windows, utilizza https://github.com/Zapotek/raw2vmdk per convertire i file grezzi creati da dd o winhex a vmdk. raw2vmdk v0.1.3.2 ha un bug: una volta creato il file vmdk, modifica il file vmdk e correggi il percorso del file raw (nel mio caso invece di D: \ Temp \ flash_16gb.raw (creato da winhex) il generato il percorso era D: Tempflash_16gb.raw). Quindi, aprilo in una macchina virtuale VMware versione 6.5-7 (5.1 si stava rifiutando di collegare l'hard disk vmdk). howgh!

Per rispondere a TJJ: Ma è anche possibile farlo senza copiare l'intero file? Quindi, solo per creare in qualche modo un vmdk-metafile aggiuntivo, che fa riferimento all'immagine dd grezza.

, è possibile. Ecco come utilizzare un'immagine del disco piatto in VirtualBox:

Per prima cosa crei un'immagine con dd nel solito modo:

dd bs=512 count=60000 if=/dev/zero of=usbdrv.img

Quindi puoi creare un file per VirtualBox che fa riferimento a questa immagine:

VBoxManage internalcommands createrawvmdk -filename "usbdrv.vmdk" -rawdisk "usbdrv.img"

Puoi usare questa immagine in VirtualBox così com'è, ma a seconda del sistema operativo guest potrebbe non essere immediatamente visibile. Ad esempio, ho sperimentato l'uso di questo metodo con un SO guest Windows e ho dovuto fare quanto segue per dargli una lettera di unità:

  • Vai al Pannello di controllo.
  • Vai a Strumenti di amministrazione.
  • Vai a Gestione computer.
  • Vai su Archiviazione \ Gestione disco nel pannello laterale sinistro.
  • Vedrai il tuo disco qui. Crea una partizione su di essa e formattala. Usa FAT per piccoli volumi, FAT32 o NTFS per grandi volumi.

Potresti voler accedere ai tuoi file su Linux. Innanzitutto smontalo dal sistema operativo guest per essere sicuro e rimuovilo dalla macchina virtuale. Ora dobbiamo creare un dispositivo virtuale che faccia riferimento alla partizione.

sfdisk -d usbdrv.img

Risposta:

label: dos
label-id: 0xd367a714
device: usbdrv.img
unit: sectors

usbdrv.img1 : start=          63, size=       48132, type=4

Prendi nota della posizione iniziale della partizione: 63. Nel comando seguente ho usato loop4 perché era il primo dispositivo loop disponibile nel mio caso.

sudo losetup -o $((63*512)) loop4 usbdrv.img
mkdir usbdrv
sudo mount /dev/loop4 usbdrv
ls usbdrv -l

Risposta:

total 0
-rwxr-xr-x. 1 root root 0 Apr  5 17:13 'Test file.txt'

Yay!

Forse dovresti provare a utilizzare Starwind V2V Converter, puoi ottenerlo da qui - http: //www.starwindsoftware .com / convertitore . Supporta anche il formato del disco IMG ed esegue la conversione settore per settore tra IMG, VMDK o VHD in e da uno di essi senza apportare modifiche all'immagine sorgente. Questo strumento è gratuito :)

La risposta di krosenvold ha ispirato il seguente script che fa quanto segue:

  • scarica il dd dump tramite ssh da un server remoto (come file gz)
  • decomprimere il dump
  • convertilo in vmware

lo script è riavviabile e verifica l'esistenza dei file intermedi. Utilizza anche pv e qemu-img -p per mostrare l'avanzamento di ogni passaggio.

Nel mio ambiente 2 x Ubuntu 12.04 LTS i passaggi sono stati:

  • 3 ore per ottenere un dump del disco da 47 GByte di una partizione da 60 GByte
  • 20 minuti per decomprimere in un file dd da 60 GByte
  • 45 minuti per creare il file 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 per darti un'altra opzione, puoi usare https://sourceforge.net/projects/dd2vmdk / pure. dd2vmdk è un programma basato su * nix che consente di montare immagini del disco non elaborate (create da dd, dcfldd, dc3dd, ftk imager, ecc.) acquisendo l'immagine non elaborata, analizzando il record di avvio principale (settore fisico 0) e ottenendo specifiche informazioni necessarie per creare un file vmdk.

Personalmente, imo Qemu e gli strumenti raw2vmdk di Zapotek sono le migliori opzioni generali per convertire dd in vmdks.

Divulgazione: sono l'autore di questo progetto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top