Flat Raw Disk 이미지를 VirtualBox 또는 VMPlayer의 경우 VMDK로 변환하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/454899

문제

평평한 파일 형식의 오래된 Linux 파일 시스템의 오래된 이미지가 있습니다. 그들은 사용할 수 있습니다 보크, 그러나 나는 그들과 함께 달려야합니다 가상 상자. 가상 상자는이 형식의 이미지를 사용할 수 없으므로이 이미지를 플랫 파일에서 .vmdk 파일 형식으로 변환해야합니다. 이것을 할 방법이 있습니까?

도움이 되었습니까?

해결책

apt-get install qemu (데비안/우분투에 QEMU 설치)

그런 다음 다음 명령을 실행합니다.qemu-img convert -O vmdk imagefile.dd vmdkname.vmdk

플랫 디스크 이미지가 DD 스타일 이미지라고 가정합니다. 변환 작업은 또한 다양한 다른 형식을 처리합니다.

다른 팁

이 질문은 VirtualBox를 언급하기 때문에 현재 작동합니다.

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

몇 가지 흥미로운 세부 사항에 대한 논쟁없이 실행하십시오 (특히 --variant 깃발):

VBoxManage convertfromraw

Windows에서 사용합니다 https://github.com/zapotek/raw2vmdk DD 또는 Winhex에서 생성 한 원시 파일을 VMDK로 변환합니다. raw2vmdk v0.1.3.2는 버그가 있습니다 - vmdk 파일이 생성되면 vmdk 파일을 편집하고 원시 파일로의 경로를 수정합니다 (d : temp flash_16gb.raw (winhex에 의해 생성) 경로는 d : tempflash_16GB.RAW입니다. 그런 다음 VMware Virtual Machine 버전 6.5-7로 열 수 있습니다 (5.1은 VMDK Harddrive 부착을 거부했습니다). 하워!

TJJ에 대답하려면 : 그러나 전체 파일을 복사하지 않고도 할 수 있습니까? 따라서 어떻게 든 원시 DD 이미지를 참조하는 추가적인 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 Guest OS와 함께이 메소드를 사용하는 것을 실험했으며 드라이브 문자를 제공하기 위해 다음을 수행해야했습니다.

  • 제어판으로 이동하십시오.
  • 관리 도구로 이동하십시오.
  • 컴퓨터 관리로 이동하십시오.
  • 왼쪽 패널의 스토리지 디스크 관리로 이동하십시오.
  • 여기에 디스크가 표시됩니다. 파티션을 만들고 포맷하십시오. 소량, 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

파티션의 시작 위치를 기록하십시오.

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'

예!

아마도 Starwind v2v 컨버터를 사용해보아야 할 수도 있습니다. 여기에서 얻을 수 있습니다. http://www.starwindsoftware.com/converter. 또한 IMG 디스크 형식을 지원하고 소스 이미지를 변경하지 않고 IMG, VMDK 또는 VHD 간의 섹터 바이 부문 변환을 수행합니다. 이 도구는 무료입니다 :)

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

또 다른 옵션을 제공하기 위해 사용할 수 있습니다. https://sourceforge.net/projects/dd2vmdk/ 또한. DD2VMDK vmdk 파일을 만들기 위해 필요한 정보.

개인적으로 IMO QEMU와 Zapotek의 RAW2VMDK 도구는 DD를 VMDKS로 변환하는 최고의 전반적인 옵션입니다.

공개 : 저는이 프로젝트의 저자입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top