Установка виртуальных машин QEMU/KVM на рабочей станции или сервере
Categories:
Зачем я использую виртуализацию?
Виртуализация — это когда на одном физическом компьютере работает несколько отдельных компьютеров одновременно. Или скорее мне это понадобилось, когда активно изучал загрузчик GRUB со всеми тонкостями. Так вообще хватает контейнеров, но для тестирования новой версии linux отличная идея.
Как это работает:
- Есть реальный компьютер (хост)
- На нём запускают специальную программу (гипервизор)
- Эта программа создаёт виртуальные компьютеры (гостевые ВМ)
- Каждая ВМ имеет свой процессор, память, диск, сеть (виртуальные)
Зачем нужно:
- Тестирование ПО без риска для основной системы
- Запуск Windows на Linux и наоборот
- Изоляция приложений
VirtualBox
Что это: Программа для виртуализации от Oracle. Бесплатная, простая, кроссплатформенная.

Плюсы:
- Очень простой интерфейс
- Работает на Windows, Linux, macOS
- Подходит для новичков
- Не требует включения VT-x в BIOS (это конструктивные особенности материнской платы вашего компьютера поддерживать виртуализацию, зайдите в BIOS и включите ее если она выключена)
Минусы:
- Медленнее чем KVM
- Проблемы с 3D-графикой
- Нет официальной поддержки в RHEL/CentOS (для меня не так существенно, хоть и очень люблю fedora)
virt-manager (KVM/QEMU)
Что это: Графическая программа для управления виртуализацией KVM/QEMU в Linux. Стандарт для RHEL/Fedora/CentOS.

Плюсы:
- Очень высокая производительность (почти как на реальном железе)
- Встроен в ядро Linux
- Поддержка огромных серверных конфигураций
- Тонкая настройка всех параметров
Минусы:
- Только для Linux
- Сложнее для новичков
- Требует включения виртуализации в BIOS (я про это написал выше)
Можно использовать: Для серверов, production-среды, ресурсоёмких ВМ, работы с Docker и Podman вместе с ВМ.
Установка VirtualBox на Fedora — пошаговая инструкция
Шаг 1: Удалите старые версии (если были)
sudo dnf remove VirtualBox virtualbox
Шаг 2: Установите зависимости
sudo dnf install kernel-devel kernel-headers dkms gcc make perl elfutils-libelf-devel
Важно: Перезагрузите систему после установки kernel-devel:
sudo reboot
Шаг 3: Добавьте репозиторий VirtualBox
sudo dnf config-manager --add-repo https://download.virtualbox.org/virtualbox/rpm/fedora/virtualbox.repo
Если нет config-manager:
sudo dnf install dnf-plugins-core
Шаг 4: Импортируйте ключ GPG
sudo rpm --import https://www.virtualbox.org/download/oracle_vbox.asc
Шаг 5: Установите VirtualBox
sudo dnf install VirtualBox-7.2.6
Шаг 6: Добавьте пользователя в группу vboxusers
sudo usermod -aG vboxusers $USER
Шаг 7: Соберите модули ядра
sudo /sbin/vboxconfig
Шаг 8: Перезагрузите систему
sudo reboot
Шаг 9: Проверьте установку
# Проверить загрузку модулей
lsmod | grep vbox
# Запустить VirtualBox
virtualbox
Если Secure Boot включён — два варианта:
Вариант А — Отключить Secure Boot (проще)
- Войдите в BIOS/UEFI (F2, F10, F12, Del)
- Найдите Secure Boot → Disable
- Сохраните и выйдите
Вариант Б — Подписать модули (безопаснее)
sudo dnf install kmodtool
sudo kmodgenca -a
sudo mokutil --import /etc/pki/akmods/certs/public_key.der
sudo reboot
При загрузке появится синий экран MOK — выберите “Enroll MOK” и подтвердите.
Установка Extension Pack (дополнительно)
Для USB 2.0/3.0, RDP, NVMe:
wget https://download.virtualbox.org/virtualbox/7.2.6/Oracle_VM_VirtualBox_Extension_Pack-7.2.6.vbox-extpack
sudo VBoxManage extpack install Oracle_VM_VirtualBox_Extension_Pack-7.2.6.vbox-extpack
Версию уточните на virtualbox.org
Гостевые дополнения (Guest Additions)
Внутри виртуальной машины:
Устройства → Подключить образ Guest Additions → Запустить
Проверка после установки:
vboxmanage --version
systemctl status vboxdrv
groups | grep vboxusers
VirtualBox установлен и готов к созданию виртуальных машин.
Установка QEMU/KVM на Fedora — пошаговая инструкция
Шаг 1: Проверьте поддержку виртуализации
# Проверка, включена ли виртуализация в BIOS
grep -E "vmx|svm" /proc/cpuinfo
Если есть вывод с vmx (Intel) или svm (AMD) — виртуализация включена.
Если вывод пустой:
- Войдите в BIOS/UEFI (F2, F10, F12, Del)
- Включите Intel VT-x / AMD-V
- Сохраните и перезагрузитесь
Шаг 2: Установите группу пакетов виртуализации
sudo dnf install @virtualization
Эта команда установит:
qemu-kvm— основной эмуляторlibvirt— управление виртуализациейvirt-manager— графический интерфейсvirt-install— создание ВМ из терминала- И другие необходимые компоненты
Шаг 3: Запустите и включите службу libvirtd
sudo systemctl start libvirtd
sudo systemctl enable libvirtd
Шаг 4: Добавьте пользователя в группу libvirt
sudo usermod -aG libvirt $USER
Важно! После этой команды нужно выйти из системы и зайти снова или перезагрузить компьютер:
sudo reboot
Шаг 5: Проверьте установку
# Проверить статус службы
systemctl status libvirtd
# Проверить, что пользователь в группе
groups | grep libvirt
# Проверить виртуальную сеть
virsh net-list --all
virsh net-start default
virsh net-autostart default
Шаг 6: Запустите virt-manager
virt-manager
Или через меню приложений
Создание первой виртуальной машины
Через графический интерфейс (virt-manager):
- Нажмите кнопку “Создать новую виртуальную машину”
- Выберите источник установки:
- Локальный ISO-файл
- Сетевая установка (HTTP/FTP)
- Импорт существующего образа
- Выберите ISO-образ ОС
- Настройте RAM и CPU
- Создайте виртуальный диск
- Завершите настройку и начните установку
Через терминал (virt-install):
sudo virt-install \
--name fedora-vm \
--ram 2048 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/fedora-vm.qcow2,size=20 \
--os-variant fedora38 \
--network network=default \
--graphics spice \
--cdrom /путь/к/fedora.iso
Полезные команды для управления
# Список виртуальных машин
virsh list --all
# Запустить ВМ
virsh start имя_вм
# Остановить ВМ
virsh shutdown имя_вм
# Принудительно выключить
virsh destroy имя_вм
# Удалить ВМ
virsh undefine имя_вм
virsh vol-delete --pool default имя_вм.qcow2
# Войти в консоль ВМ
virsh console имя_вм
Настройка сети (если нужно)
Мост (bridge) для внешнего доступа:
# Создать bridge
nmcli connection add type bridge ifname br0
# Подключить Ethernet к мосту
nmcli connection add type ethernet slave-type bridge con-name bridge-br0 ifname enp0s3 master br0
# Включить мост
nmcli connection up br0
Проброс USB-устройств
В virt-manager:
- Откройте настройки ВМ
- Добавить оборудование → USB Host Device
- Выберите устройство из списка
Оптимизация производительности
Включите hugepages:
echo 1024 | sudo tee /proc/sys/vm/nr_hugepages
Используйте virtio драйверы:
- Диски: virtio-scsi или virtio-blk
- Сеть: virtio-net
- Это даёт прирост производительности ~30%
Удаление KVM/libvirt
sudo dnf remove @virtualization
sudo rm -rf /var/lib/libvirt
sudo rm -rf /etc/libvirt
Проверочный лист после установки:
- Виртуализация включена в BIOS
- Пакеты установлены:
dnf groupinfo virtualization - Служба работает:
systemctl status libvirtd - Пользователь в группе:
groups | grep libvirt - Сеть работает:
virsh net-list --all - virt-manager запускается
QEMU/KVM установлен и готов к работе.
Команда sudo dnf install @virtualization устанавливает группу пакетов (пакетную группу) для виртуализации.
Что значит @ ?
Символ @ в DNF означает группу пакетов, а не отдельный пакет.
Что устанавливается:
Группа @virtualization включает все необходимые пакеты для работы с KVM/QEMU:
Основные компоненты:
qemu-kvm— основной эмуляторlibvirt— библиотека для управления виртуализациейvirt-install— утилита для создания ВМ из командной строкиvirt-viewer— клиент для просмотра ВМvirt-manager— графический интерфейс (GUI)libvirt-client— клиентские утилитыlibvirt-daemon-config-network— сетевые настройкиlibvirt-daemon-config-nwfilter— фильтры сетиedk2-ovmf— UEFI поддержкаguestfs-tools— инструменты для работы с образами дисков
Как посмотреть состав группы:
# Список всех групп
dnf group list
# Информация о группе virtualization
dnf group info virtualization
# Показать пакеты в группе
dnf group info virtualization | grep -E "Mandatory|Default|Optional"
Без GUI (только командная строка):
sudo dnf install @virtualization-headless
Установка отдельных компонентов:
# Только ядро виртуализации
sudo dnf install qemu-kvm libvirt
# Только virt-manager (GUI)
sudo dnf install virt-manager
После установки:
# Запустить libvirtd
sudo systemctl start libvirtd
sudo systemctl enable libvirtd
# Добавить пользователя в группу
sudo usermod -aG libvirt $USER
# Проверить установку
virsh list --all
Краткий справочник команд QEMU/KVM (CLI)
Управление виртуальными машинами (virsh)
# Список ВМ
virsh list # запущенные
virsh list --all # все
# Управление состоянием
virsh start vm-name # запуск
virsh shutdown vm-name # выключение (ACPI)
virsh destroy vm-name # принудительно
virsh reboot vm-name # перезагрузка
virsh reset vm-name # аппаратный сброс
virsh suspend vm-name # пауза
virsh resume vm-name # возобновить
# Удаление
virsh undefine vm-name # удалить конфиг
virsh undefine --remove-all-storage vm-name # удалить с диском
# Консоль
virsh console vm-name # подключиться к serial console
virsh vncdisplay vm-name # показать порт VNC
Создание ВМ (virt-install)
# Базовая установка с ISO
virt-install \
--name vm-name \
--ram 2048 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/vm.qcow2,size=20 \
--os-variant fedora38 \
--network network=default \
--graphics spice \
--cdrom /path/to/os.iso
# Без графики (текстовый режим)
virt-install \
--name vm-name \
--ram 2048 \
--vcpus 2 \
--disk size=10 \
--os-variant ubuntu22.04 \
--network default \
--graphics none \
--console pty,target_type=serial \
--location 'http://archive.ubuntu.com/ubuntu/dists/jammy/main/installer-amd64/'
# Импорт существующего образа
virt-install \
--name vm-name \
--ram 2048 \
--vcpus 2 \
--disk /var/lib/libvirt/images/existing.qcow2 \
--import \
--network default \
--os-variant fedora38
Управление образами дисков (qemu-img)
# Создать образ
qemu-img create -f qcow2 disk.qcow2 20G
# Информация об образе
qemu-img info disk.qcow2
# Увеличить размер
qemu-img resize disk.qcow2 +10G
# Конвертировать форматы
qemu-img convert -f qcow2 -O raw disk.qcow2 disk.raw
# Создать снапшот (qcow2)
qemu-img snapshot -c snap1 disk.qcow2
# Список снапшотов
qemu-img snapshot -l disk.qcow2
# Откатить снапшот
qemu-img snapshot -a snap1 disk.qcow2
Управление сетью
# NAT сеть (default)
virsh net-list --all
virsh net-start default
virsh net-autostart default
# Создать изолированную сеть
virsh net-define isolated-network.xml
virsh net-start isolated
virsh net-autostart isolated
# Мост (bridge)
brctl show
nmcli connection add type bridge ifname br0
nmcli connection add type ethernet slave-type bridge con-name br0-slave ifname eth0 master br0
# Информация о интерфейсах ВМ
virsh domiflist vm-name
virsh domifaddr vm-name # IP адреса
isolated-network.xml:
<network>
<name>isolated</name>
<bridge name='virbr1'/>
<ip address='192.168.100.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.100.10' end='192.168.100.100'/>
</dhcp>
</ip>
</network>
Управление хранилищем
# Список пулов
virsh pool-list --all
# Информация о пуле
virsh pool-info default
# Список томов
virsh vol-list --pool default
# Создать том
virsh vol-create-as default newvm.qcow2 20G --format qcow2
# Клонировать том
virsh vol-clone --pool default source.qcow2 clone.qcow2
# Удалить том
virsh vol-delete --pool default vm.qcow2
Настройка ВМ (virsh edit)
# Редактировать конфиг
virsh edit vm-name
# Добавить CPU (горячее подключение)
virsh setvcpus vm-name 4 --live
# Добавить память
virsh setmem vm-name 4G --live
# Добавить диск
virsh attach-disk vm-name /path/to/disk.qcow2 vdb --live
# Отключить диск
virsh detach-disk vm-name vdb
# Добавить сетевой интерфейс
virsh attach-interface vm-name bridge virbr0 --live
# Проброс USB
virsh attach-device vm-name usb-device.xml
usb-device.xml:
<hostdev mode='subsystem' type='usb'>
<source>
<vendor id='0x1234'/>
<product id='0x5678'/>
</source>
</hostdev>
Снапшоты
# Создать снапшот
virsh snapshot-create-as vm-name snap1 "Описание"
# Список снапшотов
virsh snapshot-list vm-name
# Информация о снапшоте
virsh snapshot-info vm-name --snapshotname snap1
# Откатить
virsh snapshot-revert vm-name snap1
# Удалить снапшот
virsh snapshot-delete vm-name snap1
Мониторинг и отладка
# Статистика
virsh domstats vm-name
virsh dommemstat vm-name
virsh domblkstat vm-name
virsh domifstat vm-name vm-net
# Информация о ВМ
virsh dominfo vm-name
virsh vcpuinfo vm-name
virsh domblklist vm-name
virsh domiflist vm-name
# Логи
journalctl -u libvirtd -f
dmesg | grep -i kvm
Прямой запуск QEMU (без libvirt)
# Минимальный запуск
qemu-system-x86_64 \
-name vm1 \
-m 1024 \
-drive file=disk.qcow2,format=qcow2 \
-netdev user,id=net0 \
-device virtio-net-pci,netdev=net0
# С CD-ROM и загрузкой с него
qemu-system-x86_64 \
-cdrom os.iso \
-boot d \
-hda disk.qcow2 \
-m 2048 \
-enable-kvm
Полезные однострочники
# Узнать OS-variant
osinfo-query os
# Показать IP всех ВМ
for vm in $(virsh list --name); do echo "$vm: $(virsh domifaddr $vm | grep ipv4 | awk '{print $4}')"; done
# Завершить все ВМ
virsh list --name | xargs -I {} virsh shutdown {}
# Удалить все выключенные ВМ
virsh list --all --name | xargs -I {} virsh undefine {} --remove-all-storage
# Бэкап диска ВМ
virsh dumpxml vm-name > vm-backup.xml
cp /var/lib/libvirt/images/vm.qcow2 vm-backup.qcow2
Краткий справочник
| Действие | Команда |
|---|---|
| Создать ВМ | virt-install ... |
| Запустить | virsh start vm |
| Остановить | virsh shutdown vm |
| Удалить | virsh undefine --remove-all-storage vm |
| Список ВМ | virsh list --all |
| Консоль | virsh console vm |
| Создать диск | qemu-img create -f qcow2 disk.qcow2 20G |
| Инфо о диске | qemu-img info disk.qcow2 |
| Редакт. конфиг | virsh edit vm |
| Снапшот | virsh snapshot-create-as vm snap1 |
| Откат | virsh snapshot-revert vm snap1 |