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

Введение

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

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

Предварительные требования

Команды в этом учебнике можно выполнить на Windows, macOS или Linux, при условии, что у вас установлены QEMU и VirtualBox вместе с их средствами командной строки. В этом учебнике предоставлены инструкции по установке с использованием менеджера пакетов Homebrew. Вы можете установить Homebrew на macOS, на Linux или на Windows с использованием WSL2.

Если вы работаете на виртуальной машине DigitalOcean, у вас должно быть как минимум 2 процессора и 2 ГБ оперативной памяти.

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

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

QEMU

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

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

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

Установка QEMU

Для установки QEMU используйте brew install в Homebrew:

  1. brew install qemu

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

  1. which qemu-img
Output
/usr/local/bin/qemu-img

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

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

VirtualBox

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

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

Установка VirtualBox

Чтобы установить VirtualBox на macOS, используйте brew install с флагом --cask, потому что VirtualBox распространяется как полный пакет приложения, который Homebrew называет cask:

  1. brew install --cask virtualbox

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

  1. sudo apt update
  2. sudo apt install virtualbox

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

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

  1. which vboxmanage
Output
​​/usr/local/bin/vboxmanage

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

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

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

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

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

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

Output
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 ГБ будет емкостью, которую ваша виртуальная машина считает доступной, и максимальным размером, до которого образ виртуальной машины будет автоматически масштабироваться.

A typical next step would be to install Ubuntu 22.04 onto the virtual machine, using a Ubuntu 22.04 ISO. However, you can skip this step for this tutorial, as you won’t actually be working directly with this virtual machine. An ISO is another type of disk image that is usually read-only, and was historically written onto CD and DVD installation media, rather than an image of a writable hard disk. Other software exists for manipulating ISO images, such as mkisofs and dd. To learn more about installing Linux using QEMU, refer to the QEMU documentation.

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

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

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

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

  1. ls ubuntu-desktop-22.04.vdi
Output
ubuntu-desktop-22.04.vdi

Другие распространенные форматы включают vmdk, преимущественно используемый VMware, и vhd, преимущественно используемый Microsoft Hyper-V. Вы также можете создать “raw” образ, если ваше программное обеспечение этого требует, следуя следующему шагу.

Преобразование других форматов виртуальных машин в QEMU

Если у вас есть изображение в формате vdi, вы можете использовать команду vboxmanage, предоставляемую VirtualBox, для его преобразования:

  1. vboxmanage clonemedium ubuntu-desktop-22.04.vdi ubuntu-desktop-22.04.img --format raw
Output
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, развернув синтаксис с последнего шага:

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

Теперь вы можете удалить сырой образ, чтобы вернуть диск в исходное состояние:

  1. rm ubuntu-desktop-22.04.img

Наконец, вы можете использовать команды qemu-img check и qemu-img info, чтобы вывести некоторые метаданные из образов ваших виртуальных машин:

  1. qemu-img check ubuntu-desktop-22.04.qcow2
Output
No errors were found on the image. Image end offset: 262144
  1. qemu-img info ubuntu-desktop-22.04.qcow2
Output
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 или его официальной документации.

Примечание: Вы также можете загружать эти образы виртуальных машин на DigitalOcean для использования в качестве образов облачных серверов, следуя документации по созданию образов DigitalOcean.

Вывод

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

Далее вам может быть интересно ознакомиться с нашим руководством по масштабированию виртуальных машин под ваши потребности.

Source:
https://www.digitalocean.com/community/tutorials/how-to-convert-virtual-machine-image-formats