フラットファイル形式の古い Linux ファイルシステムの古いイメージがいくつかあります。それらはBochsで使用できますが、 Virtual Boxで実行する必要があります。Virtual Box はこの形式の画像を使用できないため、これらの画像をフラット ファイルから .vmdk ファイル形式に変換する必要があります。これを行う方法はありますか?
7 に答える
まず、QEMU をインストールします。Ubuntu などの Debian ベースのディストリビューションでは、次を実行します。
$ apt-get install qemu
次に、次のコマンドを実行します。
$ qemu-img convert -O vmdk imagefile.dd vmdkname.vmdk
私は、フラット ディスク イメージがdd
-style イメージであると想定しています。convert 操作は、他の多くの形式も処理します。
qemu-img
コマンドの詳細については、次の出力を参照してください。
$ qemu-img -h
質問はVirtualBoxに言及しているため、これは現在機能しています:
VBoxManage convertfromraw imagefile.dd vmdkname.vmdk --format VMDK
いくつかの興味深い詳細 (特に--variant
フラグ)については、引数なしで実行します。
VBoxManage convertfromraw
Windowsでは、https://github.com/Zapotek/raw2vmdkを使用して、ddまたはwinhexによって作成されたrawファイルを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ハードドライブの接続を拒否していました)。なんてこった!
krosenvold の答えは、次のことを行う次のスクリプトに影響を与えました。
- リモートサーバーから ssh 経由で dd ダンプを取得します (gz ファイルとして)
- ダンプを解凍する
- それをVMwareに変換します
スクリプトは再起動可能で、中間ファイルの存在をチェックします。また、pv と qemu-img -p を使用して、各ステップの進行状況を表示します。
私の環境では、2 x Ubuntu 12.04 LTS で次の手順を実行しました。
- 60 GByte パーティションの 47 GByte ディスク ダンプを取得するのに 3 時間
- 60 GByte の 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
Starwind V2V Converter を試してみてください。ここから入手できます - http://www.starwindsoftware.com/converter。また、IMG ディスク フォーマットをサポートし、ソース イメージを変更することなく、IMG、VMDK、または VHD との間でセクター単位の変換を実行します。このツールは無料です:)