Конвертирование образов виртуальных машин

При работе с удаленным облачным сервером вы обычно взаимодействуете с виртуальной машиной: изолированным экземпляром всей операционной системы, которая работает в рамках более крупного кластера серверов. С помощью программ QEMU или VirtualBox также можно работать с виртуальными машинами локально на рабочем столе. Виртуальные машины могут включать в себя весь интерфейс рабочего стола, а могут запускать только SSH-сервер для обеспечения терминальных подключений. В любом случае, виртуальные машины технически похожи друг на друга и делают аналогичные предположения. Помимо масштабных оптимизаций облачных сред, единственное существенное различие между средами виртуализации заключается в жестких дисках и параметрах конфигурации. Они называются образами виртуальных машин (virtual machine images) и имеют разное форматирование у разных провайдеров.

В этом мануале вы узнаете, как конвертировать форматы образов виртуальных машин (включая qcow2, vdi, vhd и vmdk). Это пригодится для переноса своих виртуальных сред с рабочего стола в облако и обратно по мере необходимости.

Требования

Если вы установили QEMU и VirtualBox вместе с их инструментами командной строки, команды можно выполнять в Windows, macOS или Linux. Как менеджер пакетов мы используем Homebrew. Можете установить Homebrew на macOS, Linux или Windows под WSL2.

Для выполнения команд потребуется не менее 10 ГБ свободного места.

Примечание. Вы сможете работать только с QEMU, если у вас macOS с процессором Apple Silicon (выпущенный в 2020 году и позже).

QEMU

QEMU — это самое мощное и широко поддерживаемое программное обеспечение для виртуализации с открытым исходным кодом. Оно работает на всех основных платформах (Windows, macOS, Linux и других ОС, например Android) и при необходимости может выполнять как виртуализацию, так и эмуляцию. Например, вы запускаете образ сервера Linux на рабочем столе Windows (распространенный вариант), обе платформы имеют общую базовую архитектуру (Intel/AMD x86), поэтому QEMU может достичь полной производительности за счет виртуализации. Если с помощью QEMU вы смешиваете архитектуры, например, запускаете x86 Linux или Windows (как “host” или “guest” операционную систему) с ARM-архитектурой macOS или Android, то QEMU автоматически использует эмуляцию для конвертирования архитектуры.

Если сравнить виртуализацию и эмуляцию, то последняя обычно не используется в производственных средах, поскольку значительно снижает производительность. Но QEMU рассматривает виртуализацию и эмуляцию как почти эквивалентные, что обеспечивает преимущества совместимости. Это означает, что в каждом сценарии можно использовать одни и те же форматы образов и одни и те же инструменты.

QEMU — это программное обеспечение командной строки, в нём огромное количество параметров для настройки виртуальных машин, но оно по сравнению с VMware или VirtualBox требует более длительного изучения. Его можно использовать с графическим интерфейсом — QtEmu в Windows или Linux и UTM в macOS.

Установка QEMU

Установить QEMU можно с помощью brew install:

brew install qemu

Это установит весь набор инструментов и команд QEMU, включая qemu-img, который используется для конвертации образов виртуальных машин в командной строке. Нужно убедиться, что у вас есть доступ к команде qemu-img. Выполните команду which qemu-img:

which qemu-img

/usr/local/bin/qemu-img

Примечание. Если вы работаете в Windows без WSL2, можно установить QEMU в Windows с помощью встроенного установщика.

Большая часть функций, которые предоставляет QEMU, понадобятся нам в этом мануале. Также вы можете установить еще один популярный пакет виртуализации — VirtualBox.

VirtualBox

VirtualBox — это программное обеспечение для виртуализации с открытым исходным кодом, предоставляемое Oracle. Оно поддерживает все операционные системы x86 (Windows, Linux и macOS, выпущенные до 2020 года). Эта программа поддерживает эмуляцию только архитектуры x86, что делает ее полезной в первую очередь для запуска Linux под Windows и наоборот. Впрочем, она проще QEMU в использовании, предоставляет широко совместимые стандартные настройки и по умолчанию включает интерфейс рабочего стола.

В VirtualBox нет столько функций командной строки, как в QEMU, поэтому его часто используют в паре со специальным программным обеспечением оркестровки (например Vagrant) для автоматизации и воспроизведения конфигураций виртуальных машин. Кроме того, VirtualBox включает инструмент командной строки VBoxManage, с помощью которого можно управлять некоторыми образами виртуальных машин.

Установка VirtualBox 

С помощью brew install с флагом –cask установите  VirtualBox на macOS, так как VirtualBox распространяется как полный пакет приложений, который Homebrew называет cask:

brew install --cask virtualbox

Для установки VirtualBox в Ubuntu или в другие дистрибутивы Linux (включая WSL2): сначала с помощью apt update нужно обновить исходные коды пакетов, а затем установить программу с помощью apt:

sudo apt update

sudo apt install virtualbox

Чтобы установить VirtualBox в Windows без WSL2, перейдите на страницу загрузки.

После установки VirtualBox нужно убедиться, что у вас есть доступ к команде vboxmanage:

which vboxmanage

/usr/local/bin/vboxmanage

Существуют альтернативы QEMU и VirtualBox для виртуализации. Но большинство из них зависят от платформы (например, Hyper-V в Windows) или предназначены для корпоративного использования (VMware). Мы не будем рассматривать их в этом мануале, далее мы займемся конвертацией форматов образов.

Создание образа виртуальной машины с помощью QEMU

Чтобы привести пример конвертирования образов виртуальных машин, начнем с создания образа с помощью QEMU. Можете пропустить этот раздел, если у вас уже есть образ, который вы хотите конвертировать.

С помощью команды qemu-img create с флагом -f qcow2 создадим образ в стандартном формате QEMU, qcow2:

qemu-img create -f qcow2 ubuntu-desktop-22.04.qcow2 10G

На этом этапе мы создали пустой образ виртуальной машины. Несмотря на то, что он называется ubuntu-desktop-22.04.qcow2 и имеет емкость 10 ГБ, на данный момент на нем не будет ни установленной Ubuntu, ни размера 10 ГБ.

Formatting 'ubuntu-desktop-22.04.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=10737418240 lazy_refcounts=off refcount_bits=16

Образы QEMU всегда будут занимать как можно меньше места на диске, отражая при этом свою максимальную заявленную емкость для любого программного обеспечения, работающего на виртуальной машине. В данном случае 10 ГБ – это емкость, которую, по мнению виртуальной машины, она имеет, и максимальный размер, до которого образ виртуальной машины будет автоматически масштабироваться.

Далее мы могли бы установить Ubuntu на виртуальную машину с помощью Ubuntu 22.04 ISO. В целом, этот пункт можно пропустить, так как вы не будете работать с этой виртуальной машиной напрямую. ISO — это тип образа диска, который обычно доступен только для чтения и записывался на носители CD и DVD, а не на жесткий диск. Для работы с ISO-образами есть другие программы — mkisofs и dd. Чтобы узнать больше об установке Linux с помощью QEMU, ознакомьтесь с этим материалом по QEMU.

Конвертация образа QEMU в другой формат

После создания образа виртуальной машины с помощью qemu-img convert можно конвертировать его в другие форматы. vdi – это формат образа по умолчанию в VirtualBox. По умолчанию команда не стирает исходный образ виртуальной машины, а только создает новый:

qemu-img convert -f qcow2 ubuntu-desktop-22.04.qcow2 -O vdi ubuntu-desktop-22.04.vdi

Флаг -f используется для указания формата и имени входного файла. С помощью флага -O указывается формат и имя выходного файла. Чтобы показать индикатор выполнения, можете включить флаг -p, что полезно при конвертировании больших образов. Образ, который мы создали в последнем пункте, будет конвертирован мгновенно, потому что в нем еще нет содержимого. С помощью Is проверим создание ubuntu-desktop-22.04.vdi:

ls ubuntu-desktop-22.04.vdi

ubuntu-desktop-22.04.vdi

Распространенные форматы: vmdk, используемый в основном VMware и vhd — в Microsoft Hyper-V. Если нужно создать неформатированный образ, то пройдите следующий раздел.

Конвертация других форматов виртуальных машин в QEMU

С помощью команды vboxmanage, можно конвертировать образ в формате vdi:

vboxmanage clonemedium ubuntu-desktop-22.04.vdi ubuntu-desktop-22.04.img --format raw
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone medium created in format 'raw'. UUID: 0501e707-c94e-4103-9069-d7b64a933d78

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

Неформатированные образы виртуальных машин не сжимаются, поэтому эта команда создаст полный файл размером 10 ГБ. Изменив синтаксис последнего шага, можно конвертировать образ обратно в формат qcow2 для работы в QEMU:

qemu-img convert -f raw ubuntu-desktop-22.04.img -O qcow2 ubuntu-desktop-22.04-new.qcow2

Можете удалить неформатированный образ, чтобы освободить место на диске:

rm ubuntu-desktop-22.04.img

Теперь с помощью команд qemu-img check и qemu-img info выведем метаданные из образов виртуальных машин:

qemu-img check ubuntu-desktop-22.04.qcow2

No errors were found on the image.

Image end offset: 262144
qemu-img info ubuntu-desktop-22.04.qcow2

image: ubuntu-desktop-22.04.qcow2
file format: qcow2
virtual size: 10 GiB (10737418240 bytes)
disk size: 196 KiB
cluster_size: 65536
Format specific information:
    compat: 1.1
    compression type: zlib
    lazy refcounts: false
    refcount bits: 16
    corrupt: false
    extended l2: false

Для получения дополнительной информации о конвертировании образов с помощью qemu-img посетите страницу руководства qemu-img или его официальные материалы.

Подводим итоги

В этом туториале с помощью инструментов командной строки QEMU и VirtualBox мы создали, конвертировали и экспортировали образ виртуальной машины, а также рассмотрели несколько распространенных форматов образов виртуальных машин и стандартные подходы работы с виртуальными машинами. Понимание технологии и основ виртуализации всегда полезно, особенно если вам необходимо перенести архитектуру или сменить облачных провайдеров.

Читайте также: 5 вариантов настройки сервера для обслуживания веб-приложения

Tags: , , ,

Добавить комментарий