Как установить виртуальную машину на Linux с QEMU/KVM

Виртуальная машина (ВМ) позволяет запускать и тестировать операционные системы без изменения разделов жёсткого диска. QEMU и KVM — распространённый тандем для нативной виртуализации в Linux: QEMU эмулирует аппаратную платформу и обеспечивает гибкость, а KVM даёт аппаратное ускорение через ядро Linux.
В этом руководстве показано, как настроить виртуальную машину на Ubuntu (Debian‑based) с использованием QEMU/KVM и установить в ней Manjaro Linux как пример гостевой ОС. Подход применим и к другим дистрибутивам и гостям (включая Windows).
О чём эта статья
- Пошаговая установка QEMU/KVM на Ubuntu
- Проверка поддержки виртуализации и загрузка модулей
- Создание виртуального диска с qemu-img
- Установка гостевой ОС из ISO через QEMU/KVM
- Настройка сети: NAT, мост (bridged) и рекомендации
- Резервные копии, снимки (snapshots) и миграция дисков
- Советы по безопасности и производительности
- Чек‑листы для админа, разработчика и тестировщика
- Критерии приёмки и примеры команд
Что такое QEMU и KVM
QEMU — это эмулятор и «hosted» виртуальный монитор машин, способный эмулировать архитектуру CPU. Без KVM QEMU работает полностью в программной эмуляции, что медленнее.
KVM (Kernel Virtual Machine) — модуль ядра Linux, который превращает Linux в гипервизор типа 1. KVM использует аппаратные расширения процессора (Intel VT‑x или AMD‑V) для ускорения гостевых систем.
Примеры ключевых компонентов и терминов (одной строкой):
- QEMU: эмуляция устройств и образов дисков.
- KVM: аппаратное ускорение через модуль ядра.
- libvirt: API/демон для управления виртуальными машинами (virsh, virt‑manager).
- qemu-img: утилита для создания и конвертации образов дисков.
Требования и подготовка
- Совместимый CPU: Intel (vmx) или AMD (svm). Проводим быструю проверку:
egrep -c '(vmx|svm)' /proc/cpuinfoРезультат > 0 означает наличие аппаратной поддержки виртуализации.
- Права администратора (sudo).
- Доступ в интернет для загрузки пакетов и ISO.
- Рекомендуем минимум 8 ГБ свободного места для образов и 4 ГБ RAM для гостя (зависит от задачи).
Важно: если на хосте включены функции безопасности (SELinux, AppArmor), проверьте совместимость с libvirt и QEMU; в Ubuntu обычно используется AppArmor с профилями для libvirt.
Установка QEMU/KVM и зависимостей (Ubuntu/Debian)
Обновите индексы пакетов:
sudo apt updateУстановите необходимые пакеты:
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-managerПояснения:
- qemu-kvm — сам QEMU с поддержкой KVM.
- libvirt-daemon-system и libvirt-clients — демон и клиенты для управления ВМ.
- bridge-utils — инструменты для настройки сетевых мостов.
- virt-manager — графический менеджер виртуальных машин (альтернатива командной строке).
После установки загрузите модуль KVM для вашей архитектуры:
Для Intel:
sudo modprobe kvm-intelДля AMD:
sudo modprobe kvm-amdПроверьте, что модуль загружен:
lsmod | grep kvmДобавьте вашего пользователя в группы libvirt и kvm, чтобы запускать ВМ без sudo:
sudo usermod -aG libvirt,kvm $(whoami)Выйдите и снова войдите в сессию (или выполните newgrp), чтобы изменения групп вступили в силу.
Запустите и проверьте демон libvirt:
systemctl enable --now libvirtd
sudo virsh list --allЕсли virsh отвечает, libvirt работает корректно.
Создание каталога для ВМ и виртуального диска
Рекомендуем хранить образы в отдельной папке: ~/KVM
cd ~
mkdir -p KVM
cd KVMСоздайте файл диска QCOW2 (экономит место, поддерживает снимки):
qemu-img create -f qcow2 manjaro_disk.img 12GПояснение опций:
- -f qcow2 — формат QCOW2 (экономия пространства, copy‑on‑write).
- 12G — начальный максимально выделяемый размер. QCOW2 резервирует только используемое пространство.
Альтернативы форматов: raw (быстрее, но занимает место), vmdk/ vdi (совместимость с другими гипервизорами).
Подготовка ISO гостевой системы
Скачайте ISO гостевой ОС (в нашем примере Manjaro XFCE). Поместите ISO, например, в ~/Downloads.
Проверьте хеш ISO (опционально) для уверенности в целостности:
sha256sum ~/Downloads/manjaro-xfce-*.isoУстановка гостевой ОС через QEMU/KVM (CLI)
Для инициализации установки вы можете использовать команду kvm (в некоторых системах это бинарник‑алиас) или qemu-system-x86_64 с включением KVM:
qemu-system-x86_64 -enable-kvm -m 2048 -cdrom ~/Downloads/manjaro-xfce-20.2.1-210103-linux59.iso -boot d ~/KVM/manjaro_disk.imgПояснения:
- -enable-kvm — включает аппаратное ускорение.
- -m 2048 — выделяет 2048 МБ RAM для установки (подберите под вашу машину).
- -cdrom — путь к ISO как к виртуальному CD.
- -boot d — загрузка с виртуального CDROM.
Если используется более старая команда «kvm», допускается её использование так же, как в примере выше.
Примечание: даже без физического CDROM опция -cdrom остаётся валидной и необходимой для установки.
Пример установки: шаги в инсталляторе
- При первом запуске появится меню загрузки Manjaro — выберите «Boot with open source drivers» и нажмите Enter.
- Войдя в live‑режим, нажмите “Launch installer”.
- Выберите язык, локацию и раскладку клавиатуры.
- Разметьте виртуальный диск — выберите «Erase disk» (это безопасно для виртуального диска).
- При желании включите шифрование образа (рекомендуется для переносимых образов с конфиденциальными данными).
- Установите пользователя и пароль; можно использовать один и тот же пароль для администратора.
- Дождитесь завершения установки и нажмите “Done”.
Запуск установленной виртуальной машины
После установки запустите ВМ с диска:
qemu-system-x86_64 -enable-kvm -m 2048 ~/KVM/manjaro_disk.imgИли, в сокращённом виде (иногда доступно как kvm):
kvm -m 2048 ~/KVM/manjaro_disk.imgЕсли хотите графический интерфейс управления — используйте virt‑manager: запустите “virt-manager” из меню или через терминал, подключитесь к локальной сессии libvirt и импортируйте созданный диск.
Сетевые схемы: NAT vs мост (bridged)
NAT (по умолчанию через libvirt): гостевая система выходит в сеть через адрес хоста. Это простая и безопасная схема для большинства задач (интернет‑доступ имеется, входящие подключения извне — нет).
Bridged (мост): гость получает IP в той же подсети, что и хост. Подходит, если нужен прямой доступ к ВМ из сети (серверы, тестирование сетевых сервисов).
Создание мостового интерфейса можно выполнить через NetworkManager/netplan/systemd‑networkd в зависимости от дистрибутива. Пример с bridge-utils (классический способ):
sudo ip link add name br0 type bridge
sudo ip link set dev br0 up
sudo ip addr flush dev eth0
sudo ip link set dev eth0 master br0
sudo dhclient br0Затем в команде qemu укажите сетевую карту:
-netdev bridge,id=hn0,br=br0 -device virtio-net-pci,netdev=hn0Примечание: современные версии QEMU рекомендуют использовать параметр -netdev вместо устаревших -net.
Снимки, бэкап и конвертация дисков
- Создание снимка (snapshot) QCOW2 можно выполнять через qemu-img или через libvirt (virsh snapshot).
- Резервное копирование образа: скопируйте QCOW2 файл либо используйте qemu-img convert для создания raw‑образа.
Пример конвертации в raw:
qemu-img convert -O raw manjaro_disk.img manjaro_disk.rawСоздание экспортируемого образа для переноса на другой хост:
qemu-img convert -O qcow2 manjaro_disk.img /path/to/target/manjaro_export.imgКопирование активного QCOW2 с минимальным простоем можно сделать через qemu‑img convert, но для консистентности рекомендуется остановить ВМ или использовать live‑snapshot инструменты.
Производительность и рекомендации
- Используйте virtio‑драйверы для сетевого и дискового ввода/вывода (паравиртуализация) — это значительно повышает производительность.
- Для быстрого дискового ввода/вывода предпочтителен raw‑формат на быстрых дисках; QCOW2 удобен для экономии пространства и снимков.
- Для графики используйте опции -vga virtio или SPICE/VNC для удалённого доступа.
- Для максимальной производительности включите в QEMU/VM опции CPU passthrough или задайте модель CPU host:
-cpu hostЭто позволит гостю использовать те же инструкции, что и хост (с учётом безопасности и совместимости).
Безопасность и шифрование
- Шифруйте образы, если переносите их или храните на носителях без защиты. Manjaro и большинство дистрибутивов поддерживают LUKS при установке.
- Ограничьте доступ к сокетам libvirt (обычно /var/run/libvirt/libvirt-sock) и следите за правами групп.
- Если доступ к ВМ возможен извне (bridged), используйте брандмауэр и вопросы безопасных паролей.
- AppArmor/SELinux: проверьте сообщения в журнале при проблемах запуска — профили могут блокировать доступ к файлам образов.
Отладка — частые ошибки и решения
- «KVM not available» — проверьте /proc/cpuinfo на vmx/svm, убедитесь, что модуль kvm‑intel/kvm‑amd загружен.
- Проблемы с правами: убедитесь, что пользователь в группе libvirt и kvm.
- Сеть не работает в госте: проверьте настройки NAT/bridge, iptables/ufw на хосте.
- Медленная работа диска: проверьте тип образа (qcow2 vs raw) и драйвер virtio в госте.
- Ошибки AppArmor: временно отключите профиль или добавьте исключение для каталогов с образами.
Альтернативные подходы
- virt‑manager — удобная GUI‑альтернатива для создания/настройки ВМ.
- Cockpit + cockpit‑machines — веб‑ интерфейс для управления виртуализацией.
- LXC/LXD — легковесная контейнеризация вместо полной виртуализации, если нужен изолированный Linux без полного эмулятора аппаратуры.
- VirtualBox / VMware — удобны на десктопах, если нужна кросс‑платформенность или специфичные гостевые интеграции.
Миграция и совместимость
- Для переноса на другой хост используйте qemu-img convert и затем импорт в libvirt/virt‑manager.
- При переносе между машинами с разными CPU используйте -cpu host или конвертацию при помощи опции compat=0 в qemu-img (сложно — тестируйте).
- Проверьте версии QEMU/KVM на целевых хостах, чтобы избежать несовместимости форматов.
Чек‑лист: Быстрый справочник по командам
Проверка аппаратной поддержки:
egrep -c '(vmx|svm)' /proc/cpuinfoУстановка пакетов (Ubuntu):
sudo apt update sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-managerЗагрузка модуля KVM:
sudo modprobe kvm-intel # или kvm-amdСоздание QCOW2 диска:
qemu-img create -f qcow2 manjaro_disk.img 12GУстановка гостя:
qemu-system-x86_64 -enable-kvm -m 2048 -cdrom ~/Downloads/manjaro.iso -boot d ~/KVM/manjaro_disk.imgЗапуск установленного гостя:
qemu-system-x86_64 -enable-kvm -m 2048 ~/KVM/manjaro_disk.imgКонвертация в raw:
qemu-img convert -O raw manjaro_disk.img manjaro_disk.rawСписок виртуальных машин libvirt:
virsh list --all
Роль‑ориентированные чек‑листы
Администратор:
- Проверить аппаратную поддержку и загрузку модулей.
- Настроить libvirt и права доступа.
- Настроить резервное копирование образов.
- Настроить мониторинг и бэкап конфигураций сети.
Разработчик:
- Создать быстрый шаблон ВМ (образ + cloud-init или preseed).
- Включить shared folders или 9p/virtiofs для обмена данными.
- Версионировать образы и скрипты сборки.
Тестировщик:
- Использовать снимки для возврата в чистое состояние.
- Автоматизировать развёртывания с помощью Terraform/Ansible (libvirt провайдеры доступны).
- Проверять сетевые сценарии (NAT, bridge, VLAN).
Офицер по безопасности:
- Шифровать образы при необходимости.
- Ограничить доступ к libvirt сокету.
- Регулярно обновлять пакетный стек QEMU/KVM/libvirt.
Критерии приёмки
- ВМ успешно запускается и достигает загрузочного экрана гостевой ОС.
- Гость получает сетевой доступ в соответствии с выбранной схемой (NAT или bridge).
- Доступ в гостевую ОС возможен по консоли (VNC/Spice) или через GUI (virt‑manager).
- Образы дисков сохранены в каталоге ~/KVM и существуют резервные копии/снимки.
- Пользователь может управлять ВМ без sudo (входит в группы libvirt/kvm).
Частые случаи, когда этот подход не подходит
- Требуется полностью нативный доступ к аппаратуре GPU/PCIe для задач высокой производительности — тогда рассматривайте прямую передачу устройств (PCI passthrough) или bare‑metal установку.
- Если нужно лёгкое изолированное Linux‑окружение с минимальными накладными расходами — лучше использовать контейнеры (LXC/LXD, Docker).
Небольшая памятка (cheat sheet)
- Быстрая остановка ВМ из терминала: Ctrl+C в окне qemu или virsh shutdown
. - Форсированное завершение: virsh destroy
(экстренно). - Снимок через virsh: virsh snapshot-create-as
snap1 “Описание” –disk-only –atomic
Короткий глоссарий
- Гость — ОС, запущенная внутри виртуальной машины.
- Хост — физическая машина, на которой работает гипервизор.
- QCOW2 — формат образа диска с поддержкой копирования‑при‑записи и снимков.
- virtio — набор паравиртуальных драйверов для повышения производительности.
Заключение
QEMU/KVM — надёжный и гибкий стек виртуализации для Linux. Он подходит как для локальной разработки и тестирования, так и для продакшн‑развёртываний при правильной конфигурации сети, безопасности и резервного копирования. В этом руководстве вы получили пошаговые команды, практические советы по сети и безопасности, варианты для альтернативных сценариев и чек‑листы для разных ролей.
Если нужно, могу подготовить краткую автоматизированную инструкцию для Ansible/Cloud‑Init, конфигурационный файл libvirt XML или пример настройки мостового интерфейса под конкретный дистрибутив.