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

by itisgood

KVM – это технология виртуализации, интегрированная в ядро Linux.

Система с включенным KVM может работать как гипервизор первого типа, если процессор поддерживает его.

Существует несколько способов создания виртуальной машины с помощью KVM.

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

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 активен, но вложенность отключена.

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

# Intel
options kvm_intel nested=1

# AMD
options kvm_amd nested=1

Далее необходимо перезагрузить модуль ядра KVM, чтобы применить изменения.

Перед этим необходимо остановить все работающие виртуальные машины.

# Выключим модуль
$ sudo modprobe -r kvm_intel

# Перезагрузим модуль с новыми настройками
$ 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 <vm-name>, чтобы открыть манифест названной виртуальной машины:

virsh # edit ubuntu22.04

В файле найдите строку, которая начинается с <cpu mode=.

Измените ее на одну из этих:

<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.

Теперь установите технологию виртуализации в гостевой системе.

Вы должны обнаружить, что можете запустить новую виртуальную машину.

Ограничения

Вложенные гостевые ВМ имеют несколько ограничений.

Некоторые функции KVM становятся недоступными.

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

Фактический эффект от попытки выполнить одну из этих операций не определен.

Некоторые системы могут выдержать это; другие могут вызвать панику ядра.

Заключение

Вложенная виртуализация обеспечивает большую мощность и гибкость.

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

Заставить вложенную виртуализацию работать с KVM обычно несложно.

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

После этого проверьте модель процессор и убедитесь, что вы используете совместимый гипервизор второго уровня в виртуальной машине.

см. также:

 

You may also like

Leave a Comment