KVM
Промышленная реализация виртуальной машины или стандарты REDHAT
Здесь собрано все, что может потребоваться для создания виртуальной машины по технологии KVM.
Как конвертировать образы между virtualbox и qemu/kvm
Все преобразования происходят через формат raw:
из vdi в raw:
VBoxManage internalcommands converttoraw image.vdi image.raw
или
VBoxManage clonehd centos6.vdi centos6.img -format RAW
из raw в qcow:
qemu-img convert -f raw image.raw -O qcow2 image.qcow
Более полное описание - Перенос виртуальной машины в KVM
KVM Virtio Storage
После того как вы установили WIN в режиме HVM, необходимо установить все драйвера в системе, установятся видео, сеть, чипсет. Теперь необходимо создать новый носитель и принудительно указать тип vitio режим native, когда загрузится система установить на него драйвер virtio storage, снова перезагрузиться,после этого выключите машину и основной диск так же сделайте virtio, все теперь производительность системы будет в максимуме. Созданный носитель теперь можно убрать.
Изменение размера диска виртуальной машины KVM
Достаточно часто возникает необходимость изменить размер диска виртуальной машины – ну не рассчитали при создании образа диска. Тут есть два способа:
создать новый образ диска, отформатировать его и подключить к виртуальной машине с помощью команд virsh attach-disk или qemu attach-disk изменить размер диска непосредственно в образе виртуальной машины. Второй способ более естественный и безболезненный в смысле производительности. При изменении размера диска виртуальной машины KVM она должна быть выключена!!!
Изменение производится одной командой
sudo qemu-img resize /path/to/disk +disk_sizeG
где /path/to/disk – путь до образа диска;
disk_size – числа, на который увеличивается или уменьшается (тогда – вместо +) размер диска;
G – единица измерения – гигабайт. Можно изменить размер диска на disk_size мегабайт – тогда M.
В результате работы этой команды в конце диска образа виртуальной машины KVM появляется disk_size гигабайт (или мегабайт) свободного, нараспределенного дискового пространства. Можно загрузить виртуальную машину и создать дополнительный раздел при помощи fdisk или parted, можно увеличить размер разделов при помощи parted.
В принципе все это можно сделать и на хосте, подключив диск при помощи NBD, с помощью тех-же fdisk или parted.
parted /dev/nbd0
Таким образом можно изменять размер дисков в формате qcow2 и raw (можно еще и в qcow, но этот формат практически не используется).
Ошибки и решения KVM
- Ошибка: 3276: error : virNetSocketReadWire:1801
Решение: Проблему решили тем что hostname не был прописан в /etc/hosts
- Проблема: Каждый раз при загрузке Windows в KVM время уходит
Решение: в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation создать параметр DWORD c именем RealTimeIsUniversal = 1
- UEFI - установка в QEMU / KVM
UEFI (Unified Extensible Firmware Interface) стал успешным преемником устаревшей прошивки BIOS.
Эмуляция оборудования на основе UEFI на виртуальной машине KVM / QEMU возможна благодаря так называемой OVMF (Open Virtual Machine Firmware), которая поставляется с EDK2 (EFI Development Kit), эталонной реализацией UEFI.
OVMF доступен в виде пакета RPM для дистрибутивов на основе RPM (CentOS, Fedora, Red Hat).
В случае выпуска DEBIAN все, что нам нужно, это DEB-пакет ovmf. Установите пакет, используя следующую команду:
apt-get install ovmf
В настройка BIOS машины KVM появится выбор UEFI
- Зависает или отключается при копировании в WIndows2008R2 сеть с драйвером virtio-net.
В среде сервера Windows 2008R2 выполнить команды:
netsh int tcp set global autotuning=disabled netsh int tcp set global autotuninglevel=disabled netsh int tcp set global rss=disabled chimney=disabled
- Нагрузка на ЦПУ при работе сетевого драйвера Virtio!
- Решение найдено в сети:
Путём удаления из конфигурации вирт. машин устройства «tablet» (нагуглилось) удалось «сбить» нагрузку от простаивающих гостей. Нагрузку на CPU при прохождении трафика побороть/отдиагностировать не удалось, но virtio_net траф качает более/менее. В жертву Ктулху принесена печенька в надежде, что с очередным обновлением нагрузка спадёт. Тему закрываю.
Подключение и отключение USB устройств к виртуальной машине KVM
Подключаем устрйоство к хосту с KVM и смотрим как оно определилось:
$ lsusb Bus 004 Device 024: ID 11a0:eb20 Chipcon AS
Тут нас интересуют номер шины и номер устройства: Bus 004 Device 024: На основании этих сведений создаем файлик *.xml:
<hostdev mode='subsystem' type='usb' managed='yes'>
<address bus='4' device='24'/>
</hostdev>
Нули из номера шины и номера девайса нужно убрать.
Теперь запускаем машину и узнаем ее имя:
$ virsh list Id Name State ---------------------------------------------------- 2 Windows_7_x64_Ent_RUS running
Теперь подключаем устройство:
virsh attach-device <VM name> <file>
То есть в моем случае:
$ virsh attach-device Windows_7_x64_Ent_RUS ./progr.xml Device attached successfully
Также вместо положения на шине можно указывать VendorID и DeviceID:
<hostdev mode='subsystem' type='usb'>
<vendor id='0x03f0'/>
<product id='0x4217'/>
</hostdev>
Ну и самое интересное - оформление правил udev для автоматического подключения устройств.
/etc/udev/rules.d/90-libvirt-usb.rules
ACTION=="add", \ SUBSYSTEM=="usb", \ ENV{ID_VENDOR_ID}=="03f0", \ ENV{ID_MODEL_ID}=="4217", \ RUN+="/usr/bin/virsh attach-device GUESTNAME /path/to/hostdev-03f0:4217.xml" ACTION=="remove", \ SUBSYSTEM=="usb", \ ENV{ID_VENDOR_ID}=="03f0", \ ENV{ID_MODEL_ID}=="4217", \ RUN+="/usr/bin/virsh detach-device GUESTNAME /path/to/hostdev-03f0:4217.xml"
И перечитать правила:
sudo udevadm control --reload-rules && sudo udevadm trigger
Ошибки
Если при попытке проброса устройства команда выполняется без ошибок с рузультатом:
Device attached successfully
в гостевой машине ничего не появляется, при этом в журнале хоста KVM есть ошибки типа:
apparmor="DENIED" operation="open"
Значит на хосте KVM в файлике /etc/apparmor.d/abstractions/libvirt-qemu нужно сделать некторые изменения: Строку /dev/bus/usb/ r, привести к виду: /dev/bus/usb/ rw, И еще добавить пару строк:
/dev/bus/usb/*/[0-9]* rw, /run/udev/** rw,
То есть выполнить:
cp /etc/apparmor.d/abstractions/libvirt-qemu ~/libvirt-qemu.backup sudo sed -i 's/\/dev\/bus\/usb\/\ r,/\/dev\/bus\/usb\/\ rw,/' /etc/apparmor.d/abstractions/libvirt-qemu sudo sed -i '\/dev\/bus\/usb\/\ rw,/ a\/dev\/bus\/usb\/\*\/\[0-9\]\* rw,' /etc/apparmor.d/abstractions/libvirt-qemu sudo sed -i '\/dev\/bus\/usb\/\ rw,/ a\/run\/udev\/\*\* rw,' /etc/apparmor.d/abstractions/libvirt-qemu
И перезапустить сервисы (или перезагрузить хост):
sudo service apparmor restart sudo service libvirtd restart
ДОПОЛНИТЕЛЬНЫЕ РАЗДЕЛЫ
- Libvirt виртуализируем сетевые устройства
- WebVirtCloud
- Импорт kvm виртуалок в Proxmox
- Install KVM with virt-manager and Cockpit on Debian 12 (Bookworm)
- Install Debian 12 KVM Server