Поиск по сайту:

Как включить виртуализацию вложенных KVM


KVM — это технология виртуализации, интегрированная в ядро Linux. Система с включенным KVM может работать как гипервизор типа 1, если процессор поддерживает это.

Есть несколько способов создать виртуальную машину с помощью KVM. QEMU может использовать KVM и libvirt, а его пользовательский интерфейс Virtual Machine Manager обеспечивает удобный интерфейс.

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

Эта статья покажет вам, как настроить вложенную виртуализацию KVM и проверить, работает ли она. Прежде чем продолжить, убедитесь, что у вас есть работающая установка KVM и что вы знакомы с созданием новых виртуальных машин KVM.

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

Вложенная виртуализация поддерживается большинством современных семейств процессоров, которые предлагают аппаратную виртуализацию. Вы можете проверить, включено ли вложение в вашем гипервизоре, используя команду cat для чтения одного из следующих путей, в зависимости от того, какая у вас система: Intel или AMD:

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

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

Вывод должен быть либо Y, либо N. Знак Y означает, что все готово — вложенная виртуализация уже включена. Вы можете перейти к разделу «Активация вложенной виртуализации для гостя» ниже. Если вы видите N в своем терминале, пришло время включить вложение в модуле ядра KVM.

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

Вложение управляется параметром модуля ядра 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

Любой из этих вариантов означает, что KVM активен, но вложение отключено.

Чтобы включить вложение, просто добавьте или измените параметр nested, чтобы он имел значение 1:

# Intel systems only
options kvm_intel nested=1

# AMD systems only
options kvm_amd nested=1

Затем вам нужно перезагрузить модуль ядра KVM, чтобы применить изменения. Перед этим следует остановить все работающие виртуальные машины.

# Unload the module
$ sudo modprobe -r kvm_intel

# Reload the module with new settings
$ sudo modprobe kvm_intel

Замените kvm_amd вместо kvm_intel, если у вас процессор AMD.

Теперь повторите предыдущую команду, чтобы проверить, включена ли вложенность. Вы должны получить Y в качестве вывода.

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

# AMD
$ cat /sys/module/kvm_amd/parameters/nested
Y

Этот метод постоянно включает вложенную виртуализацию. Он будет сохраняться при перезагрузке, пока вы не удалите nested=1 из параметров модуля KVM.

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

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

Большинство гостей будут работать, если для режима ЦП установлено значение host-model, которое обычно используется по умолчанию. Это означает, что гость получает определение ЦП, аналогичное определению вашего хоста. В некоторых случаях вам может понадобиться использовать режим host-passthrough, который точно передает все характеристики процессора хоста.

Вы можете проверить и изменить тип процессора гостя, получив его манифест с помощью virsh. Сначала запустите команду virsh, чтобы запустить интерактивную оболочку. Затем введите list --all, чтобы получить все ваши виртуальные машины:

virsh # list --all
 Id   Name          State
------------------------------
 -    ubuntu22.04   shut off
 -    win10         shut off

Затем запустите edit , чтобы открыть манифест именованной виртуальной машины:

virsh # edit ubuntu22.04

В файле найдите строку, начинающуюся с . Измените его на один из этих:

<cpu mode='host-model' check='partial' />
<cpu mode='host-passthrough' check='none' />

Сохраните и закройте файл, затем введите exit в оболочке virsh, чтобы закрыть его. Теперь гость должен быть готов к запуску собственных вложенных гостей. Попробуйте изменить режимы, если есть проблема.

Проверка гостевой карты

Большинство операционных систем могут сообщить вам, могут ли они создать виртуальную машину. Выполните следующую команду на своей виртуальной машине, чтобы проверить, есть ли у гостя Linux доступ к виртуализации:

cat /proc/cpuinfo | grep "svm|vmx"

Виртуализация доступна, если вы получаете некоторый вывод с svm или vmx, выделенными красным. SVM появится на машинах AMD; VMX появляется для Intel.

Теперь установите технологию виртуализации в гостевой системе. Вы должны обнаружить, что можете запустить новую вложенную виртуальную машину. Вот снимок экрана, показывающий виртуальную машину Ubuntu, на которой работает гостевая система Alpine с использованием вложенного KVM:

Ограничения

Вложенные гости имеют несколько ограничений. Некоторые функции KVM становятся недоступными для гостей, запустивших вложенную виртуальную машину. Вы не сможете перенести, сохранить или загрузить эти виртуальные машины, пока вложенная виртуальная машина не будет остановлена.

Фактический эффект от попытки выполнить одну из этих операций не определен. Некоторые системы могли это выдержать; другие могут вызвать панику ядра. Всегда пытайтесь отключить вложенных гостей, прежде чем выполнять операцию на виртуальных машинах над ними в цепочке.

Краткое содержание

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

Заставить вложенность работать с KVM обычно несложно. Любое устранение неполадок следует начинать с проверки включения параметра nested для вашего модуля ядра KVM. После этого проверьте модель ЦП, назначенную вашему гостю, и убедитесь, что вы используете совместимый гипервизор второго уровня в виртуальной машине.