Гид по технологиям

Настройка и проверка вложенной виртуализации KVM

• 6 min read • Виртуализация • Обновлено 18 Nov 2025
Вложенная виртуализация KVM: настройка и проверка
Вложенная виртуализация KVM: настройка и проверка

Стопка серверов в стойке, вид спереди

Включите параметр nested=1 в модуле KVM на хосте и назначьте гостю CPU в режиме host-model или host-passthrough. Затем проверьте наличие флагов svm или vmx в /proc/cpuinfo внутри гостя и запустите гипервизор внутри VM. Если миграции или сохранение гостя нужны — остановите вложенные ВМ перед операциями.

Быстрые ссылки

  • Проверка, включена ли вложенная виртуализация
  • Включение вложенной виртуализации
  • Активация вложенной виртуализации для гостя
  • Проверка, может ли гость запускать вложенные ВМ
  • Ограничения
  • Резюме

Что такое вложенная виртуализация

Вложенная виртуализация — это возможность запускать гипервизор внутри виртуальной машины, то есть VM внутри VM. Простая строка: гипервизор второго уровня получает доступ к аппаратному ускорению виртуализации хоста через гипервизор первого уровня.

Кратко: KVM — это технология виртуализации в ядре Linux. QEMU и libvirt (вместе с Virtual Machine Manager) дают удобный интерфейс над KVM. Вложенная виртуализация полезна для тестирования гипервизоров, эмуляции сетевых/устройственных стеков и разработки ПО, требующего собственной виртуализации.

Важно: перед началом убедитесь, что KVM работает на хосте и вы умеете создавать гостевые ВМ.

Проверка, включена ли вложенная виртуализация

На большинстве современных процессоров поддержка вложенной виртуализации присутствует. На хосте проверьте параметр модуля KVM:

# Intel

$ cat /sys/module/kvm_intel/parameters/nested

# AMD

$ cat /sys/module/kvm_amd/parameters/nested

Вывод должен быть Y или N. Y означает, что вложенность уже включена — переходите к разделу об активации для гостя. Если N, нужно включить параметр в конфигурации модуля.

Важно

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

Включение вложенной виртуализации

Параметр управляется опцией модуля KVM. Отредактируйте файл /etc/modprobe.d/qemu-system-x86.conf или /etc/modprobe.d/kvm.conf (название может отличаться в разных дистрибутивах).

Вы, возможно, увидите одну из строк:

options kvm_intel
options kvm_intel nested=0
options kvm_amd
options kvm_amd nested=0

Измените или добавьте параметр так, чтобы он был равен 1:

# Для Intel
options kvm_intel nested=1

# Для AMD
options kvm_amd nested=1

После правки выгрузите и загрузите модуль (предварительно остановите ВМ):

# Пример для Intel
$ sudo modprobe -r kvm_intel
$ sudo modprobe kvm_intel

Замените kvm_intel на kvm_amd при наличии AMD CPU.

Повторно проверьте файл параметра:

$ cat /sys/module/kvm_intel/parameters/nested
Y

Эта правка сохраняется через перезагрузки, пока опция не будет удалена из файла конфигурации.

Активация вложенной виртуализации для гостя

Гость может использовать вложенную виртуализацию только при корректном описании CPU в его конфигурации libvirt. Гостю нужен тип CPU, близкий или идентичный физическому CPU хоста.

Обычно подходит режим host-model. В некоторых случаях потребуется host-passthrough, который максимально прозрачно передает характеристики хост-CPU гостю.

Порядок действий через virsh:

  1. Запустите интерактивный шелл virsh:
virsh
  1. Выведите список ВМ:
virsh # list --all

Id Name State

------------------------------

- ubuntu22.04 shut off

- win10 shut off
  1. Откройте манифест нужной ВМ:
virsh # edit ubuntu22.04
  1. Найдите строку и замените на одну из опций:


  1. Сохраните файл и выйдите (:wq в vim или закрыть редактор). Выйдите из virsh: exit.

Если после старта гостя вложенность не работает, попробуйте переключиться между host-model и host-passthrough.

Примечания по конфигурации

  • host-model — хорош для совместимости: описывает CPU, близкий к физическому.
  • host-passthrough — передаёт все фичи CPU, но может снизить переносимость конфигурации между хостами различной архитектуры.

Проверка, может ли гость запускать вложенные ВМ

Внутри гостя проверьте флаги CPU:

cat /proc/cpuinfo | grep "svm\|vmx"
  • svm — флаг для AMD
  • vmx — флаг для Intel

Если команда возвращает строки с этими флагами, аппаратное ускорение виртуализации доступно гостю. После этого установите гипервизор внутри гостя (например, KVM/QEMU) и попробуйте создать вложенную ВМ.

Скриншот: Ubuntu-гость запускает Alpine в качестве вложенной ВМ

Ограничения и риски

  • Миграция, сохранение, загрузка и snapshot-операции могут стать недоступны для ВМ, если внутри неё запущена вложенная ВМ. Непредсказуемое поведение может зависеть от версии ядра и реализаций гипервизора.
  • Некоторые операции могут привести к ошибкам или падению ядра. Всегда корректно завершайте вложенные ВМ перед выполнением операций над вышестоящими ВМ.
  • Производительность вложенных ВМ обычно ниже, чем у нативных, из-за дополнительного уровня эмуляции и переключений контекста.
  • Совместимость между разными хостами при использовании host-passthrough может быть ограничена.

Частые проблемы и шаги устранения неполадок

  1. Проблема: внутри гостя нет флагов vmx/svm.

    • Проверьте, что на хосте cat /sys/module/kvm_intel/parameters/nested возвращает Y.
    • Убедитесь, что CPU гостя в XML libvirt настроен как host-model или host-passthrough.
  2. Проблема: вложенная ВМ не запускается или падает при запуске.

    • Попробуйте сменить host-model → host-passthrough или наоборот.
    • Проверьте логи гостя и хоста: dmesg, /var/log/libvirt/qemu/.log.
  3. Проблема: операции миграции/снапшота недоступны.

    • Выключите вложенные ВМ и повторите операцию.
  4. Проблема: модуль не перезагружается из-за зависимых модулей.

    • Остановите службы и ВМ, выгрузите зависимые модули вручную или перезагрузите хост в плановом окне.

Пошаговая методология включения вложенности (минимальный SOP)

  1. Проверка текущего состояния на хосте:
    • cat /sys/module/kvm_intel/parameters/nested или kvm_amd.
  2. Резервная копия конфигураций виртуальных машин (XML через virsh dumpxml).
  3. Правка /etc/modprobe.d/qemu-system-x86.conf (добавить nested=1).
  4. Остановка всех ВМ.
  5. Перезагрузка модуля: sudo modprobe -r kvm_intel && sudo modprobe kvm_intel.
  6. Подтверждение: cat /sys/module/kvm_intel/parameters/nested → Y.
  7. Настройка CPU гостя: host-model или host-passthrough через virsh edit.
  8. Запуск гостя и проверка cat /proc/cpuinfo | grep "svm\|vmx" внутри гостя.
  9. Установка гипервизора внутри гостя и тестовый запуск вложенной ВМ.
  10. Документирование изменений в CMDB.

Роли и чек-лист

Host админ:

  • Проверить поддержку CPU.
  • Включить nested=1 и перезагрузить модуль.
  • Обновить документацию.

Guest админ / разработчик:

  • Проверить vmx/svm внутри гостя.
  • Настроить и протестировать гипервизор внутри гостя.
  • Убедиться, что вложенные ВМ корректно завершаются до операций над гостем.

DevOps инженер:

  • Убедиться в совместимости CI/CD агентов с вложенной виртуализацией.
  • Добавить тесты в пайплайны для проверки запуска VM внутри VM.

Критерии приёмки

  • На хосте параметр nested равен Y.
  • Гость имеет в /proc/cpuinfo флаг vmx или svm.
  • Внутри гостя успешно создаётся и стартует вложенная ВМ.
  • Операции миграции/снапшота проверены при выключенных вложенных ВМ.

Таблица совместимости (обобщённо)

  • Intel: требует флаг VMX, модуль kvm_intel, опция nested.
  • AMD: требует флаг SVM, модуль kvm_amd, опция nested.

Замечание: конкретные модели CPU и версии ядра могут влиять на доступность и стабильность.

Тестовые сценарии и приёмка

  • Тест 1: Включить nested на пустом хосте, перезагрузить модуль, проверить Y.
  • Тест 2: Настроить гостя с host-model, запустить гость, проверить vmx/svm внутри.
  • Тест 3: Установить KVM внутри гостя и создать простую Ubuntu VM, запустить её.
  • Тест 4: Попробовать сохранить/мигрировать гость при запущенной вложенной ВМ — убедиться, что операция либо блокируется, либо вложенная ВМ выключена.

Безопасность и соответствие

  • Вложенная виртуализация не добавляет новых персональных данных. Однако повышенная сложность системы увеличивает поверхность атаки. Минимальные рекомендации:
    • Применяйте обновления ядра и гипервизора.
    • Ограничьте доступ к управлению хостом и libvirt.
    • Логируйте операции и изменения конфигураций.

Краткий справочник (глоссарий)

  • KVM: Kernel-based Virtual Machine — модуль виртуализации в ядре Linux.
  • libvirt: библиотека и набор инструментов для управления виртуальными машинами.
  • host-model: режим CPU, который описывает CPU гостя подобно хостовому.
  • host-passthrough: режим CPU, который передаёт характеристики хоста гостю напрямую.
  • vmx / svm: аппаратные флаги виртуализации для Intel и AMD соответственно.

Резюме

Вложенная виртуализация KVM проста в настройке при условии поддержки CPU и корректной конфигурации гостя. Основные шаги: включить nested=1 на хосте, назначить гостю host-model или host-passthrough, проверить флаги внутри гостя и запустить гипервизор. Всегда выключайте вложенные ВМ перед операциями над гостями и документируйте изменения.

Дополнительные материалы и ссылки: проверьте документацию вашего дистрибутива и релиз-ноты ядра при возникновении специфичных проблем.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро