KVM: различия между версиями
imported>Vix Нет описания правки |
Vix (обсуждение | вклад) |
||
(не показано 45 промежуточных версий 2 участников) | |||
Строка 3: | Строка 3: | ||
''Здесь собрано все, что может потребоваться для создания виртуальной машины по технологии KVM.'' | ''Здесь собрано все, что может потребоваться для создания виртуальной машины по технологии KVM.'' | ||
=='''Как конвертировать образы между virtualbox и qemu/kvm'''== | |||
Все преобразования происходят через формат raw: | Все преобразования происходят через формат raw: | ||
Строка 9: | Строка 9: | ||
VBoxManage internalcommands converttoraw image.vdi image.raw | VBoxManage internalcommands converttoraw image.vdi image.raw | ||
или | |||
VBoxManage clonehd centos6.vdi centos6.img -format RAW | |||
из raw в qcow: | из raw в qcow: | ||
Строка 15: | Строка 19: | ||
Более полное описание - [[Перенос виртуальной машины в KVM]] | Более полное описание - [[Перенос виртуальной машины в KVM]] | ||
[[Howto Qemu - kvm Debian 8]] | * [[Из Virtualbox в KVM]] | ||
* [[Проброс USB в виртуалку по сети средствами UsbRedir и QEMU]] | |||
* [[Howto Qemu - kvm Debian 8]] | |||
* [https://wiki.debian.org/ru/KVM wiki] | |||
* [[Qemu-KVM: работа в Debian]] | |||
* [[Webvirtmgr на Debian Jessie. Веб интерфейс для Linux KVM]] | |||
* [http://www.libvirt.org/formatdomain.html#elementsUSB libvirt-configure] | |||
* [[OEM-активация Windows Vista/7/8/8.1 под гипервизором QEMU]] | |||
* [[Libvirt, qemu или 2 устройства USB]] | |||
* [[Работа с 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
ДОПОЛНИТЕЛЬНЫЕ РАЗДЕЛЫ
- Libvirt виртуализируем сетевые устройства
- WebVirtCloud
- Импорт kvm виртуалок в Proxmox
- Install KVM with virt-manager and Cockpit on Debian 12 (Bookworm)
- Install Debian 12 KVM Server