// Engineering Log

Виртуализация: Часть 5 — QEMU

Опубликовано 22.09.2026

// Быстрый маршрут

Эта статья относится к теме Серверы и инфраструктура.

QEMU — свободный эмулятор и виртуализатор, распространяемый под лицензией GPLv2. Он умеет две разные вещи. Во-первых, эмулировать компьютер целиком, включая процессор другой архитектуры: например, запустить систему для ARM на обычном сервере x86. Во-вторых, работать вместе с ускорителем виртуализации — в Linux это KVM — и тогда виртуальные машины выполняются почти с той же скоростью, что и основная система.

Актуальная стабильная версия на сентябрь 2026 года — QEMU 11.1.1 (26 августа 2026 года).

Как QEMU и KVM делят работу

KVM — модуль ядра Linux, который даёт виртуальной машине прямой доступ к возможностям процессора (Intel VT-x, AMD-V). Сам по себе он не создаёт ни дисков, ни сетевых карт, ни экрана. Эту часть берёт на себя QEMU: он изображает для гостевой системы контроллеры дисков, сетевые адаптеры, USB, видеокарту и загрузчик. Поэтому на сервере с KVM процессы виртуальных машин — это процессы QEMU.

Без ускорителя QEMU переводит каждую инструкцию гостевого процессора в инструкции основного. Это работает на любой архитектуре, но в разы медленнее — для рабочих нагрузок такой режим не подходит, для тестов и разработки его обычно достаточно.

Где QEMU используется, даже если вы о нём не знаете

  • Proxmox VE запускает виртуальные машины через QEMU с KVM; команда qm и веб-интерфейс Proxmox в итоге формируют параметры запуска QEMU.
  • libvirt, virt-manager и Cockpit на обычных Linux-серверах тоже управляют процессами QEMU.
  • UTM на macOS использует QEMU, в том числе для запуска систем x86 на компьютерах Apple с процессорами ARM.
  • Docker собирает образы под другие архитектуры (docker buildx --platform linux/arm64) с помощью пользовательского режима QEMU: отдельные программы чужой архитектуры выполняются прозрачно, без запуска целой виртуальной машины.

Два режима работы

  • Системная эмуляция (qemu-system-x86_64, qemu-system-aarch64 и другие) — полноценная виртуальная машина со своим ядром, дисками и устройствами.
  • Пользовательский режим (qemu-aarch64, qemu-arm и другие) — запуск отдельной программы, собранной под другую архитектуру, в текущей системе Linux. Именно его используют для кросс-сборки и тестов.

Диски: утилита qemu-img

Образы дисков QEMU создаёт и преобразует утилитой qemu-img. Основной формат — qcow2: он занимает на диске столько места, сколько реально записано, и поддерживает снимки. Формат raw проще и немного быстрее, но сразу занимает весь объём.

bash
# создать диск на 40 ГБ в формате qcow2
qemu-img create -f qcow2 disk.qcow2 40G

# посмотреть сведения об образе: формат, заявленный и фактический размер
qemu-img info disk.qcow2

# перевести диск VMware (vmdk) в qcow2 — типичный шаг при переезде с VMware
qemu-img convert -p -f vmdk -O qcow2 server.vmdk server.qcow2

Преобразование convert — основной инструмент при переносе виртуальных машин из VMware или Hyper-V (формат vhdx) в Proxmox и другие платформы на KVM.

Запуск виртуальной машины вручную

На практике машины создают через Proxmox или libvirt, но полезно понимать, что происходит внутри. Минимальный запуск установщика Linux с ускорением KVM:

bash
qemu-system-x86_64 \
  -accel kvm -cpu host \
  -m 4G -smp 2 \
  -drive file=disk.qcow2,if=virtio \
  -cdrom debian.iso -boot d \
  -nic user,model=virtio-net-pci
  • -accel kvm -cpu host — включить KVM и передать гостю возможности реального процессора;
  • -m и -smp — объём памяти и число виртуальных процессоров;
  • if=virtio и virtio-net-pci — паравиртуальные устройства: гостевая система знает, что работает в виртуальной машине, и обменивается данными быстрее, чем с эмуляцией настоящего железа;
  • -nic user — простейшая сеть через NAT без настройки моста; для серверов вместо неё настраивают сетевой мост.

Если процессор или сервер не поддерживает аппаратную виртуализацию (например, в некоторых облачных виртуальных машинах вложенная виртуализация отключена), QEMU с -accel kvm не запустится. Проверить можно так: ls /dev/kvm — файл должен существовать.

Эмуляция другой архитектуры

Запуск системы для ARM на сервере x86 выглядит так:

bash
qemu-system-aarch64 -M virt -cpu cortex-a72 -m 2G \
  -bios QEMU_EFI.fd \
  -drive file=arm-disk.qcow2,if=virtio \
  -nographic

Здесь ускорения KVM нет: процессор ARM эмулируется полностью, и машина работает заметно медленнее. Для проверки прошивок, образов для одноплатных компьютеров и сборки пакетов под ARM этого обычно хватает.

Когда выбирать QEMU напрямую

  • Разработка и тестирование под другие архитектуры — ARM, RISC-V, MIPS, PowerPC.
  • Отладка ядер и загрузчиков: QEMU умеет подключаться к отладчику GDB (-s -S).
  • Автоматизированные тесты образов в CI, где графический интерфейс не нужен.
  • Разовый запуск старой системы из образа диска.

Для постоянной работы серверов QEMU напрямую не используют: удобнее и надёжнее управлять машинами через Proxmox VE или libvirt, которые берут на себя автозапуск, сети, снимки и резервное копирование.

Типичные ошибки

  • Запуск без -accel kvm на сервере, где KVM доступен: машина работает в режиме эмуляции и тормозит без видимой причины.
  • Эмулируемые устройства вместо virtio: диск IDE и сетевая карта e1000 работают медленнее. Для Windows драйверы virtio устанавливают отдельно с образа virtio-win.
  • Копирование qcow2-файла работающей машины: копия может оказаться несогласованной. Машину останавливают или используют снимки и средства резервного копирования платформы.
  • Путаница с форматом: если в -drive не указать format=, QEMU определяет формат автоматически и выводит предупреждение; для raw-образов формат лучше указывать явно.

// Похожая задача

Если у вас похожая ситуация

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

Тема статьи

Серверы и инфраструктура

VPS, Linux, веб-стек, миграции, хостинг, базы данных и базовая эксплуатация.

Часто с этим приходят

  • Перенести сайт или сервис на новый сервер
  • Настроить Linux, Nginx, базу данных и бэкапы
  • Разобраться, почему всё работает нестабильно

// Следующий шаг

Если вам нужна не только статья, а помощь по этой теме, удобнее сразу перейти в услугу. Главная и подборка материалов остаются рядом.

Открыть услуги

// Contact

Нужна помощь?

Свяжись со мной и я помогу решить проблему

Написать в Telegram

Отвечаю в течение рабочего дня (03:00–13:00 GMT)

Или оставьте заявку здесь:

Подтвердите, что вы не бот.

Написать и получить быстрый ответ