Перейти к содержимому

Виртуальные машины. libvirt и QEMU

Требуется установить пакет libvirt и один из гипервизоров. Я выбрал QEMU (пакет qemu-full). Для добавление виртуальных машин требуется virt-install.

Окно терминала
sudo pacman -S libvirt virt-install qemu-full
Статус сборки (libvirt) Статус сборки (libvirt)
Статус сборки (qemu) Статус сборки (qemu)

Если виртуальные машины будут запускаться с графической сессией, можно использовать virt-viewer:

Окно терминала
sudo pacman -S virt-viewer
Статус сборки пакетов Статус сборки пакетов

Включите и запустите службу libvirtd

Окно терминала
sudo systemctl enable libvirtd
sudo systemctl enable libvirtd

Чтобы предоставить пользователю доступ к демону libvirt, проще всего добавить его в группу libvirt:

Окно терминала
sudo usermod -aG libvirt $(whoami)

Скачайте ISO-образ операционной системы, которая будет использоваться в ВМ. В таблице ниже перечислены ссылки на некоторые ОС.

ОССсылка
Arch Linuxhttps://archlinux.org/download/
Linux Minthttps://linuxmint.com/download.php
Ubuntuhttps://ubuntu.com/download/desktop
Windows 10https://www.microsoft.com/en-us/software-download/windows10ISO

Для установки ВМ выполните команду ниже, указав необходимые параметры:

Окно терминала
virt-install \
--name <имя-ВМ> \
--memory <размер оперативной памяти в МБ> \
--vcpus <количество виртуальных ядер> \
--cpu host \
--cdrom <путь до ISO-образа> \
--disk size=<размер диска в ГБ>,format=qcow2 \
--network user \
--virt-type kvm \
--graphics vnc

После чего необходимо установить операционную систему виртуальной машины в открывшемся окне. Если окно не открылось, можно использовать virt-viewer напрямую (здесь и далее <имя-ВМ> совпадает с именем, указанным при установке):

Окно терминала
virt-viewer <имя-ВМ>
Окно терминала
virsh start <имя-ВМ>
virt-viewer <имя-ВМ>

Создать снапшот:

Окно терминала
virsh snapshot-create-as <имя-ВМ> <название-снапшота> --description <описание>

Посмотреть список снапшотов:

Окно терминала
virsh snapshot-list <имя-ВМ>

Откатить ВМ до снапшота:

Окно терминала
# Откатиться до снапшота по названию
virsh snapshot-revert <имя-ВМ> <название-снапшота>
# Откатиться до текущего снапшота
virsh snapshot-revert <имя-ВМ> --current

Удалить снапшот:

Окно терминала
# Удалить снапшот по названию
virsh snapshot-delete <название-снапшота>
# Удалить текущий снапшот
virsh snapshot-delete --current

Добавьте (или раскомментируйте) следующую опцию в файле /etc/libvirt/qemu.conf:

vnc_allow_host_audio = 1

В качестве альтернативы можно использовать SPICE .

Необходимо отредактировать конфигурацию ВМ. Чтобы открыть конфигурацию для редактирования, выполните команду:

Окно терминала
virsh edit <имя-ВМ>

Добавить параметры в соответствующих секциях конфигурации:

<domain type='kvm'>
[...]
<memoryBacking>
<source type='memfd'/>
<access mode='shared'/>
</memoryBacking>
[...]
<devices>
[...]
<filesystem type='mount' accessmode='passthrough'>
<driver type='virtiofs'/>
<source dir='<путь на хосте>'/>
<target dir='host'/>
</filesystem>
[...]
</devices>
[...]
</devices>

Замените <путь на хосте> на путь до директории, которая будет доступна из виртуальной машины.

Внутри ВМ примонтируйте директорию командой:

Окно терминала
mount -t virtiofs host /mnt

См. также: Sharing files between the host and its virtual machines by using virtiofs .

Самый простой способ настройки port forwarding — выполнить команду ниже, когда ВМ запущена:

Окно терминала
virsh qemu-monitor-command --hmp <имя-ВМ> 'hostfwd_add ::<порт на хосте>-:<порт на ВМ>'

Замените выделенные параметры на необходимые значения, например:

Окно терминала
virsh qemu-monitor-command --hmp my-vm 'hostfwd_add ::2222-:22'

В примере выше 22 порт виртуальной машины “my-vm” будет доступен как 2222 порт на хосте.

Эту команду необходимо выполнять после каждой остановки/запуска ВМ. Можно автоматизировать этот процесс при помощи хуков libvirt.

Убедитесь, что на виртуальной машине настроен и запущен sshd. Подключитесь к ВМ командой:

Окно терминала
ssh <пользователь на ВМ>@127.0.0.1 -p <порт на хосте>

Для передачи файлов между ВМ и хостом можно использовать scp или настроить SSHFS.

Окно терминала
virsh destroy <имя-ВМ>
virsh undefine <имя-ВМ> --remove-all-storage

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

Включите возможность “OpenSSH Server”.

В настройках перейдите в Settings > Apps > Apps & features > Optional features, нажмите “Add a feature” и установите “OpenSSH Server”.

Установка возможности libvirt

В качестве альтернативы, выполните команду:

Окно терминала
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

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

Включите и запустите службу sshd:

Окно терминала
Start-Service sshd
Set-Service -Name sshd -StartupType 'Automatic'

Обычно, система автоматически создаст правило для фаерволла, позволяющее подключаться по ssh, используя порт 22. Если правило не было создано (т.е. подключение не удаётся) или требуется использовать другой порт, добавьте его командой:

Окно терминала
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22 -Program "C:\Windows\System32\OpenSSH\sshd.exe"

По умолчанию, подключение по ssh будет запускать cmd.exe. Чтобы поменять оболочку на PowerShell, выполните команду от имени администратора:

Окно терминала
New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell -Value "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -PropertyType String -Force

Скопируйте свой публичный SSH ключ в C:\Users\<имя пользователя>\.ssh\authorized_keys.

Настройте port forwarding для ВМ и подключитесь к ней командой:

Окно терминала
ssh <пользователь на ВМ>@127.0.0.1 -p 2222

См. также: Key-based authentication in OpenSSH for Windows .

OVA — формат для хранения и распространения ВМ, используемый VirtualBox, VMWare и другими системами виртуализации. Представляет собой tar-архив, содержащий образ диска и другие файлы.

Распакуйте архив:

Окно терминала
tar -xvf vm.ova

В рабочей директории должен появиться образ диска, как правило, в формате VMDK. Конвертируйте образ в qcow2:

Окно терминала
qemu-img convert -pf vmdk vm-disk001.vmdk -O qcow2 vm.qcow2

После конвертации импортируйте ВМ с помощью virt-install:

Окно терминала
virt-install \
--import \
--name <имя-ВМ> \
--memory <размер оперативной памяти в МБ> \
--vcpus <количество виртуальных ядер> \
--cpu host \
--disk path=<путь до файла qcow2>,format=qcow2 \
--network user \
--virt-type kvm \
--graphics vnc