Виртуальные машины. libvirt и QEMU
Установка
Заголовок раздела «Установка»Требуется установить пакет libvirt и один из гипервизоров. Я
выбрал QEMU (пакет qemu-full). Для
добавление виртуальных машин требуется virt-install.
sudo pacman -S libvirt virt-install qemu-fullЕсли виртуальные машины будут запускаться с графической сессией, можно
использовать virt-viewer:
sudo pacman -S virt-viewerВключите и запустите службу libvirtd
sudo systemctl enable libvirtdsudo systemctl enable libvirtdЧтобы предоставить пользователю доступ к демону libvirt, проще всего добавить
его в группу libvirt:
sudo usermod -aG libvirt $(whoami)Создание ВМ
Заголовок раздела «Создание ВМ»Скачайте ISO-образ операционной системы, которая будет использоваться в ВМ. В таблице ниже перечислены ссылки на некоторые ОС.
| ОС | Ссылка |
|---|---|
| Arch Linux | https://archlinux.org/download/ |
| Linux Mint | https://linuxmint.com/download.php |
| Ubuntu | https://ubuntu.com/download/desktop |
| Windows 10 | https://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 .
virtiofs
Заголовок раздела «virtiofs»Необходимо отредактировать конфигурацию ВМ. Чтобы открыть конфигурацию для редактирования, выполните команду:
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 .
Подключение по SSH. Port forwarding.
Заголовок раздела «Подключение по SSH. Port forwarding.»Самый простой способ настройки 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Если для указанной ВМ создавались снапшоты, перед удалением ВМ их также необходимо удалить.
Настройка ВМ с Windows 10
Заголовок раздела «Настройка ВМ с Windows 10»Включите возможность “OpenSSH Server”.
В настройках перейдите в Settings > Apps > Apps & features > Optional features, нажмите “Add a feature” и установите “OpenSSH Server”.

В качестве альтернативы, выполните команду:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0Возможно, после включения возможности потребуется перезагрузка.
Включите и запустите службу sshd:
Start-Service sshdSet-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 в qcow2
Заголовок раздела «Конвертация OVA в qcow2»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