KVM

Материал из support.qbpro.ru

Промышленная реализация виртуальной машины или стандарты 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

ДОПОЛНИТЕЛЬНЫЕ РАЗДЕЛЫ

ИСТОЧНИКИ: