Настройка и проверка вложенной виртуализации 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_inteloptions kvm_intel nested=0options kvm_amdoptions 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:
- Запустите интерактивный шелл virsh:
virsh- Выведите список ВМ:
virsh # list --all
Id Name State
------------------------------
- ubuntu22.04 shut off
- win10 shut off- Откройте манифест нужной ВМ:
virsh # edit ubuntu22.04- Найдите строку
и замените на одну из опций:
- Сохраните файл и выйдите (
:wqв vim или закрыть редактор). Выйдите из virsh:exit.
Если после старта гостя вложенность не работает, попробуйте переключиться между host-model и host-passthrough.
Примечания по конфигурации
host-model— хорош для совместимости: описывает CPU, близкий к физическому.host-passthrough— передаёт все фичи CPU, но может снизить переносимость конфигурации между хостами различной архитектуры.
Проверка, может ли гость запускать вложенные ВМ
Внутри гостя проверьте флаги CPU:
cat /proc/cpuinfo | grep "svm\|vmx"svm— флаг для AMDvmx— флаг для Intel
Если команда возвращает строки с этими флагами, аппаратное ускорение виртуализации доступно гостю. После этого установите гипервизор внутри гостя (например, KVM/QEMU) и попробуйте создать вложенную ВМ.

Ограничения и риски
- Миграция, сохранение, загрузка и snapshot-операции могут стать недоступны для ВМ, если внутри неё запущена вложенная ВМ. Непредсказуемое поведение может зависеть от версии ядра и реализаций гипервизора.
- Некоторые операции могут привести к ошибкам или падению ядра. Всегда корректно завершайте вложенные ВМ перед выполнением операций над вышестоящими ВМ.
- Производительность вложенных ВМ обычно ниже, чем у нативных, из-за дополнительного уровня эмуляции и переключений контекста.
- Совместимость между разными хостами при использовании host-passthrough может быть ограничена.
Частые проблемы и шаги устранения неполадок
Проблема: внутри гостя нет флагов vmx/svm.
- Проверьте, что на хосте
cat /sys/module/kvm_intel/parameters/nestedвозвращаетY. - Убедитесь, что CPU гостя в XML libvirt настроен как
host-modelилиhost-passthrough.
- Проверьте, что на хосте
Проблема: вложенная ВМ не запускается или падает при запуске.
- Попробуйте сменить
host-model→host-passthroughили наоборот. - Проверьте логи гостя и хоста:
dmesg,/var/log/libvirt/qemu/..log
- Попробуйте сменить
Проблема: операции миграции/снапшота недоступны.
- Выключите вложенные ВМ и повторите операцию.
Проблема: модуль не перезагружается из-за зависимых модулей.
- Остановите службы и ВМ, выгрузите зависимые модули вручную или перезагрузите хост в плановом окне.
Пошаговая методология включения вложенности (минимальный SOP)
- Проверка текущего состояния на хосте:
cat /sys/module/kvm_intel/parameters/nestedилиkvm_amd.
- Резервная копия конфигураций виртуальных машин (XML через
virsh dumpxml). - Правка
/etc/modprobe.d/qemu-system-x86.conf(добавитьnested=1). - Остановка всех ВМ.
- Перезагрузка модуля:
sudo modprobe -r kvm_intel && sudo modprobe kvm_intel. - Подтверждение:
cat /sys/module/kvm_intel/parameters/nested→Y. - Настройка CPU гостя:
host-modelилиhost-passthroughчерезvirsh edit. - Запуск гостя и проверка
cat /proc/cpuinfo | grep "svm\|vmx"внутри гостя. - Установка гипервизора внутри гостя и тестовый запуск вложенной ВМ.
- Документирование изменений в 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, проверить флаги внутри гостя и запустить гипервизор. Всегда выключайте вложенные ВМ перед операциями над гостями и документируйте изменения.
Дополнительные материалы и ссылки: проверьте документацию вашего дистрибутива и релиз-ноты ядра при возникновении специфичных проблем.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента