Как преобразовать плоский сырой образ диска в vmdk для virtualbox или vmplayer? - PullRequest
58 голосов
/ 18 января 2009

У меня есть несколько старых образов старых файловых систем Linux в формате плоских файлов. они могут использоваться Bochs , но мне нужно запустить их с Virtual Box . Virtual Box не может использовать изображения в этом формате, поэтому мне нужно преобразовать эти изображения из плоского файла в формат файла .vmdk. Есть ли способ сделать это?

Ответы [ 7 ]

80 голосов
/ 18 января 2009

apt-get install qemu (устанавливает QEMU в Debian / Ubuntu)

Затем выполните следующую команду: qemu-img convert -O vmdk imagefile.dd vmdkname.vmdk

Я предполагаю, что образ плоского диска - это образ в стиле dd. Операция преобразования также обрабатывает множество других форматов.

78 голосов
/ 01 августа 2012

Поскольку в вопросе упоминается VirtualBox, этот работает в настоящее время:

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

Запустите его без аргументов для нескольких интересных деталей (в частности, флаг --variant):

VBoxManage convertfromraw
6 голосов
/ 08 апреля 2011

В 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). howgh!

4 голосов
/ 06 апреля 2018

Чтобы ответить на TJJ: Но возможно ли это сделать без копирования всего файла? Итак, просто как-то создать дополнительный vmdk-метафайл, который ссылается на необработанный dd-образ.

Да , это возможно. Вот как использовать образ плоского диска в VirtualBox:

Сначала вы создаете образ с помощью dd обычным способом:

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

Затем вы можете создать файл для VirtualBox, который ссылается на это изображение:

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

Вы можете использовать это изображение в VirtualBox как есть, но в зависимости от гостевой ОС оно может быть не сразу видно. Например, я экспериментировал с использованием этого метода в гостевой ОС Windows, и мне пришлось сделать следующее, чтобы указать букву диска:

  • Перейти к панели управления.
  • Перейти в Администрирование.
  • Перейти к управлению компьютером.
  • Перейдите в раздел Хранилище \ Управление дисками на левой боковой панели.
  • Здесь вы увидите свой диск. Создайте на нем раздел и отформатируйте его. Используйте FAT для небольших томов, FAT32 или NTFS для больших томов.

Возможно, вы захотите получить доступ к вашим файлам в Linux. Сначала обязательно отключите его от гостевой ОС и удалите его из виртуальной машины. Теперь нам нужно создать виртуальное устройство, которое ссылается на раздел.

sfdisk -d usbdrv.img

Ответ:

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

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

Обратите внимание на начальную позицию раздела: 63. В приведенной ниже команде я использовал loop4, потому что это было первое доступное устройство loop в моем случае.

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'

Ура!

1 голос
/ 19 октября 2014

Ответ Крозенволда вдохновил следующий сценарий, который выполняет следующее:

  • получить дд дамп через ssh с удаленного сервера (как файл gz)
  • распаковать дамп
  • преобразовать его в VMware

скрипт перезапускается и проверяет наличие промежуточных файлов. Он также использует pv и qemu-img -p, чтобы показать прогресс каждого шага.

В моей среде 2 x Ubuntu 12.04 LTS предприняли следующие шаги:

  • 3 часа, чтобы получить дамп диска 47 ГБ для раздела 60 ГБ
  • 20 минут для распаковки в файл dd 60 ГБайт
  • 45 минут на создание файла vmware
#!/bin/bash
# get a dd disk dump and convert it to vmware
#  see /357594/kak-preobrazovat-ploskii-syroi-obraz-diska-v-vmdk-dlya-virtualbox-ili-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 голос
/ 27 июля 2009

Возможно, вам следует попробовать использовать Starwind V2V Converter, вы можете получить его здесь - http://www.starwindsoftware.com/converter. Он также поддерживает формат диска IMG и выполняет посекторное преобразование между IMG, VMDK или VHD в любой из них и из них. без внесения каких-либо изменений в исходное изображение. Этот инструмент бесплатный:)

0 голосов
/ 01 декабря 2018

Просто чтобы дать вам еще один вариант, вы также можете использовать https://sourceforge.net/projects/dd2vmdk/. dd2vmdk - это * nix-программа, которая позволяет монтировать необработанные образы дисков (созданные dd, dcfldd, dc3dd, ftk imager и т. д.), беря необработанный образ, анализируя основную загрузочную запись (физический сектор 0) и получая конкретные информация, необходимая для создания файла vmdk.

Лично imo Qemu и инструменты raw2vmdk от Zapotek - лучшие варианты для конвертации dd в vmdks.

Раскрытие: я являюсь автором этого проекта.

...