web-dev-qa-db-ja.com

virtualboxまたはvmplayerのフラットRAWディスクイメージをvmdkに変換する方法

フラットファイル形式の古いLinuxファイルシステムの古いイメージがいくつかあります。 Bochs で使用できますが、 Virtual Box で実行する必要があります。 Virtual Boxはこの形式の画像を使用できないため、これらの画像をフラットファイルから.vmdkファイル形式に変換する必要があります。これを行う方法はありますか?

58
okutane

apt-get install qemu(debian/ubuntuにQEMUをインストールします)

次に、次のコマンドを実行します:qemu-img convert -O vmdk imagefile.dd vmdkname.vmdk

フラットディスクイメージはddスタイルのイメージであると想定しています。変換操作は、他の多くの形式も処理します。

81
krosenvold

質問ではVirtualBoxに言及しているため、これは現在機能しています。

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

いくつかの興味深い詳細(特に--variant 国旗):

VBoxManage convertfromraw
79
Lloeki

Windowsでは、 https://github.com/Zapotek/raw2vmdk を使用して、ddまたはwinhexによって作成された生ファイルをvmdkに変換します。 raw2vmdk v0.1.3.2にはバグがあります-vmdkファイルが作成されたら、vmdkファイルを編集し、rawファイルへのパスを修正します(私の場合はD:\ Temp\flash_16gb.raw(winhexで作成)ではなく)パスはD:Tempflash_16gb.rawでした)。次に、それをvmware仮想マシンバージョン6.5-7で開きます(5.1はvmdkハードドライブの接続を拒否していました)。ほら!

6
xhafan

TJJに答えるには:しかし、ファイル全体をコピーせずにこれを行うことも可能ですか?ですから、生のdd-imageを参照する追加のvmdk-metafileを作成するだけです。

はい、可能です。 VirtualBoxでフラットディスクイメージを使用する方法は次のとおりです。

まず、通常の方法でddを使用して画像を作成します。

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

次に、この画像を参照するVirtualBoxのファイルを作成できます。

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

このイメージはVirtualBoxでそのまま使用できますが、ゲストOSによってはすぐに表示されない場合があります。たとえば、WindowsゲストOSでこの方法を使用して実験し、ドライブ文字を付けるには次の操作を行う必要がありました。

  • コントロールパネルに移動します。
  • 管理ツールに移動します。
  • [コンピューターの管理]に移動します。
  • 左側のパネルで[ストレージ\ディスクの管理]に移動します。
  • ここにディスクが表示されます。その上にパーティションを作成し、フォーマットします。小さいボリュームにはFATを使用し、大きいボリュームにはFAT32またはNTFSを使用します。

Linux上のファイルにアクセスしたい場合があります。最初にゲストOSからマウントを解除して、仮想マシンから確実に削除します。次に、パーティションを参照する仮想デバイスを作成する必要があります。

sfdisk -d usbdrv.img

応答:

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

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

パーティションの開始位置に注意してください。63.以下のコマンドでは、loop4を使用しました。これは、私の場合で最初に使用可能なループデバイスだったからです。

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

応答:

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

わーい!

4
Anonymous

おそらくStarwind V2V Converterを使用してみてください。ここから入手できます- http://www.starwindsoftware.com/converter 。また、IMGディスク形式をサポートし、ソースイメージに変更を加えることなく、IMG、VMDK、またはVHDとの間でセクターごとの変換を実行します。このツールは無料です:)

1
Paul Svirin

krosenvoldの答えは、次のことを行う次のスクリプトに影響を与えました。

  • リモートサーバーからssh経由でddダンプを取得(gzファイルとして)
  • ダンプを解凍します
  • vmwareに変換します

スクリプトは再起動可能で、中間ファイルの存在を確認します。また、pvおよびqemu-img -pを使用して、各ステップの進行状況を表示します。

私の環境では、2つのUbuntu 12.04 LTSで手順が実行されました。

  • 60 GByteパーティションの47 GByteディスクダンプを取得するには3時間
  • 60ギガバイトのddファイルに解凍するのに20分
  • VMwareファイルを作成する45分
#!/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
1
Wolfgang Fahl

別のオプションを提供するために、 https://sourceforge.net/projects/dd2vmdk/ も使用できます。 dd2vmdkは* nixベースのプログラムで、rawイメージを取得し、マスターブートレコード(物理セクター0)を分析し、特定のvmdkファイルを作成するために必要な情報。

個人的に、imo QemuとZapotekのraw2vmdkツールは、ddをvmdksに変換するための最良の総合オプションです。

開示:私はこのプロジェクトの著者です。

0
labgeek