Application: command-line utility "vmware-vdiskmanager" (Linux).
Задача: конвертирование образа формата VMDK (VMware Server v.2) виртуальной машины работающей под управлением "MS Windows XP/2003", в формат RAW ("сырой", полностью соответствующий формату отображения данных на физическом дисковом носителе), с сопутствующей активацией в виртуализируемой операционной системе поддержки интерфейса подключения устройств "generic-IDE" (позволяющее запустить переносимую виртуальную систему практически в произвольном аппаратном окружении).
По сути, здесь изложен способ конвертирования, представляющей собою частный случай задачи, общее решение которой приведено здесь. На самом деле виртуальная машина формата VMware, как правило (после достаточно тривиального удаления специфичных драйверов от производителя), полностью готова к работе в других системах виртуализации, даже для "парковки" на аппаратное обеспечение. Нюанс в том, что ОС "MS Windows XP/2003" по некоторым причинам, которые я вежливо назвал бы "историческими" (вроде как воспоминание о стыдном, но нестираемом из жизни), с болью и трепетом воспринимает смену типа оборудования, с которого она уже начала было загружать свои исполняемые модули, на иное, реагируя на это "выпаданием в осадок" с демонстрацией "синего окна смерти". Дело не в том, что ядро ОС не опознаёт оборудование или не имеет возможности с такового загрузится; нет, "MS Windows XP/2003" вполне себе успешно начинает загружаться с дискового устройства, но, обнаружив, что загружается не с того аппаратного обеспечения, на котором в последний раз завершила работу, прерывает процесс. Систему не вводит в шоковое состояние смена видеоадаптера, терминального оборудования, даже процессора и материнской платы, но вот дисковый контроллер - это совсем другое дело, согласитесь! Ну да, как-же, большая разница. Маразм конечно, не хлеще OEM-соглашения, на которое подписывается масса "человеков прямоходящих", покупая "MS Windows", вот только проблемы создаёт не потенциально-юридические, а реально-практические, затрудняя замену пришедшего в негодность оборудования или миграцию в иное окружение (даже не нарушая соглашение об использовании). Потому приходится заранее уведомлять операционную систему о вносимом в конфигурацию изменении путём множественной правки "реестра".
И так, пройдёмся по этапам подготовки виртуальной машины к выводу из среды VMware.
Первым делом удалим из виртуализируемой системы все специфичные драйверы VMware (вроде акселератора манипулятора типа "мышь", сетевого и дискового контроллера), деинсталлируя пакет "VMware Tools".
Далее удостоверимся, что в директории "%SystemRoot%\System32\Drivers" находятся драйверы минимального набора поддерживаемого системой "generic-IDE" интерфейсов: "atapi.sys", "intelide.sys", "pciide.sys" и "pciidex.sys". Если чего-то из приведённого списка не хватает - ищем в "%SystemRoot%\Driver Cache\I386\" в архивах вроде "Driver.cab", "sp1.cab", "sp2.cab" и тому подобных.
Завершающим действом является правка "реестра", способствующая принятию системой оборудования, словно бы в насмешку называемого "Plug-n-Play". Проблема не первой сотни тысяч пользователей и Microsoft на своём сайте детально описала способ её решения: http://support.microsoft.com/kb/314082 . Больше для себя, на память, прикрепляю здесь текстовый файл, содержимое которого нужно "объединить" с "реестром" для достижения поставленной цели:
На этом подготовка VMware виртуальной машины под управлением операционной системы "MS Windows XP/2003" окончена, можно завершать её работу и переходить ко второму этапу - конвертированию образа в RAW-формат.
Прежде всего, нам понадобится утилита "vmware-vdiskmanager" (идет в комплекте с "VMware Server v.2"; утилита не завязана на другое программное обеспечение VMware-сервера и легко переносима - просто копируем).
Уж не знаю, не углублялся, возможно я что-то и нарушаю, выкладывая здесь утилиты конвертирования и монтирования томов VMDK, но так проще:
Далее описываю ситуацию, когда VMDK-образ конвертируется в RAW для дальнейшего применения в среде "Qemu-KVM", исполняемого в "Linux Debian Lenny/Squeeze".
Выделяем под новый образ место, руководствуясь показаниями утилиты "kvm-img":
$ kvm-img info ./source-image.vmdk
image: source-image.vmdk
file format: vmdk
virtual size: 180G (193273528320 bytes)
disk size: 58G
file format: vmdk
virtual size: 180G (193273528320 bytes)
disk size: 58G
Видно, что размер файла VMDK равен пятидесяти восьми гигабайтам, в то время как "внутренний" размер уложенного в него "виртуального" диска составляет сто восемьдесят гигабайт. Нужно готовить место для полноценного RAW-диска объёмом в сто восемьдесят гигабайт.
Для конвертирования VMDK-образов лучше использовать именно утилиту "vmware-vdiskmanager", которая с опцией "-t 2" формирует монолитный файл-диск (preallocated).
Можно сконвертировать с помощью утилиты "kvm-img", но она создаст "разрежённый" файл (к сожалению на данный момент создание монолитных файлов не поддерживается):
$ kvm-img convert ./source-image.vmdk -O raw ./destination-image.raw
Очень важно для дальнейшей производительной работы перегнать получившийся в результате работу утилиты "kvm-img" "no preallocated" файл образа в больший по размеру "preallocated". Конвертер "vmware-vdiskmanager" может сделать это сам, а вот "kvm-img" приходится помогать. Я использую утилиту от VMware.
Просто запускаем конвертацию:
$ vmware-vdiskmanager -r ./source-image.vmdk -t 2 ./destination-image.raw
Утилита приступит к делу своей жизни, информируя о состоянии процесса:
Creating disk './destination-image.raw'
Convert: 86% done.
Convert: 86% done.
Вначале формируется файл "./destination-image-flat.raw", полного размера, индикатор прогресса исполнения как раз достигает значения в 50%; на остальные 50% утилита шуршит диском, делая что-то с полученным файлом, генерируя при этом трафик ввода-вывода сравнимый с работой средне-нагруженной виртуальной машины.
В результате будут "собраны" все файлы виртуальных дисков VMware-машины в один RAW-файл, "слив" все "снепшоты" (если они были) воедино. По завершению получаем поздравление:
....
Virtual disk conversion successful.
Virtual disk conversion successful.
Для того чтобы спокойно спать и быть уверенным, что накладки в дальнейшем не связаны с неверной конвертацией, следует проверить полученный образ. Тестируем файл утилитой "file":
# file ./destination-image-flat.raw
./destination-image-flat.raw: x86 boot sector, Microsoft Windows XP MBR, ..., code offset 0xc0
Тестируем утилитой "kvm-img" пакета "Qemu-KVM":
# kvm-img info ./destination-image-flat.raw
image: ./destination-image-flat.raw
file format: raw
virtual size: 180G (193273528320 bytes)
disk size: 180G
file format: raw
virtual size: 180G (193273528320 bytes)
disk size: 180G
Вот и всё, RAW-образ можно использовать в среде Qemu-KVM. Не могу удержаться от подражания моськи тявкающей: если бы Microsoft не тащила из релиза в релиз поддержку обратной совместимости времён войны за независимость, глядишь заметка уложилась бы в пару-тройку строчек.