KVM (Kernel-based Virtual Machine) — это технология виртуализации, встроенная в ядро Linux. На VPS Linux Infrawire это означает, что ваш сервер ведёт себя как настоящая машина со своим ядром, а не как обычная папка, изолированная внутри чужой системы. В этом руководстве объясняется разница с контейнерными технологиями и показано, как проверить всё самостоятельно.
📋 Предварительные требования
- Linux VPS (Ubuntu 24.04, Debian 12, AlmaLinux 9 или Rocky Linux 9)
- SSH-доступ под root или пользователем с
sudo - Базовые навыки работы в командной строке
1. Как работает KVM
KVM превращает ядро Linux физического хоста в гипервизор. Каждая виртуальная машина — обычный процесс под управлением QEMU, но она видит эмулированное оборудование: процессор, память, диск и сетевую карту. Благодаря расширениям виртуализации процессора (Intel VT-x, AMD-V) код гостя выполняется почти с нативной скоростью.
Внутри ВМ вы устанавливаете полноценную операционную систему со своим ядром, своей системой инициализации и своими процессами. С вашей точки зрения это выделенный сервер.
2. KVM в сравнении с OpenVZ и LXC
Контейнерные технологии устроены иначе:
- OpenVZ и LXC: все контейнеры используют общее ядро хоста. Вам достаётся только изолированное пользовательское пространство. Нельзя сменить ядро, загрузить модули или выбрать версию ядра.
- KVM: полная виртуализация. Каждый VPS загружает собственное ядро и имеет собственные выделенные память и диск.
Контейнер легче, но ограничен тем, что разрешает ядро хоста. VPS на KVM даёт свободу ценой немного большего расхода памяти.
3. Почему это важно на VPS
Со своим ядром вы можете:
- Загружать модули ядра, например WireGuard,
br_netfilterилиnf_conntrack - Запускать Docker и другие контейнерные движки без ограничений (cgroups, файловая система overlay, iptables)
- Настраивать систему через
sysctl(сетевые буферы, пересылка IP, контроль перегрузки BBR) - Использовать собственный межсетевой экран, файл подкачки и любую файловую систему
- Установить другую версию ядра из вашего дистрибутива
Bash# Показать запущенное ядро uname -r # Показать параметры ядра, которые можно менять sudo sysctl net.ipv4.ip_forward net.ipv4.tcp_congestion_control
4. Как проверить, что вы на KVM
Проще всего использовать systemd-detect-virt:
Bashsystemd-detect-virt # Ожидаемый вывод: kvm
Если команда выводит openvz, lxc или docker, вы находитесь в контейнере. none означает физическую машину.
Подтвердить можно через lscpu:
Bashlscpu | grep -iE 'hypervisor|virtualization type' # Hypervisor vendor: KVM # Virtualization type: full
И по сообщениям загрузки ядра:
Bashsudo dmesg | grep -i -E 'kvm|hypervisor' # Hypervisor detected: KVM
Наконец, hostnamectl показывает строку Virtualization: kvm.
5. Проверьте, что даёт KVM
Убедитесь, что можете загрузить модуль и запускать контейнеры:
Bash# Ubuntu 24.04 / Debian 12: модуль WireGuard sudo modprobe wireguard lsmod | grep wireguard # Установите Docker из репозитория дистрибутива и запустите тестовый контейнер sudo apt update && sudo apt install -y docker.io sudo docker run --rm hello-world
В AlmaLinux 9 или Rocky 9 установите утилиты командой sudo dnf install -y wireguard-tools, а движок Docker — по официальной документации (docs.docker.com).
🔧 Устранение неполадок
dmesg: read kernel buffer failed: Operation not permitted
Ядро ограничивает dmesg для root. Запустите команду через sudo или используйте sudo journalctl -k.
modprobe: FATAL: Module wireguard not found
В некоторых минимальных образах нет дополнительных модулей. В Ubuntu установите linux-modules-extra-$(uname -r). Если вы только что обновили ядро, сначала перезагрузитесь, чтобы uname -r совпадал с установленными модулями.
systemd-detect-virt: command not found
В образе нет systemd или он слишком минимален. Используйте lscpu или dmesg, либо установите пакет systemd.
Docker жалуется на cgroups или iptables
Проверьте, что служба запущена (systemctl status docker) и что вы не отключили nf_tables или iptables в собственной конфигурации межсетевого экрана.
🚀 Теперь вы знаете, что KVM даёт вашему VPS: настоящее ядро, полный контроль и никаких скрытых ограничений со стороны хоста.