Виртуализация

Какую систему управления виртуальными машинами лучше установить?

Рекомендуется использовать KVM, т.к. её гипервизор и необходимые модули уже находятся в ядре Linux и не вызывают проблем.

Как определить имеет ли процессор аппаратную поддержку виртуализации?

Проверим наличие флагов vmx (Intel), либо svm (AMD) в выводе /proc/cpuinfo:

grep -Eq '(vmx|svm)' /proc/cpuinfo && echo Yes || echo No

Как правильно установить систему виртуализации KVM?

Установим KVM и графическую утилиту управления виртуальными машинами virt-manager:

sudo dnf group install Virtualization

Перезагрузим машину для вступления изменений в силу:

sudo systemctl reboot

Как отключить запрос пароля во время запуска или остановки виртуальных машин при использовании KVM?

Возможностью управления виртуальными машинами обладают члены группы libvirt, поэтому нужно добавить в неё свой аккаунт:

sudo usermod -a -G libvirt $(whoami)

Как правильно установить VirtualBox в Fedora?

Сначала нужно подключить репозиторий RPM Fusion, затем выполнить:

sudo dnf upgrade --refresh
sudo dnf install gcc kernel-devel kernel-headers akmod-VirtualBox VirtualBox

Для нормальной работы с USB устройствами и общими папками потребуется также добавить свой аккаунт в группу vboxusers и vboxsf:

sudo usermod -a -G vboxusers $(whoami)
sudo usermod -a -G vboxsf $(whoami)

Как преобразовать образ виртуальной машины VirtualBox в формат, совместимый с KVM?

Для конвертирования образов воспользуемся штатной утилитой qemu-img:

qemu-img convert -f vdi -O qcow2 /path/to/image.vdi /path/to/image.qcow2

В случае необходимости создания образа фиксированного размера, добавим параметр -o preallocation=full:

qemu-img convert -f vdi -O qcow2 /path/to/image.vdi /path/to/image.qcow2 -o preallocation=full

Как преобразовать образ виртуальной машины VMWare в формат, совместимый с KVM?

Вариант 1. Воспользуемся утилитой virt-v2v:

virt-v2v -i vmx /path/to/image.vmx -o local -os /path/to/kvm -of qcow2

Вариант 2. Воспользуемся утилитой qemu-img:

qemu-img convert -f vmdk -O qcow2 /path/to/image.vmdk /path/to/image.qcow2

Как преобразовать образ виртуальной машины Hyper-V в формат, совместимый с KVM?

Для преобразования образа воспользуемся штатной утилитой qemu-img:

qemu-img convert -f vpc -O qcow2 /path/to/image.vpc /path/to/image.qcow2

Можно ли отключить защиту от уязвимостей CPU в гостевых Windows внутри виртуальных машин?

Да, согласно MSDN, при помощи следующего REG файла:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management]
"FeatureSettingsOverride"=dword:00000003
"FeatureSettingsOverrideMask"=dword:00000003

Какие дисковые образы лучше: динамически расширяющиеся или фиксированного размера?

Фиксированного размера, т.к. они меньше фрагментируются.

Как конвертировать динамически расширяющийся образ диска VirtualBox в фиксированный?

Динамическая конвертация не поддерживается, поэтому воспользуемся утилитой VBoxManage, входящей в базовую поставку VirtualBox, для создания нового дискового образа на базе старого:

VBoxManage clonehd /path/to/System.vdi /path/to/System_fixed.vdi --variant Fixed

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

Можно ли использовать KVM на CPU без поддержки аппаратной виртуализации?

Нет. KVM требует наличие активной аппаратной виртуализации и при её осутствии работать не будет.

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

Можно ли перенести каталог с образами виртуальных машин KVM?

По умолчанию образы создаваемых виртуальных машин создаются в каталоге /var/lib/libvirt/images, что многих не устраивает.

Переместим образы виртуальных машин на отдельный накопитель, смонтированный как /media/foo-bar. ISO будем размещать в каталоге iso, а дисковые образы виртуальных машин – images.

Создаём собственные политики SELinux для указанных каталогов:

sudo semanage fcontext -a -t virt_image_t "/media/foo-bar/iso(/.*)?"
sudo semanage fcontext -a -t virt_image_t "/media/foo-bar/images(/.*)?"

Сбросим контекст безопасности SELinux для них:

sudo restorecon -Rv /media/foo-bar/iso
sudo restorecon -Rv /media/foo-bar/images

В настройках Virt Manager добавим новую библиотеку /media/foo-bar/images и зададим её использование для всех виртуальных машин по умолчанию.

Как переместить виртуальную машину KVM на другой ПК?

Переместим образы дисков из каталога /var/lib/libvirt/images старого хоста на новый любым удобным способом.

Экспортируем конфигурацию виртуальной машины:

virsh dumpxml vmname > vmname.xml

Здесь vmname – название машины KVM, а vmname.xml – имя файла, в котором будут сохранены настройки.

Импортируем ранее сохранённую конфигурацию:

virsh define /path/to/vmname.xml

Новая виртуальная машина появится в списке и будет готова к работе немедленно.

Как переместить виртуальную машину VirtualBox на другой ПК?

Получим список доступных виртуальных машин VirtualBox:

vboxmanage list vms

Экспортируем настройки и данные в открытый формат виртуализации версии 2.0:

vboxmanage export vmname -o vmname.ova --ovf20

Здесь vmname – название виртуальной машины VirtualBox, а vmname.ova – имя файла экспорта.

Переместим полученный файл на новый хост любым удобным способом, затем осуществим его импорт:

vboxmanage import /path/to/vmname.ova --options importtovdi

Через некоторое время новая виртуальная машина появится в списке и будет готова к работе.

Как правильно установить в KVM Windows?

См. здесь.

Какой тип QCOW2 образов выбрать?

Существует два типа образов:

У каждого есть как достоинства, так и недостатки.

Что нужно знать о динамически расширяющихся образах?

Достоинства:

  • занимают меньше места на диске, постепенно расширяясь до заданного предела.

Недостатки:

Что нужно знать об образах фиксированного размера?

Достоинства:

Недостатки:

  • занимают очень много места на диске, хотя если файловая система поддерживает разреженные (sparse) файлы, эта функция будет использоваться в полном объёме.

Как увеличить размер дискового образа QCOW2?

Воспользуемся утилитой qemu-img для увеличения дискового образа:

qemu-img resize --preallocation=full /path/to/image.qcow2 +10G

При использовании образов фиксированного размера, добавим параметр --preallocation=full:

qemu-img resize --preallocation=full /path/to/image.qcow2 +10G

Здесь вместо +10G укажем насколько следует расширить образ. Все операции должны выполняться при остановленной виртуальной машине, в которой он смонтирован.

По окончании, внутри гостевой ОС расширим используемую файловую систему до новых границ образа при помощи fdisk, GParted или любого другого редактора разделов диска.

Как уменьшить размер дискового образа QCOW2?

Уменьшение размера дискового образа QCOW2 при помощи qemu-img – это достаточно небезопасная операция, которая может привести к его повреждению, поэтому вместо отрицательных значений для resize сначала уменьшим размер дисковых разделов внутри самой гостевой ОС при помощи fdisk, Gparted или любого другого редактора разделов диска так, чтобы справа осталось лишь неразмеченное пространство.

Далее воспользуемся утилитой qemu-img и сделаем копию образа, которая уже не будет включать неразмеченное дисковое пространство:

qemu-img convert -f qcow2 -O qcow2 /path/to/image.qcow2 /path/to/new_image.qcow2

В случае необходимости создания образа фиксированного размера, добавим параметр -o preallocation=full:

qemu-img convert -f qcow2 -O qcow2 /path/to/image.qcow2 /path/to/new_image.qcow2 -o preallocation=full

Подключим новый образ к виртуальной машине вместо старого и проверим работу. Если всё верно, старый можно удалить.

Как оптимизировать KVM для работы с SSD-накопителей?

Каких-то особых оптимизаций производить не требуется. Достаточно лишь использовать дисковые образы гостевых ОС в формате QCOW2, а также при их подключении указать тип контроллера VirtIO и установить следующие опции:

  • discard mode: unmap;

  • detect zeroes: unmap.

Конечно же как в хостовой, так и в гостевой ОС, должна быть включена поддержка TRIM.