https://www.youtube.com/watch?v=tLQ2PtSVr58 - достаточно толковое видео
https://b14esh.com/category/kvm - много всего
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/ - драйверы для виртуального оборудования
https://b14esh.com/devops/cockpit.html - веб интерфейс управления KVM
Установка
cat /proc/cpuinfo | grep -E '(vmx|svm)' -m 1 - проверить что процессор поддерживает Виртуализацию
apt install qemu-kvm libvirt-daemon-system ovmf virtinst - установка на debian
apt install qemu-kvm libvirt-bin ovmf virtinst - установка на ubuntu (до 20)
yum -y install kvm libvirt qemu-kvm virtinst - установка на CentOS
apt install virt-manager - установка virt-manager
qemu-kvm - гипервизор
libvirt-bin - по для управления гипервизором(virsh)
virt-manager - графическая утилита для управления гипервизором (не обязательная программа, для установки требуется x-windows)
ovmf - по для поддержки загрузки uefi для гостей
virtinst - программа для создания виртуальных машин в консоли
ip -a - посмотреть адаптеры
iptables -vnL - показать правила firewall
sudo iptables -nvL - показать правила firewall
virt-host-validate - проверка установленных компонентов
libvirtd - основной демон управления виртуализацией
systemctl status libvirtd - проверяем состояние демона
systemctl start libvirtd - запускаем демон
systemctl enable libvirtd - добавляем в автозагрузку
virsh
virsh - программа для управления KVM
help - покажет все доступные команды
!!! Использование virsh работает TAB
virsh command \ KVM управление VM
osinfo-query os - список поддерживаемых ос
virsh list --all - показать все доступные ВМ
virsh start VM_name - запустить ВМ
virsh reboot VM_name - перезагрузка VM
virsh shutdown VM_NAME - выключить ВМ (нажать кнопку выкл)
virsh destroy VM_name - выключить насильно ВМ (как вытащить вилку из розетки)
virsh undefine VM_name - удалить ВМ
virsh autostart VM_name - включить автозагрузку для ВМ
virsh autostart --disable VM_name - отключить автозагрузку ВМ
virsh edit VM_name - отредактировать настройки ВМ
net-
!!! Сеть
!!! В данном примере все действия производятся из оболочки virsh
!!! сеть должна отличаться от вашей сети, иначе она не сможет запустится.
!!! тоесть у вас сеть 192.168.0.0/24, тогда виртуальная будет 192.168.100.0/24
!!! по умолчанию 192.168.122.0/24
!!! При создании сети создаются также правила в firewall
net-list - покажет все активные сети
net-list --all - показать все сети
net-info default - посмотреть информацию по сети default
net-edit default - редактировать параметры сети default
net-start default - запуск сети default
net-autostart default - включить авто запуск сети
net-destroy - остановка сети ( в некоторых случаях удаляет сеть)
net-dumpxml default - вывести на экран настройки сети
virsh net-dumpxml default > /root/default.xml - выйдя из virsh, вот так можно выгрузить настройки сети default в файл default
namelan0 ... можно удалить всю строку вместе с uuid, будет регенерировано при создании сети
!!! Существует две команды для создания сети из xml файла.
!!! Это net-create и net-define.
!!! Имеются отличия созданных сетей
!!! При net-define сеть создается, ее надо запустить, при net-destroy она останавливается, для удаления надо использовать команду net-undefine
!!! При net-create сеть создается и сразу запускается, при net-destroy сразу удаляется
net-define --file file.xml - создать сеть из файла file.xml
net-start --network namelan0 - запуск сети namelan0
net-destroy namelan0 - остановить сеть namelan0
net-undefine --network namelan0 - удалить сеть полностью
net-create --file /home/b14esh/file.xml - создание сети
net-destroy namelan0 - удалить сеть namelan0
LVM / parted
!!! подготовим диск для LVM
parted -l - все диски и их разметку
parted /dev/vdb - запустили партед и указали диск с которым будем работать
(parted)mklabel msdos - задали таблицу разделов MBR, если требуется поддержка диска более 2ТБ то необходимо таблицу разделов указывать GPT команда (parted)mklabel gpt
(parted) unit MiB - выбрали единицу измерения мегабайты
(parted) mkpart - запросили создать раздел
Partition type? primary/extended? p - сказали что он первичный
File system type? [ext2]? ext4 - попросили создать файловую систему ext4
Start? 0 - указали начало раздела
End? -1 - указали конец
y - применили изменения
(parted) q - выход из программы разметки
!!! Если диск будет использоваться не для LVM то надо создать на нем ФС
mkfs.ext4 /dev/vdb2 - для создания ФС на диске /dev/vdb2
LVM / создание
fdisk -l - показать диски и разделы
parted -lm - показать диски и разделы
ls /dev/vd* - показать диски и разделы
pvcreate /dev/vdb1 - создаем структуру LVM, пометим диск
vgcreate vg0 /dev/vdb1 - создадим группу vg0 и добавим туда помеченный диск vdb1
vgdisplay - показать используемое пространство
!!! Все этого достаточно что бы дальше KVM мог использовать данный раздел.
сеть на openvswitch
!!! сносим сеть на brctl !!!
brctl show - проверяем что у нас там настроено
brctl delif br0 eno1 - удаляем интерфейс (eno1) из (br0)
brctl delbr br0 - удаляем бридж (br0)
brctl show - проверяем что у нас там настроено
!!! настраиваем ovs
apt install openvswitch-switch - устанавливаем ovs
ovs-vsctl show - смотрим что у нас с сетью
ovs-vsctl add-br br0 - создаем свитч с именем br0
ovs-vsctl add-port br0 eno1 - добавляем в свитч с именем br0 интерфейс eno0
ovs-vsctl show - проверяем настройки
!!! далее настройка KVM
virsh net-list --all - показать все сети
virsh net-dumpxml default > /root/1.xml - этой командой мы можем сохранить настройки сети default
пример простой сети (ovs) для добавления в KVM
-------------
br0
-------------
virsh net-define --file /root/1.xml - этой командой мы можем создать сеть из файла (/root/1.xml)
virsh net-start --network br0 - запуск сети
virsh net-autostart --network br0 - включение автозапуска для сети
пример сложной сети с vlan (ovs) для добавления в KVM
-------------------
ovs-network
-------------------
пример настройки интерфейса ВМ
virsh list --all - показать доступные ВМ
virsh edit VM_name - редактируем файл настроек VM_name
----------------
----------------
LVM / pool — для каталога
!!! Хранилище образов, дисков
!!! RAW - сырой диск
!!! qcow2 - динамически расширяемый, предпочтительный формат, так как гостя можно будет бэкапить средствами kvm
!!! хз как по скорости по мне так они одинаковые
pool-list --all - показать все хранилища
!!! Для команд pool-create и pool-define требуется конфигурационные файлы xml
!!! При pool-define хранилище создается, его надо запустить, при pool-destroy останавливается, для удаления надо использовать команду pool-undefine
!!! При pool-create создается и сразу запускается, при pool-destroy сразу удаляется, подходит для временного использования
!!! Так как у нас нет конфиг файла хранилища xml можно воспользоваться командами pool-create-as и pool-define-as
pool-create-as --name local-tmp --type dir --target /tmp/ - создать хранилище с именем local-temp в каталоге /tmp и оно сразу будет запущенно
pool-destroy local-tmp - удалить хранилище
pool-define-as --name local-tmp --type dir --target /tmp/ - создать хранилище с именем local-temp в каталоге /tmp
pool-autostart local-tmp - включить авто запуск хранилища local-tmp
pool-start local-tmp - запустить хранилище local-tmp
vol-create-as --pool local-tmp --capacity 1G --name test.qcow2 --format qcow2 - вот так можно создать диск test.qcow2 на локальном хранилище local-tmp
pool-destroy local-tmp - останавливаем хранилище local-tmp
pool-undefine --pool local-tmp - удаляем хранилище local-tmp
pool-define-as --name vg0 --type logical --source-name vg0 - добавить хранилище на LVM (почему --type logical ХЗ)
pool-autostart --pool vg0 - добавили в авто запуск хранилище vg0
pool-start --pool vg0 - запустили хранилище
vol-create-as --pool vg0 --name test --capacity 1G - создать диск с именем test размером 1Gb
vol-list --pool vg0 - показать диски на хранилище vg0
vol-delete test --pool vg0 - удалить диск test из пула vg0
pool-undefine vg0 - удалить хранилище vg0
pool-define-as --name zp1 --type zfs --target zp1 - подключить хранилище ZFS с именем zp1 и назвать его zp1
pool-autostart --pool zp1- добавили в авто запуск хранилище vg0
pool-start --pool zp1 - запустили хранилище
vol-create-as --pool zp1 --name test1 --capacity 10G - создать диск с именем test1 размером 10Gb на хранилище zp1
TRIM в VM
!!! Уменьшение диска qcow2 средствами ВМ
!!! Освобождается пустое место
!!! Выделенный размер остается прежним
Настройка TRIM
1. Выставить диск как SCSI
2. Выставить контроллер как VirtIO SCSI
3. Добавить discard='unmap'
4. Настроить TRIM в VM (напр: fstrim -a -v)
5. Запуск TRIM гостя из гипервизора
virsh domfstrim VM-NAME
virt-install — help
Общие параметры:
-n NAME, --name NAME Имя экземпляра гостя
--memory MEMORY Configure guest memory allocation. Ex:
--memory 1024 (in MiB)
--memory 512,maxmemory=1024
--memory 512,maxmemory=1024,hotplugmemorymax=2048,hotplugmemoryslots=2
--vcpus VCPUS Число виртуальных процессоров, например:
--vcpus 5
--vcpus 5,maxcpus=10,cpuset=1-4,6,8
--vcpus sockets=2,cores=4,threads=2,
--cpu CPU CPU model and features. Ex:
--cpu coreduo,+x2apic
--cpu host-passthrough
--cpu host
--metadata METADATA Конфигурация метаданных гостя, например:
--metadata name=foo,title="Мой прикольный заголовок",uuid=...
--metadata description="Мое милое длинное описание"
Параметры метода установки:
--cdrom CDROM Установочный CD-ROM
-l LOCATION, --location LOCATION
Источник установки (например,
nfs:сервер:/путь,
http://сервер/путь,
ftp://сервер/путь)
--pxe Загрузить из сети с помощью PXE
--import Создать гостевую систему на основе существующего образа диска
--livecd Рассматривать носитель как LiveCD
-x EXTRA_ARGS, --extra-args EXTRA_ARGS Дополнительные параметры для передачи ядру, загруженному из --location
--initrd-inject INITRD_INJECT Добавить файл в корневой каталог initrd из --location
--os-variant DISTRO_VARIANT Вариант устанавливаемой ОС (например, «fedora18», «rhel6», «winxp»)
--boot BOOT Параметры загрузки гостя, например:
--boot hd,cdrom,menu=on
--boot init=/sbin/init (для контейнеров)
--boot uefi (для windows)
--idmap IDMAP Включить пространство имен пользователей для контейнеров LXC, например:
--idmap uid_start=0,uid_target=1000,uid_count=10
Параметры устройства:
--disk DISK Настройка пространства хранения данных, например:
--disk size=10 (новый образ на 10 ГиБ в выбранном по умолчанию месте)
--disk /my/existing/disk,cache=none
--disk device=cdrom,bus=scsi
--disk=?
-w NETWORK, --network NETWORK
Конфигурация гостевого сетевого интерфейса, например:
--network bridge=mybr0
--network network=my_libvirt_virtual_net
--network network=mynet,model=virtio,mac=00:11...
--network none
--network help
--graphics GRAPHICS Параметры дисплея гостевой системы, например:
--graphics vnc
--graphics SPICE,port=5901,tlsport=5902
--graphics none
--graphics vnc,password=foobar,port=5910,keymap=ja
--controller CONTROLLER
Настройка контроллера, например:
--controller type=usb,model=ich9-ehci1
--input INPUT Конфигурация устройства ввода, например:
--input tablet
--input keyboard,bus=usb
--serial SERIAL Настройте последовательное устройство гостевой системы
--parallel PARALLEL Настройте параллельное устройство гостевой системы
--channel CHANNEL Настройте канал обмена данными для гостевой системы
--console CONSOLE Настройте соединение между гостем и хостом в текстовой консоли
--hostdev HOSTDEV Конфигурация физических USB/PCI и других устройств хоста для совместного использования гостевой машиной.
--filesystem FILESYSTEM Передача каталога хоста гостевой системе, например:
--filesystem /my/source/dir,/dir/in/guest
--filesystem template_name,/,type=template
--sound [SOUND] Настройте эмуляцию звукового устройства для гостевой системы
--watchdog WATCHDOG Настройте устройство слежения для гостевой системы
--video VIDEO Настройте видеоустройства гостевой системы например qlx
--smartcard SMARTCARD Настройте устройство смарт-карт, например: --smartcard mode=passthrough
--redirdev REDIRDEV Настройте устройство перенаправления, например: --redirdev usb,type=tcp,server=192.168.1.1:4000
--memballoon MEMBALLOON Настройте устройство перераспределения памяти, например: --memballoon model=virtio
--tpm TPM Конфигурация гостевого устройства TPM, например: --tpm /dev/tpm
--rng RNG Configure a guest RNG device. Ex: --rng /dev/urandom
--panic PANIC Конфигурация гостевого устройства паники, например: --panic default
--memdev MEMDEV Configure a guest memory device. Ex: --memdev dimm,target_size=1024
Параметры платформы виртуализации:
-v, --hvm Этот гость должен быть полностью виртуализированным.
-p, --paravirt Этот гость должен быть паравиртуализированным.
--container Этот гость должен быть заключен в контейнер
--virt-type HV_TYPE Имя гипервизора (kvm, qemu, xen и т.п.)
--arch ARCH Имитируемая архитектура процессора
--machine MACHINE Имитируемый тип компьютера
Прочие:
--autostart Запускать домен автоматически при запуске хоста
--transient Create a transient domain.
--wait WAIT Время ожидания завершения установки (в минутах)
--noautoconsole Не подключаться к гостевой консоли автоматически
--noreboot Не выполнять загрузку гостя после установки.
--print-xml [XMLONLY] Вывести XML-описание домена, не создавая гостевую систему.
--dry-run Выполнить установку, но не создавать устройства и гостевые системы.
--check CHECK Включать и выключать без выполнения проверки, например:
--check path_in_use=off
--check all=off
-q, --quiet Подавлять вывод (за исключением ошибок)
-d, --debug Вывести отладочные данные
virt-install примеры
!!! Все легко и просто можно выполнить в virt-manager, его не обязательно ставить на гипервизоре.
!!! порт для spice и VNC берется начиная с 5901 (то есть следующей машине будет присвоен 5902 и т.д.)
!!! По умолчанию контроллеры для виртуальных устройств будут virtio
virt-install --help - помощь
man virt-install - ищема в man жмем / и вводим EXAMPLES
virt-install --hvm --name demo --memory 500 --disk none --livecd --graphics vnc --cdrom /root/fedora7live.iso
virt-install --connect qemu:///system --virt-type kvm --name demo --memory 500 --disk size=10 --cdrom /dev/cdrom --os-variant fedora13
virt-install --connect lxc:/// --name httpd_guest --memory 512 --vcpus 2 --init /usr/bin/httpd
virt-install --connect lxc:/// --name container --memory 128 --filesystem /home/LXC,/ --filesystem /home/test,/mnt --init /bin/sh
virt-install --name test1 --vcpus 1 --memory 512 --network=default,model=e1000 --graphics spice --video qxl --disk vol=zp3/test1-disk1,cache=none,format=raw --boot hd,cdrom --cdrom=/tmp/iso/debian110.iso --sound ac97 --virt-type kvm --hvm
virt-install --name debian8 --ram 1024 --disk path=/PVE/debian8.qcow2,size=8 --vcpus 1 --os-type linux -os-variant generic --network bridge=virbr0 --graphics none --console pty,target_type=serial --location 'http://ftp.nl.debian.org/debian/dists/jessie/main/installer-amd64/' --extra-args 'console=ttyS0,115200n8 serial
virt-install --virt-type=kvm --name centos7 --ram 2048 --vcpus=2 --os-variant=rhel7 --hvm --cdrom=/tmp/CentOS-7-x86_64-DVD-1511.iso --network=bridge=br0,model=virtio --graphics vnc --disk path=/var/lib/libvirt/images/centos7.qcow2,size=40,bus=virtio,format=qcow2
virt-install --name test -r 1024 --disk path=/tmp/disk1.qcow2,size=8 --vcpus 2 --location=http://ftp.ru.debian.org/debian/dists/stable/main/installer-amd64/ --initrd-inject=/root/preseed.cfg --extra-args="auto keyboard-configuration/xkb-keymap=en" --vnc --noautoconsole --os-type Debian10 --accelerate --network bridge=br0,model=virtio --hvm
Драйверы искать тут:
https://docs.fedoraproject.org/en-US/quick-docs/creating-windows-virtual-machines-using-virtio-drivers/
https://pve.proxmox.com/wiki/Windows_VirtIO_Drivers
https://www.linux-kvm.org/page/Virtio
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso - образ с последними драйверами virtio
Агент QEMU установка (Tools):
-------------------------------------------
Установка на госте:
# в Debian - apt-get install qemu-guest-agent
# в CentOS - yum install qemu-guest-agent
# В Windows - с диска virtio-win установить пакет qemu-ga из папки guest-agent
-------------------------------------------
Установка на хосте для гостя:
-------------------------------------------
Установка drivers windows:
0) Подключаем диск с драйверами
1) В диспетчере устройств -> устройство -> обновить драйвер -> папка с драйверами
Установка Balloon
0) Копируем balloon из virtio.iso в "c:/Program files/Balloon"
1) Запускаем CMD от Администратора
2) Создаем каталог Balloon
cd "c:\Program Files\"
mkdir Balloon
3) Переходим в каталог c:\Program Files\Balloon
cd "c:\Program Files\Balloon"
4) Ставим BLNSVR.exe
BLNSVR.exe -i
0. Команда "virsh list не показывает ВМ"
Пользователь должен быть в группе kvm и libvirtd
Проверяем:
id $USER
id user_name
Добавляем с помощью usermod:
usermod -aG kvm user_name
usermod -aG libvirtd user_name
1. Команда "virsh list не показывает ВМ"
Проверьте вывод virsh uri.
Если он возвращает qemu:///session , но вы используете соединение qemu:///system в Virtu-Manager, вы нашли причину.
Можно добавить пользователю в bahsrc:
export LIBVIRT_DEFAULT_URI="qemu:///system"