// Engineering Log

Виртуализация: Часть 4 — KVM

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

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

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

KVM (Kernel-based Virtual Machine) — подсистема виртуализации, встроенная в ядро Linux с версии 2.6.20. Она использует аппаратную поддержку виртуализации процессора (Intel VT-x, AMD-V) и превращает ядро Linux в гипервизор. Каждая виртуальная машина работает как обычный процесс Linux, поэтому для неё действуют привычные механизмы: планировщик, управление памятью, cgroups.

KVM состоит из модуля kvm.ko и модуля для конкретного процессора — kvm-intel.ko или kvm-amd.ko. Сам KVM отвечает только за выполнение кода ВМ на процессоре. Виртуальные диски, сетевые карты, видеоадаптер и остальные устройства эмулирует QEMU, который работает в пространстве пользователя. Поэтому на практике говорят о связке KVM + QEMU, а ВМ запускают через libvirt — слой управления с утилитой virsh. На этой связке построены Proxmox VE, OpenStack, большинство облачных провайдеров и российские платформы виртуализации.

Проверка поддержки

Процессор должен поддерживать аппаратную виртуализацию, и она должна быть включена в BIOS/UEFI:

bash
grep -Ec '(vmx|svm)' /proc/cpuinfo   # больше нуля — поддержка есть
ls -l /dev/kvm                       # устройство появляется после загрузки модуля

В Ubuntu и Debian есть утилита kvm-ok из пакета cpu-checker: она сообщает, можно ли использовать ускорение KVM, и подсказывает, если виртуализация выключена в BIOS.

Установка на Ubuntu или Debian

bash
sudo apt update
sudo apt install qemu-kvm libvirt-daemon-system virtinst
sudo adduser $USER libvirt     # затем выйти из системы и войти снова
virsh list --all

libvirt-daemon-system ставит службу libvirt, virtinst — утилиту virt-install для создания ВМ. Для управления из графического интерфейса есть virt-manager (настольное приложение) и веб-консоль Cockpit с модулем cockpit-machines, который позволяет создавать, запускать и настраивать ВМ из браузера.

Первая виртуальная машина

Пример установки ВМ с ISO-образа. Команда построена по примеру из документации virt-install:

bash
virt-install --connect qemu:///system \
  --name web01 \
  --memory 4096 --vcpus 2 \
  --disk size=40 \
  --osinfo ubuntu24.04 \
  --cdrom /var/lib/libvirt/images/ubuntu-24.04-live-server-amd64.iso \
  --network bridge=br0
  • --osinfo задаёт тип гостевой ОС, и libvirt подбирает под него настройки по умолчанию; список известных значений выводит virt-install --osinfo list;
  • --disk size=40 создаёт новый диск на 40 ГБ в пуле хранения по умолчанию;
  • --network bridge=br0 подключает ВМ к мосту хоста; без этого параметра ВМ попадает в сеть libvirt по умолчанию.

Повседневное управление:

bash
virsh list --all            # все ВМ и их состояние
virsh start web01           # запустить
virsh shutdown web01        # корректно выключить через гостевую ОС
virsh autostart web01       # запускать вместе с хостом
virsh edit web01            # изменить конфигурацию (XML)

Сеть: NAT или мост

  • Сеть по умолчанию (NAT). libvirt создаёт мост virbr0 и подсеть 192.168.122.0/24. ВМ выходят в интернет через адрес хоста, но из внешней сети к ним напрямую не подключиться. Подходит для рабочей станции и тестов.
  • Мост (bridge). Физический интерфейс хоста включается в мост Linux, например br0, и ВМ оказываются в той же сети, что и хост, со своими адресами. libvirt при этом мостом не управляет: его настраивают средствами системы — в Ubuntu через Netplan. Как описать мост, VLAN и bonding в Netplan — в статье «Netplan: продвинутая настройка сети».

Настраивая мост на удалённом сервере, держите под рукой консоль провайдера: ошибка в конфигурации сети отрежет доступ по SSH.

Диски: qcow2 или raw

  • qcow2 — основной формат QEMU: файл растёт по мере записи данных, поддерживает снимки и сжатие. Удобен, когда нужны снимки и экономия места.
  • raw — образ «как есть», без служебной разметки. Проще и немного быстрее на вводе-выводе, легко переносится в другие системы, но снимков средствами формата не даёт.

Для рабочих ВМ часто используют raw на LVM или ZFS: снимки тогда делает хранилище, а не формат диска.

Чего в KVM нет

KVM и libvirt — это «кирпичи», а не готовая платформа. Из коробки нет:

  • веб-интерфейса управления кластером;
  • высокой доступности с автоматическим перезапуском ВМ на другом хосте;
  • централизованного резервного копирования.

Всё это дают платформы поверх KVM: Proxmox VE, OpenStack, российские zVirt и SpaceVM. «Чистый» KVM с libvirt разумен для одного-двух хостов, стендов разработчиков и случаев, когда инфраструктура и так описана в Ansible или Terraform.

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

  • Виртуализация выключена в BIOS. ВМ запускается без ускорения KVM и работает в разы медленнее; проверяйте /dev/kvm и вывод kvm-ok.
  • Работа под root вместо группы libvirt и доступ к qemu:///system для всех пользователей сервера.
  • Windows без драйверов virtio. Установщик не видит диск на контроллере virtio; образ с драйверами virtio-win подключают вторым приводом при установке.
  • Снимки вместо резервных копий. Снимок qcow2 живёт в том же файле, что и диск ВМ.
  • Нехватка памяти на хосте. Сумма памяти ВМ больше физической — и ядро начинает завершать процессы ВМ при нехватке памяти.

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

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

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

Тема статьи

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

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

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

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

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

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

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

// Contact

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

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

Написать в Telegram

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

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

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

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