У меня есть старые образы старых файловых систем Linux в формате плоских файлов. их можно использовать с помощью Bochs, но мне нужно запустить их с помощью Виртуальная коробка. Virtual Box не может использовать изображения в этом формате, поэтому мне нужно преобразовать эти изображения из плоского файла в формат файла .vmdk. Есть какой-либо способ сделать это?
Предупреждение при использовании qemu-img для преобразования образов для использования с VMWare Fusion - Fusion не любит диски, размер которых не соответствует мегабайту. Если у вас есть такое изображение, сначала убедитесь, что вы изменили размер до ближайшего мегабайта, а затем преобразуете его в формат vmdk. В противном случае vmdk может быть присоединен к виртуальной машине во время установки, но любые попытки добавить его к виртуальной машине позже приведут к тому, что кнопка «Применить» не будет работать.
Спасибо за этот комментарий. Я изо всех сил пытался понять, почему кнопка Apply не работает. Мне потребовалось несколько минут, чтобы понять, как увеличить размер файла до ближайшего мегабайта. Вот как я это сделал. Мой файл нужно было увеличить на 600 килобайт. Эта команда сделала свою работу dd if=/dev/zero count=600 bs=1k >> image.dd


Сначала установите QEMU. В дистрибутивах на основе Debian, таких как Ubuntu, запустите:
$ apt-get install qemu
Затем выполните следующую команду:
$ qemu-img convert -O vmdk imagefile.dd vmdkname.vmdk
Я предполагаю, что образ плоского диска - это образ в стиле dd. Операция преобразования также обрабатывает множество других форматов.
Дополнительные сведения о команде qemu-img см. В выходных данных
$ qemu-img -h
Должен ли это быть образ диска или также можно использовать образ раздела?
Достаточно установить qemu-utils (apt-get install qemu-utils). Это решение работает хорошо (хотя и немного медленнее ..)
Я создал сценарий bash для автоматизации процесса - см. Мой ответ @krosenvold - спасибо, это отлично сработало
Возможно, вам стоит попробовать использовать Starwind V2V Converter, вы можете получить его отсюда - http://www.starwindsoftware.com/converter. Он также поддерживает формат диска IMG и выполняет посекторное преобразование между IMG, VMDK или VHD в любой из них и из них без внесения каких-либо изменений в исходный образ. Этот инструмент бесплатный :)
Я попробовал этот "конвертер изображений StarWind V2V", чтобы скрыть созданный dd необработанный образ в VHD. Но после выбора исходного изображения я просто получаю «Внутренняя ошибка (32) [32]». Также перед загрузкой вам необходимо заполнить форму и указать свой адрес электронной почты. Не могу рекомендовать.
В 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 версии 6.5-7 (5.1 отказывался подключать жесткий диск vmdk). как!
Поскольку в вопросе упоминается VirtualBox, в настоящее время он работает:
VBoxManage convertfromraw imagefile.dd vmdkname.vmdk --format VMDK
Запустите его без аргументов, чтобы узнать несколько интересных деталей (в частности, флаг --variant):
VBoxManage convertfromraw
ИМХО, это более чистое решение, так как ему нужны только инструменты Vbox, а vbox уже должен быть там.
+1 и VBoxManage также можно использовать для обратного преобразования (виртуальное изображение в необработанное) VBoxManage clonehd --format raw vmdiskimage.vmdk imagefile.dd
+1, потому что использование инструментов виртуального ящика с большей вероятностью заставит его работать с виртуальным ящиком (на случай, если есть какие-то странности в том, как он работает)
Для тех, кто ищет явный ответ, это также работает с файлами .img: vboxmanage convertdd w1.img w1.vdi
Но можно ли это сделать и без копирования всего файла? Итак, просто чтобы каким-то образом создать дополнительный метафайл vmdk, который ссылается на необработанный dd-образ.
Есть VBoxManage internalcommands createrawvmdk -filename "my_raw_disk.vmdk" -rawdisk "/dev/sda42", но я действительно не знаю, может ли он указывать на файл вместо блочного устройства.
это решение кроссплатформенное - win / osx / linux.
Ответ Кросенвольда вдохновил следующий сценарий, который выполняет следующие действия:
сценарий перезапускается и проверяет наличие промежуточных файлов. Он также использует pv и qemu-img -p, чтобы показать прогресс каждого шага.
В моей среде 2 x Ubuntu 12.04 LTS были предприняты шаги:
#!/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
для MacOS вы можете изменить apt-get install с помощью sudo port install, и вместо qemu-utils вам понадобится qemu, тогда ...
Чтобы ответить 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, и мне пришлось сделать следующее, чтобы присвоить ей букву диска:
Возможно, вы захотите получить доступ к своим файлам в 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, потому что в моем случае это было первое доступное устройство цикла.
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'
Ура!
Чтобы дать вам еще один вариант, вы также можете использовать https://sourceforge.net/projects/dd2vmdk/. dd2vmdk - это программа на основе * nix, которая позволяет монтировать необработанные образы дисков (созданные dd, dcfldd, dc3dd, ftk imager и т. д.), беря необработанный образ, анализируя главную загрузочную запись (физический сектор 0) и получая конкретные информация, необходимая для создания файла vmdk.
Лично imo Qemu и инструменты raw2vmdk от Zapotek являются лучшими общими вариантами для преобразования dd в vmdks.
Раскрытие информации: я являюсь автором этого проекта.
Судя по вашему логину и имени автора этого проекта, похоже, что это ваша работа. Пожалуйста, сообщите о своей принадлежности, иначе это будет считаться спамом. Прочтите Как не быть спамером.
Потенциально полезно: en.wikipedia.org/wiki/Physical-to-Virtual