KVM: различия между версиями

Материал из support.qbpro.ru
imported>Vix
Нет описания правки
 
(не показано 35 промежуточных версий 2 участников)
Строка 3: Строка 3:
''Здесь собрано все, что может потребоваться для создания виртуальной машины по технологии KVM.''
''Здесь собрано все, что может потребоваться для создания виртуальной машины по технологии KVM.''


* '''Как конвертировать образы между virtualbox и qemu/kvm'''
=='''Как конвертировать образы между virtualbox и qemu/kvm'''==
Все преобразования происходят через формат raw:
Все преобразования происходят через формат raw:


Строка 18: Строка 18:
     qemu-img convert -f raw image.raw -O qcow2 image.qcow
     qemu-img convert -f raw image.raw -O qcow2 image.qcow
Более полное описание - [[Перенос виртуальной машины в KVM]]
Более полное описание - [[Перенос виртуальной машины в KVM]]
* [[Из Virtualbox в KVM]]


* [[Проброс USB в виртуалку по сети средствами UsbRedir и QEMU]]
* [[Проброс USB в виртуалку по сети средствами UsbRedir и QEMU]]
Строка 36: Строка 38:


* [[Работа с KVM в Debian или Ubuntu из командной строки]]
* [[Работа с KVM в Debian или Ubuntu из командной строки]]
== '''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'''
* [https://forum.ispsystem.ru/showthread.php?23486-%D0%9D%D0%B5%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE-%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B8%D1%82%D1%8C%D1%81%D1%8F-%D0%BA-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D1%83!/page3 Error: Невозможно подключиться к серверу]
* Проблема: '''Каждый раз при загрузке 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
* [http://itisgood.ru/2018/09/05/vkljuchit-uefi-dlja-qemu-kvm-na-fedora/ Включить UEFI для QEMU KVM на Fedora]
* [https://gist.github.com/Manouchehri/2b1b523eed834f295915 windows10qemu.sh]
* Зависает или отключается при копировании в 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
* [http://datadump.ru/windows7-freezes-copying-files/ Зависает копирование файлов]
* '''Нагрузка на ЦПУ''' при работе сетевого драйвера '''Virtio'''!
* Решение найдено в сети:<br>
Путём удаления из конфигурации вирт. машин устройства «tablet» (нагуглилось) удалось «сбить» нагрузку от простаивающих гостей. Нагрузку на
CPU при прохождении трафика побороть/отдиагностировать не удалось, но virtio_net траф качает более/менее. В жертву Ктулху принесена
печенька в надежде, что с очередным обновлением нагрузка спадёт. Тему закрываю.
* [https://www.linux.org.ru/forum/admin/10934296 взято тут]
* [https://russianblogs.com/article/6949119690/ рекомендации от REDHAT]
=='''Подключение и отключение 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'>
    <source>
      <address bus='4' device='24'/>
    </source>
  </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'>
  <source>
    <vendor id='0x03f0'/>
    <product id='0x4217'/>
  </source>
</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 виртуализируем сетевые устройства]]
* [https://github.com/retspen/webvirtcloud/blob/master/README.md WebVirtCloud]
* [https://www.andreyus.com/import-kvm-virtualok-v-proxmox/ Импорт kvm виртуалок в Proxmox]
* [https://techviewleo.com/install-kvm-virt-manager-cockpit-debian/ Install KVM with virt-manager and Cockpit on Debian 12 (Bookworm)]
* [https://blog.programster.org/install-debian-12-kvm-server Install Debian 12 KVM Server]
=='''ИСТОЧНИКИ:'''==
* [[Синхронизация времени в контейнере KVM]]
* [http://www.oslogic.ru/knowledge/679/izmenenie-razmera-diska-virtualnoj-mashiny-kvm/ Изменение размера диска виртуальной машины KVM]
* [https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md Windows VirtIO Drivers]
* [https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ Archive-virtio]
* [https://wiki.autosys.tk/linux_faq/kvm_usb_hotplug Подключение и отключение USB устройств к виртуальной машине KVM]
* [http://omsklug.com/2012/11/kvm-usb-forwarding/ Проброс USB устройств в гостевую ОС KVM.]
* [http://odessa-linux.blogspot.com/2012/07/usb-udev.html Автомонтирование USB через UDEV.]

Текущая версия от 20:37, 27 марта 2024

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

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

ИСТОЧНИКИ: