ссылки
1 2 3 4 |
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 |
Установка
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
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
1 2 3 4 |
virsh - программа для управления KVM help - покажет все доступные команды !!! Использование virsh работает TAB |
virsh command \ KVM управление VM
1 2 3 4 5 6 7 8 9 10 |
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-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
!!! Сеть !!! В данном примере все действия производятся из оболочки 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 <network> <name>namelan0</name> <uuid> ... можно удалить всю строку вместе с uuid, будет регенерировано при создании сети </uuid> <forward mode='nat' /> <bridge name='virbr1' stp='on' delay='0'/> <mac ... можно удалить всю строку вместе с mac, будет генерирование при создании сети/> <ip address='192.168.122.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.122.2' end='192.168.122.254' /> </dhcp> </ip> </network> !!! Существует две команды для создания сети из 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
!!! подготовим диск для 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 / создание
1 2 3 4 5 6 7 8 9 |
fdisk -l - показать диски и разделы parted -lm - показать диски и разделы ls /dev/vd* - показать диски и разделы pvcreate /dev/vdb1 - создаем структуру LVM, пометим диск vgcreate vg0 /dev/vdb1 - создадим группу vg0 и добавим туда помеченный диск vdb1 vgdisplay - показать используемое пространство !!! Все этого достаточно что бы дальше KVM мог использовать данный раздел. |
сеть на openvswitch
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
!!! сносим сеть на 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 ------------- <network> <name>br0</name> <forward mode='bridge'/> <bridge name='br0'/> <virtualport type='openvswitch'/> </network> ------------- virsh net-define --file /root/1.xml - этой командой мы можем создать сеть из файла (/root/1.xml) virsh net-start --network br0 - запуск сети virsh net-autostart --network br0 - включение автозапуска для сети пример сложной сети с vlan (ovs) для добавления в KVM ------------------- <network> <name>ovs-network</name> <forward mode='bridge'/> <bridge name='ovs-br0'/> <virtualport type='openvswitch'/> <portgroup name='vlan-10'> <vlan> <tag id='10'/> </vlan> </portgroup> <portgroup name='vlan-20'> <vlan> <tag id='20'/> </vlan> </portgroup> <portgroup name='vlan-1010'> <vlan> <tag id='1010'/> </vlan> </portgroup> <portgroup name='vlan-1020'> <vlan> <tag id='1020'/> </vlan> </portgroup> <portgroup name='trunkPortGroup'> <vlan trunk='yes'> <tag id='30'/> <tag id='1030'/> </vlan> </portgroup> </network> ------------------- пример настройки интерфейса ВМ virsh list --all - показать доступные ВМ virsh edit VM_name - редактируем файл настроек VM_name ---------------- <interface type='network'> <mac address='52:54:00:a3:16:07'/> <source network='br0'/> <model type='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/> </interface> ---------------- |
LVM / pool — для каталога
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
!!! Хранилище образов, дисков !!! 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
1 2 3 4 5 6 7 8 9 10 11 12 13 |
!!! Уменьшение диска qcow2 средствами ВМ !!! Освобождается пустое место !!! Выделенный размер остается прежним Настройка TRIM 1. Выставить диск как SCSI 2. Выставить контроллер как VirtIO SCSI 3. Добавить discard='unmap' <driver name='qemu' type='qcow2' discard='unmap'/> 4. Настроить TRIM в VM (напр: fstrim -a -v) 5. Запуск TRIM гостя из гипервизора virsh domfstrim VM-NAME |
virt-install — help
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
Общие параметры: -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 примеры
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
!!! Все легко и просто можно выполнить в 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 |
Драйверы искать тут:
1 2 3 4 |
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):
1 2 3 4 5 6 7 8 9 10 11 12 |
------------------------------------------- Установка на госте: # в Debian - apt-get install qemu-guest-agent # в CentOS - yum install qemu-guest-agent # В Windows - с диска virtio-win установить пакет qemu-ga из папки guest-agent ------------------------------------------- Установка на хосте для гостя: <channel type='unix'> <source mode='bind' path='/var/lib/libvirt/qemu/f16x86_64.agent'/> <target type='virtio' name='org.qemu.guest_agent.1'/> </channel> ------------------------------------------- |
Установка drivers windows:
1 2 |
0) Подключаем диск с драйверами 1) В диспетчере устройств -> устройство -> обновить драйвер -> папка с драйверами |
Установка Balloon
1 2 3 4 5 6 7 8 9 |
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 |
KVM swap in file / Файл подкачки
1 2 3 4 5 |
fallocate -l 1G /.swap chmod 600 /.swap mkswap /.swap echo '/.swap none swap defaults 0 0' >> /etc/fstab swapon /.swap |
Команда «virsh list не показывает ВМ»
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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" |