!!Виртуальная машина Qemu KVM Virt-manager!!
2023-08-13
linuxТребования:
-
У вас должен быть установлен и настроен polkit аутентификатор
-
Требуется включить в Bios'е (для процессоров Intel) технологию виртуализации VT-d
У меня на HuananZhi X79 ZD3 она находится во вкладке Chipset - North Bridge - IOH Configuration - Intel VT for Directed I/O Configuration и включаем Intel VT-d
-
Требуется отключить CSM в Bios'е Находится во вкладке boot - CSM parameters - меняем Launch CSM на disabled
Устанавливаем все эти пакеты
sudo pacman -S virt-manager qemu qemu-arch-extra dnsmasq iptables-nft dmidecode edk2-ovmf swtpm
Соглашаемся на удаление iptables
# Настройка KVM и Libvirt
Раскомментируем эти строки в /etc/libvirt/libvirtd.conf
unix_sock_group = "libvirt"
unix_sock_rw_perms = "0770"
Или вводим в терминале
sudo sed -i 's/^#unix_sock_group/unix_sock_group/' /etc/libvirt/libvirtd.conf
sudo sed -i 's/^#unix_sock_rw_perms/unix_sock_rw_perms/' /etc/libvirt/libvirtd.conf
Добавляем нашего юзера в приведённые ниже группы
sudo usermod -aG libvirt,kvm,input $(whoami)
Вот инфо про данные группы
- kvm - Доступ к виртуальным машинам использующие KVM
- libvirt - Позволяет обычному пользователю (через PolicyKit) подключиться к демону libvirtd, не запрашивая пароль root
- input - необходим для проброса evdev устройств usb мышки, клавиатуры и т.д
Просмотреть группы принадлежащие юзеру командой groups $(whoami)
Если у вас образы iso в другом разделе своего диска, тогда вам потребуется
отредактировать qemu.conf
, и дать привилегии qemu читать данный iso.
Без этого у вас вылезет данная ошибка
sudo nvim /etc/libvirt/qemu.conf
user = "libvirt-qemu" -> user = "имяпользователя"
group = "libvirt-qemu" -> group = "wheel"
Для упрощения можете ввести эти команды в терминале
sudo sed -i "s|^#user = .*|user = \"${USERNAME}\"|g" /etc/libvirt/qemu.conf
sudo sed -i "s|^#group = .*|group = \"wheel\"|g" /etc/libvirt/qemu.conf
В параметрах ядра необходимо прописать опции intel_iommu=on iommu=pt
и ребутнутся
Пояснение: Делается это для того чтобы можно было пробросить свою видеокарту в VM
Запускаем сервис
sudo systemctl enable --now libvirtd
Для проверки сервиса
systemctl status libvirtd
В статусе были ошибки от dnsmasq которые я исправил
# Настройка вирт. сети через GUI Virt Manager
Проводим все манипуляции через через GUI Virt Manager'а
Запускаем GUI “Менеджер виртуальных машин” через меню приложений (rofi или dmenu)
Или командой virt-manager
терминале
Выбираем созданную ВМ из списка и жмём "Свойства подключения" который находятся в тулбаре менеджера "Правка"
В открывшимся окне во второй вкладке "Вирт-ые сети" можно
- Создать новую вирт. сеть
- Вкл/выкл вирт. сеть
- Удалить вирт. сеть
Название сети (которое можно поменять), состояние и её автозапуск
Включаем вирт. сеть и ставим галку о автозапуске
Вуаля, теперь можно создать виртуальную машину
# Через терминал
Список всех вирт. сетей
$ sudo virsh net-list --all
Имя Состояние Автозапуск Постоянный
-------------------------------------------------
default не активен no yes
Включить [default] вирт. сеть
sudo virsh net-start default
Автозапуск вирт. сети [default] при запуске системы
sudo virsh net-autostart default
Готово
# bad name at /etc/hosts line *
С прописанными в /etc/hosts
от StevenBlack
из данного моего гайда, dnsmasq возмущается
на данные строки
$ systemctl status libvirtd
...
dnsmasq[54577]: bad address at /etc/hosts line 25
dnsmasq[54577]: bad address at /etc/hosts line 40796
dnsmasq[54577]: bad address at /etc/hosts line 40797
dnsmasq[54577]: bad address at /etc/hosts line 40798
dnsmasq[54577]: bad address at /etc/hosts line 72163
dnsmasq[54577]: bad address at /etc/hosts line 72164
dnsmasq[54577]: bad address at /etc/hosts line 72165
Решил это просто отредактировав файл hosts закомментировав (НЕ удалять) эти указанные номером строки
Чтобы быстро перейти к данной строчке вот небольшой лайфках
В vim/nvim вводим :'номерстроки'
и жмём enter
fe80::1%lo0 localhost
0.0.0.0 27--01bbcpolice.powercoremedia.com
0.0.0.0 27--m01police.55fifayellow.com
0.0.0.0 27--m01police.best-rc-store.com
0.0.0.0 www.27--01bbcpolice.powercoremedia.com
0.0.0.0 www.27--m01police.55fifayellow.com
0.0.0.0 www.27--m01police.best-rc-store.com
Или воспользуйтесь данной командой для автоматического удаления данных строк
sudo sed -i '/fe80::1%lo0 localhost/d;/0.0.0.0 27--01bbcpolice.powercoremedia.com/d;/0.0.0.0 www.27--01bbcpolice.powercoremedia.com/d' /etc/hosts
И рестарт libvirtd
sudo systemctl restart libvirtd
Нажал Начать Установку Первое с чем я столкнулся и то как это решил
Автоматически запустил live CD Arch Linux SSH соединение в VM произошёл и всё прекрасно работает (соединение default NAT) Только вот на андроид через Termux не работает
На Manjaro Plasma Live Iso интерфейс лагает Решил эту проблему довольно просто
# !Проблема: Невозможность запустить VM!
Столкнулся с данной ошибкой, из-за того что место в котором расположено iso находится на другом разделе
Не удалось завершить установку:
«внутренняя ошибка: QEMU неожиданно завершил работу монитора: 2022-07-20T16:53:24.729056Z
qemu-system-x86_64: -device {"driver":"virtio-blk-pci","bus":"pci.4","addr":"0x0","drive":"libvirt-1-format","id":"virtio-disk0","bootindex":1}:
Could not open '/media/Distrib/iso/Linux/archlinux-2022.07.01-x86_64.iso': Permission denied»
Решилось путём редактирования конфига /etc/libvirt/qemu.conf
. Раскоментируем
строки для предоставления qemu все полномочия чтения данного iso
user = "libvirt-qemu" -> user = "имяпользователя"
group = "libvirt-qemu" -> group = "wheel"
Или ввести эти команды в терминале
sudo sed -i "s|^#user = .*|user = \"${USERNAME}\"|g" /etc/libvirt/qemu.conf
sudo sed -i "s|^#group = .*|group = \"wheel\"|g" /etc/libvirt/qemu.conf
Сохраняем конфиг и перезагружаем сервис libvirtd
sudo systemctl restart libvirtd
# !Проблема: Termux соединение к VM!
На Андроид по SSH не коннектится в VM с помощью программы Termux Когда жму коннект мне не выдаёт промпт о вводе пароля
Пока не решил данную проблему
# !Проблема: увеличенный текст в оконном менеджере!
В Arch Linux при настроенным тайловым оконным менеджере всё стало увеличенным включая терминал
Происходит это когда я юзаю дисплей Virtio + OpenGl ускорением
При создании ВМ с Arch Linux и любом окружении WM/DE скейлит текст в терминале alacritty (в конфиге alacritty размер шрифта выставлен 14)
Текст выглядит больше обычного
# Проблема: Использовании picom в VM
В настройках виртуального оборудования во вкладке Видео выставлено Модель: Virtio с включенным 3D ускорением. При использовании моего picom config'а как композитора в окружениях таких как LXDE, LXQT и т.п перемещение окон идёт с отставанием с заметным input лагом
Решение: В конфиге picom выставить
backend = "xrender"; -> "glx"
vsync = true; -> false
И запустить picom командой
picom -b --experimental-backends &
Теперь всё очень плавное на 100% при 60hz дисплей в гостевой вм
# Проблема: Не могу создать снапшот активное состояние гостевой машины
Ошибка создания снимка: Операция не поддерживается: внутренние снимки виртуальной машины с микропрограммой на основе pflash не поддерживаются
Error creating snapshot: Operation not supported:
Internal snapshots of a VM with pflash based firmware are not supported.
-
Решение для гостевой Linux машине: создавать снимок гостя можно только в выключенном состоянии (UEFI)
-
Решение для гостевой Win10 машине: Смог исправить это отредактировав xml файл в данной строке вместо type="pflash" написать type="rom"
<loader readonly="yes" type="rom">/usr/share/edk2-ovmf/x64/OVMF_CODE.fd</loader>
После я смог сделать снимок экрана
# Проблема: Нету bootloader'а grub после импорта qcow образа
После переустановки Арча на хосте я импортировал qcow образ и обнаружил что на нём вместо появления grub и запуска я получаю UEFI Interactive Shell
Решаение
Выходим из uefi shell введя exit
Далее в bios'е выбираем "Boot Maintenance Manager" - "Boot From File" - Выбрать "EFI, PciRoot..." - мы находимся в boot разделе
Выбираем "<EFI> - <arch> - <grubx64.efi>" после чего появится grub и загрузится в гостевую машину
Чтобы при последующей перезагрузке не сталкиватся с этим необходимо всего-лишь
заново установить grub в /boot/efi
и обновить конфиг grub
sudo grub-install --efi-directory=/boot/efi
sudo grub-mkconfig -o /boot/grub/grub.cfg
# !Проблема: Не могу удалить Дисплей Spice!
Хотел проброс видюхи на win10 но появилась такая проблема
Ошибка удаления устройства: конфигурация не поддерживается: chardev 'spicevmc' not supported without spice graphics
Добавить удалённый канал spice Поставить Видео - none
#
!Проблема: <qemu:commandline>
не вставляется в xml файл virt-manager!
Решением было сразу при редактировании вставить заполненную строку с содержимым т.е где троеточие должны быть вставлены переменные
<qemu:commandline>
...
</qemu:commandline>
Дополнительно вставив в самый вверх
<domain xmlns:qemu="http://libvirt.org/schemas/domain/qemu/1.0" type="kvm">
И после применения у меня данные строки сохранились
# Общий буфер обмена
Проверено на: VM Arch Linux с окружением KDE Plasma, Gnome, Xfce4
Буфер обмена работает как с гостя на хост так и наоборот
Гостю необходимо установить пакет
sudo pacman -S spice-vdagent
Убедитесь чтобы в virt-manager'е было добавлено оборудование - Канал Spice с типом уст-ва Агент SPICE (spicevmc). Если оборудование у вас есть тогда просто перезагружаем гостевую машину, после скачивания пакета
Для пользователей системы инициализации OpenRC (Artix Linux) устанавливаем пакеты
sudo pacman -S qemu-guest-agent spice-vdagent spice-vdagent-openrc
Запускаем сервис
rc-update add spice-vdagent
# Как на Window Manager'е задействовать общий буфер обмена
Столкнулся с подобным я на icewm.
Покопавшись нашёл решение, необходимо было запустить команду spice-vdagent
в терминале, можно также её добавить в автозапуск файла ~/.xprofile
(Для
DM) или ~/.xinitrc
(запуск с TTY)
Или также можно стартануть systemd сервис
sudo systemctl start spice-vdagentd
# !Общие папки (Shared Folders) используя virtiofs!
На хосте выбираем место где будет гость цеплять наши файлы
mkdir ~/Shared
В VirtManager добавляем оборудование "Файловая система" с данными настройками:
- Драйвер: virtiofs
- Путь на хосте:
/home/$USER/Shared
(т.е то место где гость будет цеплять файлы) - Путь в гостевой ОС: Qemu (место в гостевой VM используемое для идентификации общего каталога, который необходимо смонтировать в гостевой ОС)
После добавления уст-ва загружаемся в VM и создаём каталог для монтирования общей папки
mkdir ~/Qemu
Монтируем
# Пример
sudo mount -t virtiofs [Имя папки хоста которую ходим передать] [Путь созданного каталога в гостевой ОС для монтирования]
# Команда
sudo mount -t virtiofs Qemu /home/$USER/Shared
И вуаля Общая Папка появилась с файлом который мы будучи хостом поместили внутрь
Чтобы сделать монтирование Shared Folders постоянным при включении гостя, прописываем в /etc/fstab
Shared /home/onix/Qemu virtiofs defaults 0 0
Вот и всё!
# Общие папки (Shared Folders) используя virtio-9p
На хосте выбираем место где будет гость цеплять наши файлы
mkdir ~/Shared
В VirtManager добавляем оборудование "Файловая система" с данными настройками:
- Драйвер: virtio-9p
- Путь на хосте: /home/user/Shared (т.е то место где мы добавляем файлы с которыми хотим поделится чтобы гость их видел)
- Путь в гостевой ОС: host0 (идентификация общего каталога т.е mount tag, называть можно как угодно)
После добавления уст-ва загружаемся в VM и создаём каталог для монтирования общей папки
Папка будет называться vmshare и будет находится в домашнем каталоге гостя
mkdir ~/vmshare
Монтируем
# Пример
sudo mount -v -t 9p -o trans=virtio,version=9p2000.L [Индентификатор общего каталога т.е mount tag] [Путь созданного каталога в гостевой ОС для монтирования]
# Команда
sudo mount -v -t 9p -o trans=virtio,version=9p2000.L host0 ~/vmshare
Готово! Общая папка создана
# !!Резервирование образа qcow2 из /var/lib/libvirt/images/!!
Обычное копирование на мой NTFS HDD диск, производится успешно
sudo cp /var/lib/libvirt/images/win10.qcow2 /media/Other/backup_w10.qcow2
50gb передалось за 10 минут
Данной командой можно сдампить xml файл гостя
sudo virsh dumpxml win10 > ~/win10dump.xml
# Ручное редактирование xml файл
Есть два варианта
sudo EDITOR=nvim virsh edit win10
sudo vim /etc/libvirt/qemu/win10.xml
Если вы ДЕЙСТВИТЕЛЬНО не знаете что делаете, не делайте этого. Потому что virsh edit имеет проверка синтаксиса, чтобы выявлять некоторые проблемы. Совсем как visudo делает.
# Где находятся логи запуска Гостя VM?
В /var/log/libvirt/qemu/{VMNAME}
# Где находятся аргументы запуска qemu если запускать из Virt-Manager?
В /var/log/libvirt/{VMNAME}.log
# Проблемы и способы их решения
-
Активный снимки в Virt Менеджере не поддерживаются если включён UEFI
Решение: Делать снимки вм только в выключенном состоянии
-
Нету разрешений на доступ к папке /home/anix/Shared в Virt Manager используя virtio-9p
Решение использовать virtiofs