Преимущество виртуализации в том, что она позволяет запустить несколько разных операционных систем на одном компьютере одновременно и при этом неважно какой они будут архитектуры. Среди домашних пользователей достаточно часто используются такие программы для эмуляции компьютера, как Virtualbox и VMware, это мощные программы с графическим интерфейсом и множеством возможностей, которые очень просто настроить.
Но существуют и другие решения, которые дают больше контроля над процессом виртуализации и при этом более сложны. Один из таких инструментов - qemu. В этой инструкции мы рассмотрим что такое qemu и как пользоваться qemu для виртуализации, кроме того, разберем его преимущества над другими программами.
Содержание статьи
Что такое qemu?
Qemu - это бесплатный инструмент с открытым исходным кодом для эмуляции и виртуализации работы операционных систем на компьютере. Программа может работать в Windows, Linux, MacOS и даже на Android. Ресурсы хоста, такие как процессор, жесткий диск, память, разделяются между виртуальными машинами.
Qemu использует аппаратную виртуализацию, поэтому может выполнять гостевые операционные системы почти так же быстро, как и на основном железе. Может использоваться гипервизор XEN или модуль ядра KVM в Linux. Qemu может работать в двух режимах работы:
- Полная эмуляция системы - в этом режиме qemu полностью эмулирует устройство, например, компьютер, включая все его компоненты, процессор и различные периферийные устройства. Он может использоваться для запуска нескольких операционных систем без перезагрузки или отладки системного кода.
- Эмуляция пользовательского режима - работает только для Linux хоста, позволяет запускать процессы Linux, скомпилированные для одной архитектуры в другой, например, ARM программы в x86. Полезно для разработки, кросс-компиляции и отладки.
Эмулировать можно такие архитектуры: x86 (32 и 64 бит), PowerPC (32 и 64 бит), ARM, MIPS (32 бит), Sprac (32 и 64 бит), Alpha, ColdFire(m68k), CRISv2 и MicroBlaze. Этот список уже более внушительный чем у Virtualbox.
Установка qemu
Перед тем как мы сможем использовать программу, необходимо ее установить. Если вы используете дистрибутив Linux, например, Ubuntu, то сможете найти программу в официальных репозиториях. Для Ubuntu команда будет выглядеть вот так:
sudo apt install qemu-kvm qemu
Для Fedora и других систем RedHat можно установить группу Virtualization:
sudo dnf install @virtualization
В ArchLinux используйте Pacman:
pacman -S qemu
Для Windows или MacOS вам нужно скачать исполняемый файл из официального сайта. Программа управляется только через терминал, так что вы главном меню системы ничего не появиться после установки. А теперь перейдем к тому как настроить qemu.
Как пользоваться qemu?
Теперь, когда программа установлена и готова к использованию попытаемся разобраться как ее запустить и применять. Но сначала нужно разобраться какие команды и для чего используются. Эмулятор qemu создает много команд, но их можно разделить на группы:
- qemu-архитектура - эмуляция окружения пользователя для указанной архитектуры;
- qemu-system-архитектура - эмуляция полной системы для архитектуры;
- qemu-img - утилита для работы с дисками;
- qemu-io - утилита для работы с вводом/выводом на диск;
- qemu-user - оболочка для qemu-архитектура, позволяет запускать программы других архитектур в этой системе;
- qemu-system - оболочка для qemu-system-архитектура, позволяет полностью эмулировать систему нужной архитектуры.
Сначала разберемся с эмуляцией полной системы, поскольку для решения этой задачи виртуальная машина qemu используется чаще всего, а уже потом перейдем к режиму пользователя.
1. Использование qemu-system
Чтобы вы понимали что и откуда берется для начала рассмотрим опции утилиты qemu-system. Синтаксис команды такой:
$ qemu-system параметры
Куда сложнее здесь синтаксис каждого из параметров:
-имя_параметра имя_опции=значение:значение2
Мы рассмотрим только основные параметры, и их опции, которые нам понадобятся:
- -machine указывает тип компьютера, который вы собрались эмулировать, можно выбрать ubuntu, pc, pc-q35 и другие варианты, смотрите подробнее командой -machine help;
- -cpu - тип процессора, можно передать непосредственно тип процессора, а также дополнительные флаги;
- -smp - включает симуляцию мультипроцессорной архитектуры;
- -boot - позволяет настроить порядок загрузки устройств, a,b - дискета, с - первый жесткий диск, d - CDROM, n-p - загрузка через сеть, по умолчанию виртуальная машина загружается из жесткого диска;
- -m - указывает количество оперативной памяти, доступной машине;
- -k - раскладка клавиатуры по умолчанию;
- -soundhw - подключить звуковую карту к системе;
- -device - подключить указанное устройство к машине, нужно указать драйвер и его опции;
- -name - имя гостевой системы, будет отображаться в верху окна;
- -uuid - установить UUID для системы;
- -fda, fdb - подключить дискету из файла;
- -hda, hdb - подключить жесткий диск из файла;
- -cdrom - подключить оптический диск;
- -usb - включить поддержку USB;
- -usbdevice - подключить USB устройство;
- -display - выбрать тип отображения, доступно sdl, curses, gtk, none, vga и другие;
- -full-screen - запустить в полный экран;
- -no-acpi - отключить поддержку ACPI;
- -net - создать сетевой интерфейс;
- -realtime включить режим реального времени, опции mclock нужно передать значение on;
- -gdb - ожидать подключения отладчика gdb;
- -enable-kvm - включить поддержку kvm;
- -loadvm - загрузить сохраненное состояние;
- -daemonize - сделать процесс фоновым;
- -snapshot - записывать изменения не в файл жесткого диска, а в отдельные файлы;
- -nographic - отключить графический вывод.
- -kernel - использовать указанный образ ядра linux.
- -append - командная строка для ядра;
- -initrd - файл initrd для загрузки Linux.
Мы рассмотрели опции для qemu-system-x86-64, для других архитектур, они могут немного отличаться. А теперь разберем несколько простых примеров как использовать qemu, как создать машину qemu и настроить ее.
Сначала нужно создать жесткий диск для установки. Вы можете использовать реальные жесткие диски, но работать с образами намного удобнее. Можно просто создать пустой файл, заполненный нулями, а затем форматировать его в нужную файловую систему во время установки, но также можно создать файл формата qcow2, этот формат используется по умолчанию в qemu. Воспользуемся командой qemu-img:
qemu-img create -f qcow2 ubuntu.qcow 10G
Опция -f указывает формат нового файла. Теперь мы можем непосредственно перейти к запуску qemu-system. Вот так будет выглядеть самая простая команда запуска системы:
qemu-system-x86_64 -hda ubuntu.qcow -boot d -cdrom ~/downloads/ubuntu-17.04-server-amd64.iso -m 640
Здесь мы подключаем наш жесткий диск как hda, затем указываем что нужно загружаться с cdrom и подключаем образ системы ubuntu к нему. Последний параметр указывает сколько оперативной памяти будет выделено для машины.
Дальше откроется окно, похожее на VritualBox и начнется установка системы. После того как установка будет завершена, вы сможете запускать машину командой:
qemu-system-x86_64 -hda ubuntu.img -m 640
Создавать виртуальную машину с другой архитектурой не очень сложно, достаточно изменить команду. Например, сделаем виртуальную машину ppc:
qemu-system-ppc -hda ubuntu.qcow -boot d -cdrom ~/downloads/ubuntu-17.04-server-amd64.iso -m 640
Поскольку сейчас мы не используем kvm, то система будет работать очень медленно все можно очень сильно ускорить, если его включить с помощью опции -enable-kvm:
qemu-system-x86_64 -hda ubuntu.qcow -m 640 -enable-kvm
По умолчанию в гостевой системе не будет звука, но вы можете подключить туда звуковую карту:
qemu-system-x86_64 -hda ubuntu.qcow -m 640 -enable-kvm -soundhw ac97
Не всегда мы запускаем машину только в качестве сервера, иногда нужно запустить обычную десктопуную систему, в таком случае нам придется настроить виртуальную видеокарту, потому что того, что идет по умолчанию хватит только на консоль. Для этого используется опция -vga:
qemu-system-x86_64 -hda ubuntu.qcow -m 640 -enable-kvm -soundhw ac97 -vga qxl
С помощью опции -global qxl-vga.vram_size можно задать объем видеопамяти, доступный машине, значение указывается в байтах, например:
qemu-system-x86_64 -hda ubuntu.qcow -m 640 -enable-kvm -soundhw ac97 -vga qxl -global qxl-vga.vram_size=4294967
Для многих машин важно чтобы из них был доступ в сеть интернет. Настройка сети qemu - это достаточно обширная тема, которую мы не будем полностью раскрывать в этой статье. Если кратко, то, в qemu используется специальный виртуальный шлюз vlan, который позволяет соединять машины с внешней сетью или между собой. Каждый vlan имеет свой номер. Самый простой способ настроить сеть - использовать такие параметры:
qemu-system-x86_64 -hda ubuntu.qcow -m 640 -enable-kvm -net nic,vlan=0 -net user,vlan=0
Здесь мы два раза вызываем опцию -net, в первый раз создаем виртуальную сетевую карту с помощью параметра -nic и подключаем ее к vlan с номером 0. Вторая же опция -net создает наш vlan 0 с типом конфигурации user, которая не требует дополнительной настройки и автоматически подключается к сети хоста.
2. Использование эмуляции окружения
Теперь рассмотрим использование qemu для эмуляции архитектуры в окружении пользователя. Команда qemu-user или qemu-архитектура позволяет выполнять программы, собранные для другой архитектуры прямо в вашей системе. Это очень часто используется для отладки программ, собранных для arm на компьютере или других подобных задач. Команде достаточно передать команду и ее параметры:
qemu-x86_64 /bin/ls
Точно так же вы можете выполнить arm программу или программу для любой из поддерживаемых архитектур.
Выводы
В этой статье мы очень кратко рассмотрели как пользоваться qemu, основные настройки этой утилиты и опции. На самом деле там намного больше опций и возможностей. Одна только возможность эмулировать такое огромное количество архитектур чего стоит. Если для вас эмулятор qemu слишком сложен через терминал, то можно использовать графический интерфейс, например, virt-manager. А вы используете qemu? Или предпочитаете другие виртуальные машины? Почему? Напишите в комментариях!
Anubis – это максимально легкое open-source решение, созданное специально для защиты небольших веб-ресурсов от бесконечного потока запросов от ботов и AI парсеров. Этот инструмент можно считать "ядерным вариантом", потому что он заставляет ботов выполнять вычисления похожие на майнинг криптовалюты. Но это неплохая альтернатива для тех, кто не может или не хочет использовать Cloudflare. Посмотреть детали










Для общего понимания очень даже сгодится.
В чем преимущества перед VirtualBox, который удобно конфигурируется, шифрует установленные ОСи, поддерживает терминал и тд?
Спасибо.
Проброс твоей реальной видеокарты, вот что за преимущество! Хочешь 3D без потерь? Получи и распишись.
Полностью открыт исходник без закрытых блобов, к тому же обрти внимание на название - он может емулировать разные архитектуры, к примеру АРМ или ПаверПиСи
Например в виртуалбоксе не запустить виртуальную циску.
A как быть с выбором загрузочного устройства во время установки ос ведь после перезагрузки установка должна продолжается с HD а не с DVD ??
Подскажите, пожалуйста, как можно запустить ARM64 образы Debian (ISO) через QEMU?
- Первое действие:
создаешь виртуальный жесткий диск на 20 Gb командой -
$ qemu-img create -f qcow2 manjaro.qcow 20G
- Второе действие:
Запускаешь образ своего установочного диска(напр. debian.iso) и ставишь систему в созданном виртуальном жестком диске командой -
$ qemu-system-x86_64 -hda manjaro.qcow -boot d -cdrom debian.iso -m 3072 -enable-kvm
Это вкратце.
Все было описано в этой статье, прочитай еще раз внимательно )
Это ты внимательно прочти камент, в первых, в твоей команде есть лишние и не доставает опций, а во-вторых, в коменте написано, что человек хочет запустить Debian портированный на архитектуру ARM64!
У меня есть более хорошая команда:
Щас-щас будет)
Качаешь этот образ (ниже объясню, почему netinst)
wget https://cdimage.debian.org/debian-cd/current/arm64/iso-cd/debian-10.0.0-arm64-netinst.iso -O buster_netinst.iso
Качаешь UEFI (без него ничего не заработает):
wget https://getfile.dokpub.com/yandex/get/https://yadi.sk/d/vqT394cWpy8yHg -O QEMU_EFI.fd
Закрываешь и запускаешь терминал и выполняешь:
qemu-system-aarch64 -M virt -m 2048 -cpu cortex-a53 -device VGA -device nec-usb-xhci -device usb-kbd -device usb-mouse -accel tcg -bios QEMU_EFI.fd -cdrom buster_netinst.iso
Но будет работать медленнее на 10-50% (в зависимости от железа), т.к нет kvm, а kvm-arm64 ты на x86_64 не запустишь, на настоящем ноуте ARM64/андроиде получится, соответственно нельзя указать несколько ядер CPU x86. Получится только инсталлятор запустить, а установить сам Debain скорее всего нет. Разные архитектуры, разные технологии, если вкратце.
https://net-labs.in/2015/01/25/%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-%D0%B8-%D0%B7%D0%B0%D0%BF%D1%83%D1%81%D0%BA-debian-8-0-jessie-arm64-%D0%B2-qemu/
Или вот, если что-то необходимо добавить в команду.
В начале команды надо писать qemu-system-x86_64 -m и т.д.
Заябал ужё грёбаный яндекс все вопросы по img к линнуксоидам отправляёт
В Виндовс 10 зачем это стоит?
Расслабся, приятель!
Яндекс правильно делает -- политика Майкрософт состоит в том, что виндовс-пользователи не должны беспокоиться на это счёт. Обновления системы придут сами, да и система сама знает, что лучше пользователю.
Думаю придётся мне свой менеджер QEMU писать , запомнить эти команды будет стоить много времени
[root@oracle user]# dnf provides qemu-system-x86_64
Last metadata expiration check: 14:31:48 ago on Sun 30 Jan 2022 09:30:44 PM MSK.
Error: No Matches found
Нет давно уже такой команды. Надо бы статью обновить
kvm -hda win7.img -m 2000 -net nic,vlan=0 -net user,vlan=0
qemu-system-x86_64: Invalid parameter 'vlan'
Вот так сейчас работает сеть в qemu/kvm:
qemu-system-x86_64 -hda win7.img -m 2000 -enable-kvm -soundhw hda -net nic,vlan=0 -net user,vlan=0 -netdev user,id=user.0 -device e1000,netdev=user.0
Я так и сделал, написал bash скрипт
Доброго времени. Пришел спросить совета, что за функции в qemu-img create -o preallocation=(off, metadata, full) и также что такое lazy refcounts и как его можно использовать при создании образа в kvm.
Спасибо
обновил qemu с 5.0 до версии 5.2 из репозитория дебиана. Но опция extended_l2 так и не появилась. При попытке создать образ с указанием размера кластера cluster_size=1M выдает ошибку
qemu-img: /opt/astra/qemu/qemu-5.0/block/qcow2-cluster.c:995: qcow2_alloc_cluster_link_l2: Assertion `(offset & L2E_OFFSET_MASK) == offset' failed.
Как решить?
Что за виртальный коммутатор vlan?
qemu-system-x86_64: vlan=0: Could not open 'vlan=0': No such file or directory
qemu-system-x86_64 -enable-kvm -net nic,vlan=0 -net user,vlan=0 -netdev user,id=user.0 -device e1000,netdev=user.0
qemu-system-x86_64: -net nic,vlan=0: Invalid parameter 'vlan'
apt install vlan
Много ума наверно нужно да?
Интересно было бы осветить тему кластеров, на qemu/kvm, если возможно?.....
qemu-system-x86_64 -hda ubuntu.img -m 640
Опечатка? он к примеру на qcow должен посмотреть а не на img
А памяти, как сама программа контейнер в которой запускаются другие оси, по сравнению с Virtualbox, QEMU на сколько меньше ест?
да
Ошибка в команде, которой запускается только установленная виртуальная машина: вместо qemu-system-x86_64 -hda ubuntu.img -m 640 должно быть qemu-system-x86_64 -hda ubuntu.qcow -m 640