Это руководство предоставляет полный набор проверенных команд для быстрого развертывания и администрирования виртуальных машин на серверах Linux без графического интерфейса. Вы шаг за шагом настроите стек технологий KVM, QEMU и libvirt на дистрибутивах Ubuntu, Debian или CentOS, используя только терминал. Материал охватывает управление жизненным циклом ВМ, виртуальными дисками, сетевыми конфигурациями и автоматизацию с помощью cloud-init. Инструкции проверены на практике и актуальны для задач 2026 года, экономя ваше время на поиск разрозненной информации.
Вы получите конкретные команды для установки, создания первой ВМ и её ежедневного администрирования. Руководство закрывает ключевые вопросы: как настроить окружение, управлять ВМ через virsh, организовать сетевой доступ и автоматизировать начальную настройку. Эти навыки позволяют развертывать собственную инфраструктуру, аналогичную услугам VDS/VPS хостинг-провайдеров, на вашем оборудовании.
Введение в стек виртуализации KVM/QEMU/libvirt для серверной инфраструктуры
Стек KVM, QEMU и libvirt образует основу для профессиональной виртуализации в Linux-средах. KVM (Kernel-based Virtual Machine) - это модуль ядра Linux, который превращает его в гипервизор Type-1. Он отвечает за непосредственное взаимодействие с аппаратными возможностями виртуализации процессора (Intel VT-x или AMD-V). QEMU - это эмулятор и менеджер устройств, который предоставляет виртуальные компоненты (диски, сетевые карты, видео) для гостевых операционных систем. Libvirt выступает как уровень абстракции и единый API для управления различными гипервизорами, включая KVM/QEMU, через инструменты вроде virsh и virt-install.
Технически, VDS (Virtual Dedicated Server) и VPS (Virtual Private Server), предлагаемые хостинг-провайдерами, часто работают именно на этом стеке. Вы создаете аналогичную инфраструктуру на своем железе.
KVM, QEMU, libvirt: кто за что отвечает в 2026 году?
Разделение обязанностей между компонентами стека можно представить по аналогии. KVM - это «двигатель» гипервизора, который обеспечивает прямую виртуализацию на уровне процессора. QEMU выполняет роль «бортового компьютера»: он эмулирует устройства (например, сетевую карту e1000 или контроллер диска virtio) и предоставляет монитор для взаимодействия с ВМ. Libvirt - это «пульт дистанционного управления и API»: он предоставляет единый интерфейс (virsh, virt-install, библиотеки) для создания, настройки и управления ВМ, скрывая низкоуровневые детали QEMU.
На практике связка работает так: вы даете команду virt-install (часть libvirt), которая через API libvirt запускает QEMU с указанными параметрами. QEMU, в свою очередь, использует модуль KVM для ускорения виртуализации процессора. В результате создается изолированная виртуальная машина, работающая почти на нативной скорости.
Почему терминальное управление виртуализацией остается ключевым навыком?
Работа через терминал - обязательный навык для администрирования серверов. Это обеспечивает воспроизводимость: все действия можно записать в скрипты (Bash, Python) и выполнять автоматически. Удаленное администрирование через SSH становится единственным способом управления headless-серверами в дата-центрах. Терминальные инструменты создают меньшую нагрузку на систему, так как не требуют графического стека X11 или Wayland.
Автоматизация в CI/CD и практики Infrastructure as Code (IaC) напрямую зависят от возможности программного управления ВМ через API и CLI. Проблемы с графическими сессиями, например ошибки «Video remoting was disconnected» при подключении к GUI ВМ на Hyper-V через Enhanced Session, подтверждают ненадежность графических протоколов (Xrdp, XVnc) в удаленных сценариях. Терминальное управление через SSH и virsh исключает эти риски.
Если вам нужно быстро освежить основы работы в Linux-терминале, включая работу с bash, apt/dnf/yum и настройку сетей, обратитесь к проверенному руководству для DevOps и сисадминов.
Подготовка сервера и установка стека KVM, QEMU, libvirt
Перед установкой проверьте поддержку аппаратной виртуализации вашим процессором. Выполните команду. Если вывод больше 0, технология поддерживается и включена в BIOS/UEFI. Для Intel это vmx, для AMD - svm.
egrep -c '(vmx|svm)' /proc/cpuinfo
Также убедитесь, что виртуализация активна в прошивке материнской платы. Если вывод пуст, модуль ядра KVM не загружен, что может указывать на отключенную опцию в BIOS.
lsmod | grep kvm
Проверка окружения и установка на Ubuntu/Debian
Для систем на базе Debian (Ubuntu 22.04 LTS, 24.04 LTS, Debian 12) используйте следующие команды. Они установят необходимые пакеты, запустят демон libvirt и добавят вашего пользователя в группу libvirt для работы без прав root.
sudo apt update
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients virtinst bridge-utils
sudo systemctl enable --now libvirtd
sudo usermod -aG libvirt $USER
newgrp libvirt
После установки проверьте версию libvirt и состояние демона.
virsh version
sudo systemctl status libvirtd
Установка на CentOS/RHEL и Rocky/AlmaLinux
Для дистрибутивов семейства RHEL (CentOS Stream 9, Rocky Linux 9, AlmaLinux 9) процесс отличается менеджером пакетов. Выполните команды через dnf.
sudo dnf install -y qemu-kvm libvirt virt-install bridge-utils virt-top
sudo systemctl enable --now libvirtd
sudo usermod -aG libvirt $USER
newgrp libvirt
В этих системах SELinux работает по умолчанию. Libvirt корректно с ним взаимодействует, но если вы планируете хранить образы дисков в нестандартных каталогах (не в /var/lib/libvirt/images), потребуется настроить соответствующие контексты SELinux с помощью semanage fcontext и restorecon.
Первичная диагностика и решение частых проблем
После установки возможны типичные ошибки. Если команда virsh list выдает ошибку прав доступа, убедитесь, что пользователь добавлен в группу libvirt и выполнен вход в новую сессию (команда newgrp или перелогин).
Проблемы с сетью часто связаны с отсутствующим модулем ядра tun. Проверьте его загрузку.
lsmod | grep tun
Если модуль не загружен, загрузите его и добавьте в автозагрузку.
sudo modprobe tun
sudo sh -c 'echo "tun" >> /etc/modules-load.d/tun.conf'
Если демон libvirtd не запускается, проверьте журналы.
sudo journalctl -u libvirtd -f
Создание и базовое управление виртуальными машинами через virt-install и virsh
Основной инструмент для создания ВМ из командной строки - virt-install. Он генерирует XML-конфигурацию для libvirt и запускает инсталляцию.
Команда virt-install: разбор параметров для типовых сценариев
Ключевые параметры virt-install определяют конфигурацию ВМ. Параметр --graphics none указывает на headless-режим без VNC/SPICE, что оптимально для серверов. --network bridge=br0 подключает ВМ к сетевому мосту для получения IP из физической сети. --disk path=/var/lib/libvirt/images/vm1.qcow2,size=20 создает виртуальный диск размером 20 ГБ в формате qcow2.
Рекомендации по ресурсам для типовых задач в 2026 году:
- Веб-сервер (Nginx/Apache): 1-2 vCPU, 2-4 ГБ RAM, 20 ГБ диск.
- База данных (PostgreSQL/MySQL): 2-4 vCPU, 4-8 ГБ RAM, 50+ ГБ диск, предпочтительно отдельный диск для данных.
- Агент CI/CD (Jenkins runner, GitLab runner): 2 vCPU, 4 ГБ RAM, 30 ГБ диск.
Пример команды для создания ВМ с установкой Ubuntu Server 24.04 LTS с ISO-образа.
sudo virt-install \
--name ubuntu-server-01 \
--ram 2048 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/ubuntu-server-01.qcow2,size=20 \
--os-variant ubuntu24.04 \
--network bridge=br0 \
--graphics none \
--console pty,target_type=serial \
--location /path/to/ubuntu-24.04-live-server-amd64.iso \
--extra-args 'console=ttyS0,115200n8 serial'
Ежедневное администрирование ВМ с помощью virsh
Основные команды virsh для управления жизненным циклом ВМ.
| Команда | Действие |
|---|---|
virsh list --all |
Показать все ВМ (запущенные и остановленные) |
virsh start <имя_вм> |
Запустить ВМ |
virsh shutdown <имя_вм> |
Корректно выключить ВМ (мягкая остановка) |
virsh destroy <имя_вм> |
Немедленно выключить ВМ (жесткая остановка, аналог выдергивания шнура) |
virsh reboot <имя_вм> |
Перезагрузить ВМ |
virsh suspend <имя_вм> |
Приостановить ВМ |
virsh resume <имя_вм> |
Возобновить работу приостановленной ВМ |
virsh console <имя_вм> |
Подключиться к текстовой консоли ВМ (требует настройки в гостевой ОС) |
Работа со снапшотами (снимками состояния).
# Создать снапшот
virsh snapshot-create-as --domain <имя_вм> --name "snap_before_update"
# Восстановить состояние из снапшота
virsh snapshot-revert --domain <имя_вм> --snapshotname "snap_before_update"
# Удалить снапшот
virsh snapshot-delete --domain <имя_вм> --snapshotname "snap_before_update"
Клонирование ВМ выполняется утилитой virt-clone.
sudo virt-clone --original ubuntu-server-01 --name ubuntu-server-02 --file /var/lib/libvirt/images/ubuntu-server-02.qcow2
Для полного удаления ВМ и её конфигурации (но не дисковых образов) используйте.
virsh undefine <имя_вм>
Управление виртуальными дисками: создание, подключение, изменение
Создайте новый образ диска в формате qcow2 размером 30 ГБ.
qemu-img create -f qcow2 /var/lib/libvirt/images/data_disk.qcow2 30G
Подключите существующий диск к работающей ВМ. Флаг --persistent делает изменение постоянным.
virsh attach-disk ubuntu-server-01 /var/lib/libvirt/images/data_disk.qcow2 vdb --persistent
Чтобы увеличить размер основного диска ВМ, сначала измените образ.
qemu-img resize /var/lib/libvirt/images/ubuntu-server-01.qcow2 +10G
Затем внутри гостевой ОС используйте инструменты вроде growpart и resize2fs (для ext4) или xfs_growfs для расширения файловой системы на новое пространство.
Для более сложных сценариев управления хранилищами, включая интеграцию с ZFS, изучите руководство по созданию и оптимизации виртуальных машин в TrueNAS.
Настройка сетей для виртуальных машин: NAT и сетевой мост
Libvirt по умолчанию предоставляет виртуальную сеть «default» в режиме NAT. Она дает ВМ доступ в интернет через хост, но не позволяет подключиться к ВМ из внешней сети. Для публикации сервисов (веб-сервер, SSH) требуется настроить сетевой мост.
Встроенная NAT-сеть: быстрое решение для доступа в интернет
Проверьте список доступных сетей.
virsh net-list --all
Если сеть «default» неактивна, запустите её и настройте автозагрузку.
virsh net-start default
virsh net-autostart default
ВМ, созданная с параметром --network network=default, получит IP-адрес через DHCP от libvirt (обычно из подсети 192.168.122.0/24) и будет иметь выход в интернет через NAT на хосте. Это удобно для тестовых сред, но входящие соединения извне не работают.
Создание сетевого моста для прямой публикации сервисов
Сетевой мост (bridge) объединяет физический интерфейс хоста (например, eth0 или enp3s0) с виртуальными интерфейсами ВМ. ВМ получает IP-адрес из той же физической сети, что и хост, выступая как самостоятельный узел. Это основа для развертывания серверов типа VDS.
Настройка на Ubuntu/Debian с использованием Netplan (актуально для версий с 2022 года). Отредактируйте конфигурационный файл, например, /etc/netplan/01-netcfg.yaml.
network:
version: 2
ethernets:
enp3s0:
dhcp4: no
bridges:
br0:
interfaces: [enp3s0]
dhcp4: yes
parameters:
stp: false
forward-delay: 0
Примените конфигурацию. Это вызовет кратковременный разрыв сетевого соединения.
sudo netplan apply
На CentOS/RHEL/Rocky Linux настройка осуществляется через файлы в /etc/sysconfig/network-scripts/. Создайте конфиг для моста ifcfg-br0.
DEVICE=br0
TYPE=Bridge
BOOTPROTO=dhcp
ONBOOT=yes
DELAY=0
STP=off
И измените конфиг физического интерфейса (например, ifcfg-enp3s0), добавив строку BRIDGE=br0 и убрав настройки IP.
После создания моста создавайте ВМ с параметром --network bridge=br0. Внутри гостевой ОС можно настроить статический IP из вашей сети или получить его через DHCP от маршрутизатора.
Если вы планируете строить более сложную инфраструктуру виртуализации, сравните подходы в нашем руководстве по сборке и настройке сервера виртуализации на Proxmox VE или XCP-ng.
Автоматизация развертывания ВМ с помощью cloud-init
Cloud-init - это стандартный инструмент для автоматической настройки облачных экземпляров при первой загрузке. Он позволяет задать пользователей, SSH-ключи, установить пакеты и настроить сеть без ручного вмешательства. В связке с KVM он решает задачу массового развертывания идентичных ВМ.
Подготовка cloud-образа и данных конфигурации
Вместо стандартного ISO используйте предварительно подготовленные cloud-образы. Например, для Ubuntu Server их можно скачать с официального зеркала.
wget https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64.img
Создайте файл конфигурации user-data.yaml. Это YAML-файл, который передается в ВМ.
#cloud-config
users:
- name: admin
ssh-authorized-keys:
- ssh-ed25519 AAAAC3Nz... ваш_публичный_ssh_ключ
sudo: ['ALL=(ALL) NOPASSWD:ALL']
groups: sudo
shell: /bin/bash
packages:
- nginx
- postgresql-client
runcmd:
- [systemctl, enable, nginx]
- [systemctl, start, nginx]
Файл meta-data может быть пустым или содержать идентификатор экземпляра.
instance-id: ubuntu-vm-01
local-hostname: ubuntu-server
Интеграция cloud-init с virt-install
Создайте ВМ напрямую из cloud-образа, передав данные конфигурации. Ключевой параметр - --cloud-init.
sudo virt-install \
--name ubuntu-cloud-01 \
--ram 2048 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/ubuntu-cloud-01.qcow2,size=20 \
--os-variant ubuntu22.04 \
--network bridge=br0 \
--graphics none \
--console pty,target_type=serial \
--cloud-init user-data=/path/to/user-data.yaml,meta-data=/path/to/meta-data.yaml \
--import
При первой загрузке cloud-init внутри гостевой ОС обработает переданные данные: создаст пользователя admin с вашим SSH-ключом, установит пакеты nginx и postgresql-client, запустит и включит nginx. После загрузки вы сможете подключиться к ВМ по SSH как пользователь admin без пароля.
Для сравнения различных подходов к изоляции и управления ресурсами, например, при выборе между легковесными контейнерами (Jails) и полноценными ВМ, ознакомьтесь с материалом Jails или виртуальные машины в TrueNAS в 2026 году.
Интеграция в инфраструктуру: мониторинг и оркестрация
После настройки базового стека виртуализации следующий шаг - встраивание хоста в существующую корпоративную инфраструктуру для мониторинга, автоматизации и масштабирования.
Мониторинг хоста и ВМ с помощью Prometheus и libvirt-exporter
Libvirt-exporter - это экспортер для Prometheus, который собирает метрики о доменах (ВМ), пулах хранения и сетях libvirt. Установите его на хост с KVM.
Для Ubuntu/Debian.
wget https://github.com/kumina/libvirt_exporter/releases/download/v0.0.1/libvirt_exporter-0.0.1.linux-amd64.tar.gz
tar -xzf libvirt_exporter-0.0.1.linux-amd64.tar.gz
sudo mv libvirt_exporter-0.0.1.linux-amd64/libvirt_exporter /usr/local/bin/
Создайте systemd-сервис для автозапуска экспортера. Файл /etc/systemd/system/libvirt-exporter.service.
[Unit]
Description=Libvirt Exporter
After=network.target libvirtd.service
[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/bin/libvirt_exporter --libvirt.uri="qemu:///system"
Restart=always
[Install]
WantedBy=multi-user.target
Запустите и включите сервис.
sudo systemctl daemon-reload
sudo systemctl enable --now libvirt-exporter
Экспортер по умолчанию слушает порт 9177. Добавьте новый job в конфигурацию Prometheus для сбора метрик.
scrape_configs:
- job_name: 'libvirt'
static_configs:
- targets: ['kvm-host-ip:9177']
Ключевые метрики, которые станут доступны: libvirt_domain_info_memory_usage_bytes (использование памяти), libvirt_domain_info_vcpu_time (время CPU), libvirt_domain_block_stats_read_bytes (чтение с диска).
Базовое управление инфраструктурой через Ansible
Ansible позволяет автоматизировать создание и управление ВМ через модуль community.libvirt.virt. Установите модуль.
ansible-galaxy collection install community.libvirt
Пример простого плейбука create_vm.yml для создания ВМ из cloud-образа.
---
- name: Create a KVM virtual machine
hosts: localhost
connection: local
tasks:
- name: Create VM from cloud image
community.libvirt.virt:
name: "ansible-vm-01"
state: running
xml: "{{ lookup('template', 'vm_template.xml.j2') }}"
register: vm
Шаблон vm_template.xml.j2 содержит XML-определение ВМ для libvirt, аналогичное тому, что генерирует virt-install. Ansible также можно использовать для выполнения массовых операций: запуска, остановки, создания снапшотов группы ВМ.
Для более глубокого изучения инструментов автоматизации, таких как Ansible, Puppet и написание Bash-скриптов, рекомендуем статью Системное администрирование Linux: практическое руководство для DevOps и сисадминов.
Для описания инфраструктуры как код также можно использовать провайдер libvirt для Terraform, что позволяет декларативно управлять ВМ, сетями и хранилищами.
Заключение и дальнейшие шаги
Вы освоили полный цикл работы со стеком KVM/QEMU/libvirt: от проверки оборудования и установки пакетов до создания ВМ, настройки сетей и автоматизации развертывания с cloud-init. Эти навыки позволяют развернуть на физическом сервере частное облако, функционально аналогичное услугам VDS/VPS хостинг-провайдеров, но с полным контролем над инфраструктурой.
Для углубленного изучения рассмотрите следующие направления. Управление хранилищами: настройка пулов хранения libvirt (dir, fs, logical, netfs) для централизованного управления образами дисков. Живая миграция ВМ: настройка общих хранилищ (NFS, iSCSI) и сети для миграции работающей ВМ между физическими хостами без простоя. Безопасность: интеграция с SELinux или AppArmor для изоляции процессов libvirt и QEMU, настройка изолированных приватных сетей с помощью virsh net-define. Мониторинг и алертинг: настройка Grafana-дашбордов на основе метрик libvirt-exporter и создание алертов в Prometheus Alertmanager.
Практическое применение этих технологий не ограничивается серверными стойками. Например, для агрегации API и управления ключами доступа к различным AI-моделям, таким как GPT или Gemini, вы можете рассмотреть сервис AiTunnel, который предоставляет единый интерфейс без необходимости использования VPN.