Рубрики
KVM

QEMU / Пример работы с kvm/ nokvm из qemu без libvirt

M – тип машины, virt – абстрактно-виртуальный ARM
-machine указывает тип компьютера, который вы собрались эмулировать, можно выбрать ubuntu, pc, pc-q35 и другие варианты, смотрите подробнее командой -machine help
-cpu - тип процессора, можно передать непосредственно тип процессора, а также дополнительные флаги
-smp - включает симуляцию мультипроцессорной архитектуры, количество ядер
-boot - позволяет настроить порядок загрузки устройств, a,b - дискета, с - первый жесткий диск, d - CDROM, n-p - загрузка через сеть, по умолчанию виртуальная машина загружается из жесткого диска
-m - указывает количество оперативной памяти, доступной машине, объем памяти
-k - раскладка клавиатуры по умолчанию
-soundhw - подключить звуковую карту к системе
-device - подключить указанное устройство к машине, нужно указать драйвер и его опции
-name - имя гостевой системы, будет отображаться в верху окна
-uuid - установить UUID для системы
-fda, fdb - подключить дискету из файла
-hda, hdb - подключить жесткий диск из файла
-cdrom - подключить оптический диск
-usb - включить поддержку USB
-usbdevice - подключить USB устройство
-display - выбрать тип отображения, доступно sdl, curses, gtk, none, vga и другие
-full-screen - запустить в полный экран
-no-acpi - отключить поддержку ACPI
-net - создать сетевой интерфейс
-net nic
-net tap
-net user
-net nic user,model=virtio
-realtime включить режим реального времени, опции mclock нужно передать значение on
-gdb - ожидать подключения отладчика gdb
-enable-kvm - включить поддержку kvm
-loadvm - загрузить сохраненное состояние
-daemonize - сделать процесс фоновым
-snapshot - записывать изменения не в файл жесткого диска, а в отдельные файлы
-nographic - отключить графический вывод
-kernel - использовать указанный образ ядра linux
-append - командная строка для ядра
-initrd - файл initrd для загрузки Linux
-vnc :5 - VNC на :5905 
-drive if=none,file=debian.img,format=qcow2 – образ жесткого диска
-soundhw ac97 - добавить звуковую карту
 no-reboot – перезапуск системы приведет к остановке эмулятора

Немного о сетевых устройствах в qemu

Вариант первый:
qemu-system-x86_64 
-m 1G 
-device virtio-net-pci,netdev=lan 
-netdev user,id=lan 
-drive file=you.iso,media=cdrom

Виртуальная машина автоматически получит ip-адрес из подсети 10.0.2.0/24, шлюз - 10.0.2.2, dns-сервер - 10.0.2.3.
К физическому хосту можно обратиться по адресу 10.0.2.2.
ICMP пакеты через такой тип сети не проходят.


Вариант два:
Для такой сетевой карты требуется root
sudo qemu-system-x86_64 
-m 1G 
-device virtio-net-pci,netdev=lan 
-netdev tap,id=lan,ifname=tap0 
-drive file=/tmp/livecd.iso,media=cdrom
P.S. мне этот вариант не нравится так как у меня уже есть бридж на ovs

Вариант три:
Для такой сетевой карты требуется root
sudo qemu-system-x86_64 
-m 1G 
-device virtio-net-pci,netdev=lan 
-netdev tap,id=lan,script=no,ifname=tap0 
-drive file=/tmp/livecd.iso,media=cdrom
Почти тоже самое что но c очень важным параметром "script=no", 
да и теперь нам надо выполнить одну команду для ovs для добавления tap0 в бридж ovs
ovs-vsctl add-port ovsbr0 tap0
ip link set up dev tap0

x86

Готовим диск:

cd new_dir
wget https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-12.5.0-amd64-netinst.iso

qemu-img create -f qcow2 image_x86.qcow2 10G

Установка системы:
qemu-system-x86_64 
    -enable-kvm 
    -cpu host 
    -hda image_x86.qcow2 
    -drive file=debian-12.5.0-amd64-netinst.iso,media=cdrom 
    -boot d 
    -smp 4 
    -m 4G 
    -display gtk 
    -vga std 
    -device virtio-net-pci,netdev=lan 
    -netdev tap,id=lan,ifname=tap0,script=no 
    -vnc :5 
    -device AC97 
    -nographic

Дальнейший запуск и использование ВМ:
!!! Убираем строки отвечающие за загрузку с cd-cdrom
!!! -drive file=manjaro-xfce-21.0-210318-linux510.iso,media=cdrom 
!!! -boot d 
!!! Не забываем про сеть
!!! ovs-vsctl add-port ovsbr0 tap0
!!! ip link set up dev tap0

qemu-system-x86_64 
    -enable-kvm 
    -cpu host 
    -hda image_x86.qcow2 
    -smp 4 
    -m 4G 
    -display gtk 
    -vga std 
    -device virtio-net-pci,netdev=lan 
    -netdev tap,id=lan,ifname=tap0,script=no 
    -vnc :5 
    -device AC97 
    -nographic

arm



0. Готовим диск болванку:
qemu-img create -f qcow2 ebian12-arm.qcow2 8G


1. Нам нужны будут файлы:
Файло брать тут:
http://ftp.debian.org/debian/dists/bookworm/main/installer-armhf/current/images/netboot/

Нам потребуется:
wget http://ftp.debian.org/debian/dists/bookworm/main/installer-armhf/current/images/netboot/initrd.gz
wget http://ftp.debian.org/debian/dists/bookworm/main/installer-armhf/current/images/netboot/vmlinuz

2. Создаем диск:
qemu-img create -f qcow2 debian12-arm.qcow2 10G

!!! Заменил драйвер для сетевой карты так как при установки системы ее было не видно
!!! Вместо  -device virtio-net-pci,netdev=lan 
!!! На -device virtio-net-device,netdev=lan

3. Создаем виртуальный интерфейс tap0 и добавляем его в ovsbr0
ip tuntap add dev tap0 mode tap
ip link set up dev tap0
ovs-vsctl add-port ovsbr0 tap0


4. Пример первый запуск ВМ для установки ос:
qemu-system-arm -smp 4 -m 1024 -M virt 
   -kernel vmlinuz 
   -initrd initrd.gz 
   -append "root=/dev/ram" 
   -drive if=none,file=debian12-arm.qcow2,format=qcow2,id=hd 
   -device virtio-blk-device,drive=hd 
   -device virtio-net-device,netdev=lan 
   -netdev tap,id=lan,ifname=tap0,script=no 
   -vnc :5 
   -device AC97 
   -nographic 
   -no-reboot

5. Теперь нам нужно добыть загрузочные файлы из толькочто установленного образа
sudo modprobe nbd max_part=16
sudo qemu-nbd -c /dev/nbd0 debian12-arm.qcow2 
mkdir mount-qemu
mount /dev/nbd0p1 mount-qemu
sudo mount /dev/nbd0p1 mount-qemu
mkdir after-copy
cp mount-qemu/ after-copy/
umount mount-qemu 
sudo umount mount-qemu 
sudo qemu-nbd -d /dev/nbd0
sudo killall qemu-nbd


6. Используем образ дальше:
!!! Перед использованием рекомендую файлы initrd,vmlinuz и debian12-arm.qcow2 в один каталог.
qemu-system-arm -smp 4 -m 1024 -M virt 
   -kernel vmlinuz-6.1.0-18-armmp-lpae 
   -initrd initrd.img 
   -drive if=none,file=debian12-arm.qcow2,format=qcow2,id=hd 
   -device virtio-blk-device,drive=hd 
   -device virtio-net-device,netdev=lan 
   -netdev tap,id=lan,ifname=tap0,script=no 
   -vnc :5 
   -device AC97 
   -nographic 
   -no-reboot

7. запуск образа system_img

qemu-system-x86_64 
  -enable-kvm -cpu host 
  -machine type=q35 
  -m 2048 
  -smp sockets=1,cores=4 
  -drive file=./system_img,if=none,id=hd0,format=raw 
  -device virtio-scsi-pci 
  -device scsi-hd,drive=hd0 
  -boot order=d 
  -netdev user,id=net0 
  -device virtio-net-pci,netdev=net0
  

8. запуск образа и использовать бридж что потребует судо:


создаем бридж:
sudo ip link add name br0 type bridge
sudo ip link set br0 up
sudo ip link set eth0 master br0  # Замените eth0 на ваш интерфейс

запускаем вм:
sudo qemu-system-x86_64 
  -enable-kvm -cpu host 
  -machine type=q35 
  -m 2048 
  -smp sockets=1,cores=4 
  -drive file=./ system_img,if=none,id=hd0,format=raw 
  -device virtio-scsi-pci 
  -device scsi-hd,drive=hd0 
  -boot order=d 
  -netdev bridge,id=net0,br=br0 
  -device virtio-net-pci,netdev=net0

9. запуск образа и использовать проброс портов:

qemu-system-x86_64 
  -enable-kvm -cpu host 
  -machine type=q35 
  -m 2048 
  -smp sockets=1,cores=4 
  -drive file=./napios-qemux86-64-dev-0.2.0.1.rootfs.system_img,if=none,id=hd0,format=raw 
  -device virtio-scsi-pci 
  -device scsi-hd,drive=hd0 
  -boot order=d 
  -netdev user,id=net0,hostfwd=tcp::2222-:22,hostfwd=tcp::8080-:80,hostfwd=tcp::8443-:443 
  -device virtio-net-pci,netdev=net0


После используем:
curl https://localhost:8443/
ssh root@localhost:2222
Рубрики
KVM

KVM virtiofs / shared folder host + guest / общая папка / проброс папки в гостя

Ссылки:

https://github.com/virtio-win/kvm-guest-drivers-windows/wiki/Virtiofs:-Shared-file-system
https://github.com/winfsp/winfsp/releases/download/v2.0/winfsp-2.0.23075.msi
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
https://github.com/winfsp/winfsp/releases
https://github.com/virtio-win/virtio-win-pkg-scripts/blob/master/README.md
https://libvirt.org/kbase/virtiofs.html
https://virtio-fs.gitlab.io/

guest linux

0. Добавляем на гостя железку

  ...
  
    
    
  
  ...
  
    ...
    
      
      
      
    
    ...
  



1. В госте монтируем каталог
mount -t virtiofs mount_tag /mnt/mount/path

guest windows

0. Устанавливаем драйверы, агента, службу WinFsp
https://github.com/winfsp/winfsp/releases/download/v2.0/winfsp-2.0.23075.msi
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso
1. Если "общая папка" сама не появилась то можно выполнить вручную 
cmd
cd "C:Program Files (x86)WinFspbin"
launchctl-x64.exe" start virtiofs viofsY mount_tag0 Y
где:
mount_tag0 - ваш так который вы указали в настройках гостя
Y - желаемая буква (тоже надо viofsY)

Рубрики
KVM

osv + kvm (еще один способ подать vlan)

Пример настроенного сетевого интерфейса VM

!!! настраиваем путем редактирования VM
!!! Обращаем внимание на следующие:
!!! ovsbr0 - настроенный bridge с помощью openvswitch
!!! vlan-4082 - имя нужного нужного vlan
!!! log-ens3 - желаемое имя сетевого адаптера на гипервизоре


  
  
  
    
  
  
  
  
  

Настройка OVS

!!! После включения ВМ у нас появится интерфейс с именем "log-ens3" на гипервизоре
ovs-vsctl set port log-ens3 tag=1234 - добавим vlan с тегом 1234 для интерфейса log-ens3
Рубрики
KVM ovs / openvswitch / dpdk

KVM OVS / установка KVM / настройка сети openvswitch / debian

Установка 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 - добавляем в автозагрузку

Установка OVS и настройка OVS

apt install openvswitch-switch - устанавливаем ovs

ovs-vsctl show - смотрим что у нас с сетью
ovs-vsctl add-br ovsbr0 - создаем свитч с именем ovsbr0
ovs-vsctl add-port ovsbr0 eno1 - добавляем в свитч с именем ovsbr0 интерфейс eno0
ovs-vsctl show - проверяем настройки


Настройка интерфейса хоста static:

nano /etc/network/interfaces
----------------------------------------
auto lo
iface lo inet loopback

auto eno1
iface eno1 inet manual
dns-nameservers 192.168.15.1
dns-nameservers 8.8.8.8

auto ovsbr0
iface br0 inet static
address 192.168.15.253/24
gateway 192.168.15.1

-------------------------------------

Настройка сети dhcp:

nano /etc/network/interfaces
----------------------------------------
auto lo
iface lo inet loopback

auto eno1
iface eno1 inet manual
dns-nameservers 192.168.15.1
dns-nameservers 8.8.8.8

auto ovsbr0
iface ovsbr0 inet dhcp
-------------------------------------

Применить настройки сети без перезагрузки:

/etc/init.d/networking restart - перезагрузка сети (пере читается конфигурация сети) 
systemctl stop NetworkManager.service - остановить сеть
systemctl start NetworkManager.service - запустить (пере читается конфигурация сети) 
systemctl restart networking - перезагрузка сети (пере читается конфигурация сети) 

Настройка сети KVM и OVS

!!! можно просто отредактировать сеть по умолчанию default
!!! virsh net-edit default

0. Выполняем выгрузку сети по умолчанию
virsh net-list --all - показать все сети 
virsh net-dumpxml default > /root/1.xml - этой командой мы можем сохранить настройки сети default

1. Редактируем файл 1.xml  
1.1 пример простой сети (ovs) для добавления в KVM 
-------------

  ovsbr0
  
  
  

-------------
 
1.2 пример сложной сети с vlan (ovs) для добавления в KVM 
-------------------

  ovs-network
  
  
  
  
    
      
    
  
  
    
      
    
  
  
    
      
    
  
  
    
      
    
  
  
    
      
      
    
  

-------------------
 
 
2. Добавляем сеть ovsbr0 из файла 1.xml
virsh net-define --file /root/1.xml - этой командой мы можем создать сеть из файла (/root/1.xml)
virsh net-start --network ovsbr0 - запуск сети 
virsh net-autostart --network ovsbr0 - включение автозапуска для сети 

Пример настройки интерфейса ВМ

0. virsh list --all - показать доступные ВМ
1. virsh edit VM_name - редактируем файл настроек VM_name
----------------
  
      
      
      
      
----------------

Редактирование сети default на живую:

Добавление нового vlan:

virsh net-update default add portgroup "
     
         
     
" --live --config


irsh net-update default add portgroup "
     
         
         
     
" --live --config


Изменение существующего vlan:

virsh net-update default modify portgroup  "
    
      
    
  " --live --config


Рубрики
KVM

Как отключить AppArmor \ How to disable and remove AppArmor \ Ubuntu \ Debian

Ошибка при выполнении миграции debian10:

Команда миграции:
virsh migrate --live --copy-storage-all --persistent --abort-on-error --verbose linux6 qemu+ssh://hsrv1/system

Ошибка:
Live Migration Failure With Error "Unable to find security driver for model apparmor"


Должно было помочь:
Вариант 1:
sudo aa-status - смотрим состояние AppArmor
sudo aa-teardown - вырубаем AppArmor 

Вариант 2:
sudo apt install apparmor-utils
sudo aa-complain /etc/apparmor.d/usr.sbin.libvirtd
sudo aa-enforce /etc/apparmor.d/usr.lib.libvirt.virt-aa-helper
service libvirtd restart

Удалить AppArmor

sudo systemctl stop apparmor
sudo systemctl disable apparmor
sudo apt remove --assume-yes --purge apparmor
Рубрики
KVM

kvm migrate / clone / миграция / клонирование

Подготовка:

0. Проверяем доступность между серверами kvm (iptables -L -n -v, ipset list kvm)

1. Проверяем соответствие конфигурации live и config по части сети и дисков
virsh dumpxml VM_NAME
cat /etc/libvirt/qemu/VM_NAME.xml
virsh net-dumpxml default

2. Проверяем конфиг VM_NAME
virsh dumpxml --inactive --security-info VM_NAME > /tmp/VM_NAME.xml
vim /tmp/VM_NAME.xml
В случае различия в процессорах можно их выровнять по младшему процессору, отключив некоторые фичи (потребуется перезагрузка):
  
    
    
    
  

3. 
Проверяем лимит скорости при миграции
virsh migrate-getspeed VM_NAME
 
Ограничиваем скорость, если требуется
virsh migrate-setspeed  VM_NAME Speed-in-B
virsh migrate-setspeed  VM_NAME 20000000

Увеличиваем простой ВМ после миграции (фриз на время копирования памяти, дефолт: 500)
virsh migrate-setmaxdowntime  VM_NAME milliseconds

​Миграция без удаления (виртуальная машина не удаляется после перемещения):

 
!!! Рекомендуется к применению
virsh migrate --live --copy-storage-all --persistent --abort-on-error --verbose VM_NAME qemu+ssh://TO_KVM_SERVER/system
 
 дополнительно можно указать --xml filename.xml для таргета
  дополнительно можно указать --compressed для уменьшения передаваемых при миграции данных
  
  ** Не забываем, что после миграции создаётся файл текущей конфигурации, а не указанной в --xml, поэтому надо применять конфиг отдельно.

Миграция с удалением и созданием в новом KVM:

!!! Внимание лучше использовать вариант без удаления
!!! мигрировать надо с двумя важными опциями 
!!! --undefinesource - удалить ВМ из того гипервизора откуда мигрируем(логично, да?)
!!! --persistent - добавить ВМ в список ВМ на новом месте

Миграция:
virsh migrate VM_NAME qemu_ssh://KVM_NAME/system --undefinesource --persistent

Проверка:
virsh dominfo VM_NAME | grep persistent

Пример переноса ВМ:

На хосте с которого копируем ВМ:
0) Копируем диск на новый хост (файл myserver.qcow2)
1) Выгружаем настройки ВМ
virsh dumpxml myserver > /mnt/data-1/myserver.xml - сохранить настройки ВМ

На хосте на котором разворачиваем бэкап:
0) Восстанавливаем ВМ
virsh define /home/user/myserver.xml
1) При необходимости правим (указываем месторасположение образа жесткого диска):
virsh edit myserver

virt-clone:

!!! Перед клонирование ВМ необходимо выключить или поставить на паузу.
!!! virsh shutdown
!!! vursh suspend

Первый вариант:
virt-clone --original {Domain-Vm-Name-Here} --auto-clone

Второй вариант:
virt-clone --original {Domain-Vm-Name-Here} --name {New-Domain-Vm-Name-Here} --auto-clone

Третий вариант:
virt-clone --original {Domain-Vm-Name-Here} --name {New-Domain-Vm-Name-Here} --file {/var/lib/libvirt/images/File.Name.here}


Пример:
virsh suspend Name_VM_1
virt-clone --original Name_VM_1 --name Name_VM_2 --file /var/lib/libvirt/images/Name_VM_2.qcow2
virsh resume Name_VM_1
virt-sysprep -d Name_VM_2 --hostname Name_VM_2 --enable user-account,ssh-hostkeys,net-hostname,net-hwaddr,machine-id --keep-user-accounts vivek --keep-user-accounts root --run 'sed -i "s/192.168.122.16/192.168.122.25/" /etc/network/interfaces'

ссылки:


Рубрики
KVM ovs / openvswitch / dpdk

ovs \ libvirt \ virsh \ lxc \ openvswitch \ openflow \ контейнеры

ссылки:

http://www.openvswitch.org/
https://docs.openvswitch.org/en/latest/howto/libvirt/
https://libvirt.org/drvlxc.html
https://libvirt.org/drvqemu.html
https://www.linux-kvm.org/page/Main_Page
https://xakep.ru/2017/09/04/open-vswitch/
https://habr.com/ru/post/242741/
https://xakep.ru/2012/11/19/59656/
https://docs.openvswitch.org/en/latest/howto/libvirt/
https://russianblogs.com/article/5481757540/

Установка необходимых пакетов:

# ставим на Debian 10

apt install openvswitch-switch - ставим openvswitch (ovs)
apt install qemu-kvm libvirt-clients libvirt-daemon-system - устанавливаем libvirt

openvswitch:

обычное использование без vlan:
ovs-vsctl show - показывает информацию по свитчу, проверяем работу и заодно узнаем какая у нас версия ovs
ovs-vsctl add-br br0 - добавляем свитч с именем br0
ovs-vsctl add-port br0 eth0 - добавляем интерфейс eth0 в свитч br0 

пример с vlan:
ovs-vsctl add-br ovs0 - добавляем свитч openvswitch с именем br0
ovs-vsctl add-port ovs0 eth0 - добавляем интерфейс eth0 в свитч ovs0 
ovs-vsctl set port eth0 vlan_mode=native-untagged tag=2 trunks=2,3,4 - вешаем trunk на интерфейс eth0 
ovs-vsctl add-port ovs0 ovs0-vlan2 tag=2 -- set Interface ovs0-vlan2 type=internal - добавляем порт и вешаем access (tag=2) на интерфейс ovs0-vlan2
ovs-vsctl add-port ovs0 ovs0-vlan4 tag=4 -- set Interface ovs0-vlan4 type=internal - добавляем порт и вешаем access (tag=4) на интерфейс ovs0-vlan2
ovs-vsctl add-port ovs0 ovs0-vlan3 tag=3 -- set Interface ovs0-vlan3 type=internal - добавляем порт и вешаем access (tag=3) на интерфейс ovs0-vlan2

ovs-vsctl set port ovsbr0 tag=29

удаление портов и коммутатора:
ovs-vsctl del-port ovs0-vlan2 - удалить порт (ovs0-vlan2) из коммутатора
ovs-vsctl del-br ovs0 - удалить коммутатор ovs0

Примеры настройки сети:

dhcp client:
dhclient ovs0-vlan3 - получить настройки по dhcp для интерфейса ovs0-vlan3

static ifconfig:
ifconfig ovs0-vlan2 inet 10.254.254.1/24 up - настраиваем ip 10.254.254.1/24 и запускаем интерфейс
ifconfig ovs0-vlan4 up - просто запускаем интерфейс без настройки ip


static ip:
ip a - показать доступные устройства
ip address add  192.168.66.10/24 dev eth0 - задаем адрес ipv4
ip link set up eth0 - запускаем интерфейс

Собственно пытаемся работать:

virsh --c lxc:// - подключаемся к консоли управления lxc контейнерами
create /root/lxc0.xml - создаем контейнер из шаблона lxc0.xml
create /root/lxc1.xml - создаем контейнер из шаблона lxc1.xml
list - показать доступные контейнеры
console lxc0 - подключаемся к контейнеру lxc0 (CTRL+] - отключится контейнера)

ip a - показать доступные устройства
ip address add  192.168.66.10/24 dev eth0 - задаем адрес ipv4
ip link set up eth0 - запускаем интерфейс


ip a - показать доступные устройства
ip address add  192.168.66.11/24 dev eth0 - задаем адрес ipv4
ip link set up eth0 - запускаем интерфейс




Шаблон для контейнера(lxc0.xml)


    lxc0
    131072
    
        exe
        /sbin/init
    
    1
    
    
        
            
            
            
        
        
    

Шаблон для контейнера(lxc1.xml)


    lxc1
    131072
    
        exe
        /sbin/init
    
    1
    
    
        
            
            
            
        
        
    



OpenFlow


По умолчанию openvswitch работает как обычный свитч (нету vlan)
ovs-vsctl set-fail-mode br0 secure - включаем режим работы умного свитча (Задействуем протокол OpenFlow)

Гоняем трафик между двумя портами
ovs-ofctl add-flow br0 in_port=1,action=output=2
ovs-ofctl add-flow br0 in_port=2,action=output=1
ovs-ofctl dump-flows br0 - проверяем что мы там настроили 

ovs-vsctl set-fail-mode br0 standalone - вернуть настройки в обычный режим (br0 снова будет как обычный свитч)



# еще 
ovs-ofctl -O OpenFlow13 dump-flows ovsbr0
ovs-ofctl -O OpenFlow13 dump-ports ovsbr0

Рубрики
KVM

Как добавить virsh console / How To Enable Virsh Console Access For KVM Guests / rs232 / com port

ссылки

https://ostechnix.com/how-to-enable-virsh-console-access-for-kvm-guests/
https://www.cyberciti.biz/faq/howto-exit-virsh-console-connection-on-centos-ubuntu-debian-linux/
https://gist.github.com/lukasnellen/fe9b61cb9add581ef0215bd40c09c7c2
https://ravada.readthedocs.io/en/latest/docs/config_console.html
https://unix.stackexchange.com/questions/288344/accessing-console-of-ubuntu-16-04-kvm-guest


Зачем нужен visrsh console?
Что бы с гипервизора подключатся на гостевые хосты.

общая настройка гостей

!!! по умолчанию оно обычно добавлено но на госте не запущен tty
!!! нас интересует последовательное подключение
!!! устройство pty
!!! /dev/pts/0

Должно быть добавлено оборудование:
    
      
    

для CentOS

!!! Подключаемся по ssh и выполняем от root
systemctl enable serial-getty@ttyS0.service
systemctl start serial-getty@ttyS0.service

для Debian / Ubuntu

!!! Подключаемся по ssh и выполняем от root
sudo systemctl enable serial-getty@ttyS0.service
sudo systemctl start serial-getty@ttyS0.service


!!! вроде больше не актуально (На debian 10 и ubuntu 20 работает после запуска serial-getty@ttyS0.service)
# В ubuntu ~14 был баг не консоль после активации не работала 
# Была ошибка при подключении
0. Редактируем /etc/default/grub:
---------------------------------
...
###GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0,115200n8 console=tty1"
GRUB_CMDLINE_LINUX=""
...
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
----------------------------------

1. Применяем изменения
update-grub2

Для выхода из консоли (virsh console vm)

CTRL+Shift+5
CTRL+Shift+]

Помощь по команде (virsh console)

virsh help console

iei puzzle in003b / console

0. Редактируем /etc/default/grub:
---------------------------------
...
###GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0,115200n8 console=tty1"
GRUB_CMDLINE_LINUX=""
...
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial --speed=115200 --unit=0 --word=8 --parity=no --stop=1"
----------------------------------

1. Применяем изменения
update-grub2

2. Создаем демон консоли:
cat > /etc/systemd/system/ttyS0.service << "EOF"
[Unit]
Description=Serial Console Service
[Service]
ExecStart=/sbin/getty -L 115200 ttyS0 vt102
Restart=always
[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable ttyS0
systemctl start ttyS0

3. Reboot
reboot
Рубрики
KVM Виртуализация \ контейнеры \ облака

KVM изменить размер диска / blockresize / domblklist / guests linux / mbr /gpt

Внимание !!!

Всегда делаем backup!!!

Изменение диска offline / qemu-img

!!! не забываем делать backup

qemu-img resize vmdisk.qcow2 +10G - добавим 10Гб диску vmdisk.img

Изменение диска online / blockresize

virsh blockresize   
   [--domain] <строка>  имя домена, ID или UUID
   [--path] <строка>  Полный путь к блочному устройству
   [--size] <число>  Новый размер блочного устройства, кратный целому числу (по умолчанию в КиБ)

virsh domblklist name_VM - узнаем какие диски есть у ВМ
virsh blockresize name_VM /kvm/name_VM_disk.qcow2 100G - для ВМ (name_VM), изменим размер диска равный 100Гб

Необходимые действия для гостя, при изменении диска, MBR диск / один раздел / fdisk:

!!! Не забываем делать backup 
!!! Внимание пример для одного диска с одним разделом
!!! fdisk -l - посмотреть доступные

 fdsik /dev/sda - редактируем таблицу разделов
   : p - показываем таблицу разделов
   Устр-во    Загрузочный Start Конец Секторы Size Id Тип
   /dev/sda1  *            2048 14678015 14675968   7G 83 Linux
   : d - удаляем таблицу разделов
   : n - создаем таблицу разделов
   Do you want to remove the signature? [Y]es/[N]o: N - не удаляем сигнатуры
   : a - ставим ставим загрузочный бит
   : w - применяем изменения
!!! после выхода из (fdisk) будет сказано что изменена таблица разделов и необходимо выполнить partprobe
(name_VM)# partprobe - выполняем просим систему перечитать таблицу разделов
(name_VM)# resize2fs /dev/sda1 - выполняем изменения FS

Необходимые действия для гостя, при изменении диска, MBR диск / несколько разделов / parted:

!!! Не забываем делать backup 
!!! Внимание пример для одного диска и нескольких разделов
!!! fdisk -l - посмотреть доступные

Пример (parted)
(name_VM)# parted /dev/vda - открываем нужный диск
           (parted) print free - покажем доступные  разделы (диск /dev/vda)
               Number Start End Size Type File system Flags
               1 32.3kB 4295MB 4295MB primary ext4 boot
               2 4295MB 8590MB 4295MB primary linux-swap(v1)
               3 8590MB 107GB 98GB primary ext4
                 107GB 215GB 107GB Free Space
           (parted) resizepart 3 - изменяем размер третьего раздела
               End [107GB]? 215GB
           (parted) quit - выходим из parted
(name_VM)#partprobe - выполняем просим систему перечитать таблицу разделов
(name_VM)#resize2fs /dev/vda3 -  выполняем изменения FS

Необходимые действия для гостя, при изменении диска, GBT диск / несколько разделов / parted:

!!! GPT Рассматривается схема с одним разделом (/dev/vdb1) на весь диск
(name_VM)#partprobe
(name_VM)#gdisk /dev/vdb
  переходим в расширенный режим x
  смещаем запись в конец диска e
  выходим из расширенного режима m
  Command (? for help): d
  Using 1
  Command (? for help): n
  Partition number (1-128, default 1): [Enter]
  First sector (34-2147483614, default = 2048) or {+-}size{KMGTP}: [Enter]
  Last sector (2048-2147483614, default = 2147483614) or {+-}size{KMGTP}: [Enter]
  Current type is 'Linux filesystem'
  Hex code or GUID (L to show codes, Enter = 8300): [Enter]
  Changed type of partition to 'Linux filesystem'
  выходим с сохранением w
(name_VM)#partprobe
(name_VM)#resize2fs /dev/vdb1
или
btrfs filesystem resize max /

Смонтировать образ диска qcow2 в гипервизоре:

modprobe nbd max_part=8
qemu-nbd --connect=/dev/nbd0 .qcow2
fdisk /dev/nbd0 -l
mount -o ro /dev/nbd0p1 /mnt/ext0
umount /mnt/ext0
qemu-nbd --disconnect /dev/nbd0
rmmod nbd
Рубрики
KVM Виртуализация \ контейнеры \ облака Конспект

Конспект: KVM / libvirt / apt / yum / systemctl / ip / virt / libvirt / virsh / lvm

ссылки

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

KVM swap in file / Файл подкачки

fallocate -l 1G /.swap
chmod 600 /.swap
mkswap /.swap
echo '/.swap none swap defaults 0 0' >> /etc/fstab
swapon /.swap


Команда «virsh list не показывает ВМ»

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"

Рубрики
KVM

KVM auto install / virt-install / debian / pressed.cfg

Ссылки:

Автоустановка debian-виртуалок в KVM — один из способов.
https://www.debian.org/releases/stretch/mips/apbs03.html.ru https://help.ubuntu.com/lts/installation-guide/s390x/apb.html https://www.debian.org/releases/stable/amd64/apbs04.ru.html https://www.debian.org/releases/buster/example-preseed.txt

preseed.cfg — файл настроек инсталляции

# настройки языка и локали в устанавливаемой системе. Используем американскую локаль, но указываем, что наш сервер находится в России.
d-i debian-installer/language string en
d-i debian-installer/country string RU
d-i debian-installer/locale string en_US.UTF-8
d-i localechooser/supported-locales multiselect en_US.UTF8, ru_RU.UTF8

# Настройки клавиатуры. Опять же - американская раскладка.
d-i console-keymaps-at/keymap select us
d-i keyboard-configuration/variant select American English

# Выбираем интерфейс сети, через который будет происходить установка. Для KVM-виртуалок в 99% случаев (если сами не ломали) это eth0. Если сомневаемся - ставим auto.
d-i netcfg/choose_interface select auto

# Настройки сети. Я привожу пример для ipv6, для v4 вам просто нужно будет поменять адреса.
# важный момент - если настраиваете здесь ipv6 сеть, то обязательно используйте ipv6 nameservers.
# Иначе netmask ffff:ffff:ffff:ffff:: внутри debian-installer'a превратится в 255.255.255.0 (или что-то такое) и вам придется лезть в консоль, чтобы перевбивать настройки лапками.
# если вам нужен ipv4 - то просто замените ipaddress, netmask, gateway, nameservers на корректные v4-адреса. Ничего дополнительно указывать не нужно.
# использую dhcp
d-i netcfg/dhcp_timeout string 2
d-i netcfg/disable_dhcp boolean false
#d-i netcfg/get_ipaddress string 10.0.0.1
#d-i netcfg/get_netmask string 10.0.0.255
#d-i netcfg/get_gateway string 10.0.0.1
#d-i netcfg/get_nameservers string 10.0.0.1
#d-i netcfg/confirm_static boolean true

# hostname и domain для наливаемой машинки.
# fqdn машины в данном случае будет temporary.debian.pro - если хотите, чтобы на сервере нормально работала отправка почты, то такой же fqdn должен быть прописан в PTR записи "основного" адреса машинки.
d-i netcfg/get_hostname string linux13
d-i netcfg/get_domain string b14esh.com

# Если вы выберете ftp, то mirror/country string устанавливать не нужно.
#d-i mirror/protocol string ftp
d-i mirror/country string manual
d-i mirror/http/hostname string http.us.debian.org
d-i mirror/http/directory string /debian
d-i mirror/http/proxy string

# прокси внутри инсталлера нам не нужен.
d-i mirror/http/proxy string

# Настройки часового пояса - наш сервер будет жить по часикам в Москве.
# дополнительно, при установке синхронизируем время с ntp.ubuntu.com
d-i clock-setup/utc boolean true
d-i time/zone string Europe/Moscow
d-i clock-setup/ntp boolean true
d-i clock-setup/ntp-server string ntp.ubuntu.com

# Настройка HDD. Внутри виртуалок нам подойдет разметка auto regular atomic (последний раздел - swap = 2xRAM, первый раздел - /, занимающий всё, что осталось после swap'a).
# Саму систему ставим на /dev/vda.
d-i partman-auto/disk string /dev/vda
d-i partman-auto/method string regular
d-i partman-auto/choose_recipe select atomic
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true

# устанавливаем рутовый пароль.
# после установки его, само собой, лучше менять (preseed могут спереть).
d-i passwd/root-password password ПАРОЛЬ_ДЛЯ_РУТА
d-i passwd/root-password-again password ПАРОЛЬ_ДЛЯ_РУТА

# не создаём дополнительных пользователей, кроме рута.
#d-i passwd/make-user boolean false

# создаем пользователя
# To create a normal user account.
d-i passwd/user-fullname string ИМЯ_ПОЛЬЗОВАТЕЛЯ
d-i passwd/username string ИМЯ_ПОЛЬЗОВАТЕЛЯ
# Normal user's password, either in clear text
d-i passwd/user-password password ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ
d-i passwd/user-password-again password ПАРОЛЬ_ПОЛЬЗОВАТЕЛЯ


# остальные настройки apt'a - включаем contrib и non-free репозитории.
d-i apt-setup/non-free boolean true
d-i apt-setup/contrib boolean true

# не отправляем данные об установленных пакетах.
popularity-contest popularity-contest/participate boolean false

# ставим только ssh-сервер - никаких гномов/web-серверов и так далее.
tasksel tasksel/first multiselect ssh-server
# указываем, что нам нужны дополнительные пакеты - openssh-server (дада, я видел его строчкой выше, но хочу быть уверенным), htop и dstat.
d-i pkgsel/include string openssh-server htop dstat sudo


# ставим загрузчик
d-i grub-installer/only_debian boolean true

#пофиг ставим загрузчик 
d-i grub-installer/with_other_os boolean true

# Из-за возможного наличия подключённых карт памяти USB, расположение MBR
# нельзя определить безопасно, поэтому нужно указать:
d-i grub-installer/bootdev  string /dev/vda
# Для установки на первое устройство (считая, что это не карта памяти USB):
d-i grub-installer/bootdev  string default



# вырубаем виртуалку.
d-i finish-install/reboot_in_progress note
d-i debian-installer/exit/poweroff boolean true




Главный вопрос… а не льзя ли получить файл pressed.cfg, да попроще….

Ответ можно. И очень просто :)
Продолжение следует...
0. Ставим debian и настраиваем его как нам нужно. 

1. Немного о файлах 
/var/log/installer/cdebconf - в этом каталоге в  конце установки создаются , база данных программы установки debconf, по умолчанию файл разрешено читать только суперпользователю.
templates.dat - хранятся необработанные шаблоны
questions.dat — текущие значения и значения, назначенные переменным

/var/lib/cdebconf - для выяснения возможных ответов на вопросы можно использовать редактор nano для просмотра файла прямо во время процесса установки
/var/log/installer - каталог и все файлы в нём будут удалены из системы при вычистке пакета installation-report

2. Альтернативный метод — выполнить установку вручную и затем, после перезагрузки, 
использовать команду debconf-get-selections из пакета debconf-utils, 
чтобы сохранить базу данных debconf и базу данных программы установки cdebconf в один файл preseed.cfg

apt install debconf-utils - ставим необходимое debconf-utils 
echo "#_preseed_V1" > preseed.cfg
debconf-get-selections --installer >> preseed.cfg
debconf-get-selections >> preseed.cfg

3. Файл preseed.cfg то получили теперь его надо бы отредактировать......

4. Проверяем файл preseed.cfg на валидность....
debconf-set-selections -c preseed.cfg - для проверки правильности формата файла ответов до установки


пример install_debian.sh

#!/bin/bash
virt-install  \
--name linux2 \  - исправь
-r 1024  \
--disk path=/PVE/linux2.qcow2,size=8  \   - исправь
--vcpus 1  \ 
--location=http://ftp.ru.debian.org/debian/dists/stable/main/installer-amd64/  \  - исправь
--initrd-inject=/home/b14esh/ansible/roles/debian_install/preseed.cfg  \  - исправь
--extra-args="auto keyboard-configuration/xkb-keymap=en"  \
--vnc \
--noautoconsole  \
--os-type Debian10  \
--accelerate  \
--network bridge=br0,model=virtio  \  - исправь
--hvm

А должно быть так install_debian.sh

#!/bin/bash
virt-install  --name ИМЯ_ХОСТА -r 1024  --disk path=/PVE/ИМЯ_ЖЕСТКОГО_ДИСКА.qcow2,size=8  --vcpus 2  --location=http://ftp.ru.debian.org/debian/dists/stable/main/installer-amd64/  --initrd-inject=/home/b14esh/ansible/roles/debian_install/preseed.cfg  --extra-args="auto keyboard-configuration/xkb-keymap=en"  --vnc   --noautoconsole   --os-type Debian10  --accelerate  --network bridge=br0,model=virtio  --hvm


Рубрики
KVM

fog \ tftp \ wds

ссылки

https://habr.com/ru/post/448476/
https://fogproject.org/download
https://wiki.fogproject.org/wiki/index.php?title=CentOS_7
https://habr.com/ru/post/130987/
https://wiki.fogproject.org/wiki/index.php/Windows_DHCP_Server
https://wiki.fogproject.org/wiki/index.php/DCHP_Settings
https://softboard.ru/topic/73318-fog-project-%D0%BC%D0%B0%D1%81%D1%81%D0%BE%D0%B2%D0%BE%D0%B5-%D0%BA%D0%BB%D0%BE%D0%BD%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BE%D1%81-%D0%BF%D0%BE-%D1%81%D0%B5%D1%82%D0%B8/
https://forums.fogproject.org/topic/12908/ipxe-could-not-boot-no-such-file-or-directory/5
https://fogproject.org/download

установка на CentOS 7

yum install git -y
cd ~
mkdir git
cd git
git clone https://github.com/FOGProject/fogproject.git
cd fogproject/bin
./installfog.sh

установка на любой linux

# из офф док
# https://fogproject.org/download - актуальные ссылки
# В настоящее время установка сервера FOG поддерживается только на компьютере под управлением Linux.
# Мы рекомендуем использовать дистрибутив с долгосрочной поддержкой, предназначенный для серверов, таких как CentOS или Debian , хотя вы можете использовать множество # других дистрибутивов. 
# Мы также рекомендуем установить FOG Project внутри виртуальной машины, чтобы упростить резервное копирование и обновление.


su -
cd /opt 
wget https://github.com/FOGProject/fogproject/archive/1.5.9.tar.gz
tar -xzvf 1.5.9.tar.gz
cd fogproject-1.5.9/bin
./installfog.sh

ответы на installfog.sh (у нас уже есть DHCP и DNS серверы)

 What version of Linux would you like to run the installation for?
          1) Redhat Based Linux (Redhat, CentOS, Mageia)
          2) Debian Based Linux (Debian, Ubuntu, Kubuntu, Edubuntu)
          3) Arch Linux
  Choice: [2] 2  ### - Нужно выбрать дистрибутив

  Starting Debian based Installation

  FOG Server installation modes:
      * Normal Server: (Choice N)
          This is the typical installation type and
          will install all FOG components for you on this
          machine.  Pick this option if you are unsure what to pick.

      * Storage Node: (Choice S)
          This install mode will only install the software required
          to make this server act as a node in a storage group

  More information:
     http://www.fogproject.org/wiki/index.php?title=InstallationModes

  What type of installation would you like to do? [N/s (Normal/Storage)] N  ### - выбрали нормальный режим

  We found the following interfaces on your system:
      * enp1s0 - 10.0.0.28/24

  Would you like to change the default network interface from enp1s0?
  If you are not sure, select No. [y/N] N  ### - сетевую карту оставили без изменений

  Would you like to setup a router address for the DHCP server? [Y/n] Y ### - роутер определился правильно

  Would you like DHCP to handle DNS? [Y/n] N - DNS не трогали

  Would you like to use the FOG server for DHCP service? [y/N] N ### - сервер DHCP не подымаем

  This version of FOG has internationalization support, would
  you like to install the additional language packs? [y/N] N ### -  Языков дополнительно не устанавливаем

  Using encrypted connections is state of the art on the web and we
  encourage you to enable this for your FOG server. But using HTTPS
  has some implications within FOG, PXE and fog-client and you want
  to read https://wiki.fogproject.org/HTTPS before you decide!
  Would you like to enable secure HTTPS on your FOG server? [y/N] N ### - от https отказались 

  Which hostname would you like to use? Currently is: fog
  Note: This hostname will be in the certificate we generate for your
  FOG webserver. The hostname will only be used for this but won't be
  set as a local hostname on your server!
  Would you like to change it? If you are not sure, select No. [y/N] N ### - имя хоста не меняем 

   ######################################################################
   #     FOG now has everything it needs for this setup, but please     #
   #   understand that this script will overwrite any setting you may   #
   #   have setup for services like DHCP, apache, pxe, tftp, and NFS.   #
   ######################################################################
   # It is not recommended that you install this on a production system #
   #        as this script modifies many of your system settings.       #
   ######################################################################
   #             This script should be run by the root user.            #
   #      It will prepend the running with sudo if root is not set      #
   ######################################################################
   #            Please see our wiki for more information at:            #
   ######################################################################
   #             https://wiki.fogproject.org/wiki/index.php             #
   ######################################################################

 * Here are the settings FOG will use:
 * Base Linux: Debian
 * Detected Linux Distribution: Debian GNU/Linux
 * Interface: enp1s0
 * Server IP Address: 10.0.0.28
 * Server Subnet Mask: 255.255.255.0
 * Server Hostname: fog
 * Installation Type: Normal Server
 * Internationalization: 0
 * Image Storage Location: /images
 * Using FOG DHCP: No
 * DHCP will NOT be setup but you must setup your
 | current DHCP server to use FOG for PXE services.

 * On a Linux DHCP server you must set: next-server and filename

 * On a Windows DHCP server you must set options 066 and 067

 * Option 066/next-server is the IP of the FOG Server: (e.g. 10.0.0.28)
 * Option 067/filename is the bootfile: (e.g. undionly.kpxe)


 * Are you sure you wish to continue (Y/N) Y ### - Со всем согласились и продолжели установку

!!!! ВНИМАНИЕ во время установки нас попросят открыть страницу managament
!!!! Если нажмете ENTER то установка вылетит с ошибкой

* You still need to install/update your database schema.
* This can be done by opening a web browser and going to:

   http://10.0.0.28/fog/management


Когда FOG установится вы увидите:

 * Setup complete

   You can now login to the FOG Management Portal using
   the information listed below.  The login information
   is only if this is the first install.

   This can be done by opening a web browser and going to:

   http://10.0.0.28/fog/management

   Default User Information
   Username: fog
   Password: password

default login and password

http://192.168.15.135/fog/

fog
password

Для работы TFTP нужно собрать загрузочный файл

cd /opt/fogproject/utils/FOGiPXE/
./buildipxe.sh

Опции DHCP для TFTP

- option 66 – указать IP-адрес вашего сервера FOG
- option 67 – указать undionly.kpxe


Рубрики
KVM

KVM kimchi ставил на debian 10 / не работает

Информация:

https://github.com/kimchi-project/kimchi
https://github.com/kimchi-project/kimchi/releases/tag/2.5.0
https://m4ldonado.io/index.php/2018/02/25/how-to-install-kimchi-wok-on-debian-9-stretch/
https://www.linux-kvm.org/page/Management_Tools

Установка необходимых пакетов:

sudo apt install python-cherrypy3 python-cheetah python-pam python-m2crypto python-jsonschema python-psutil python-ldap python-lxml apache2 openssl websockify libvirt-daemon-system sudo dnsmasq ebtables gcc make autoconf automake gettext git pkgconf xsltproc logrotate novnc python-libvirt libvirt-daemon nfs-common qemu-kvm python-ethtool sosreport python-ipaddr open-iscsi python-guestfs libguestfs-tools spice-html5 python-pil python-paramiko  fonts-font-awesome hddtemp libuser1 python-augeas python-libuser python-configobj python-parted unzip

Включение модулей Apache:

sudo a2enmod proxy
sudo a2enmod proxy_wstunnel
sudo a2enmod proxy_http
sudo a2enmod ssl
sudo a2enmod rewrite
systemctl restart apache2

Установка wok \ kamachi из пакетов:

sudo apt install nginx
cd /opt
sudo wget https://github.com/kimchi-project/kimchi/releases/download/2.5.0/wok-2.5.0-0.noarch.deb
sudo wget https://github.com/kimchi-project/kimchi/releases/download/2.5.0/kimchi-2.5.0-0.noarch.deb
sudo dpkg -i wok-2.5.0-0.noarch.deb
sudo dpkg -i kimchi-2.5.0-0.noarch.deb

Установка wok-kamchi из src:

cd /opt
sudo wget https://github.com/kimchi-project/wok/archive/master.zip
sudo unzip master.zip
cd wok-master
sudo ./autogen.sh --system
sudo make
sudo make install

cp contrib/wok.conf.apache /etc/apache2/sites-available/wok.conf
ln -s /etc/apache2/sites-available/wok.conf /etc/apache2/sites-enabled/wok.conf

Установка kamchi из src:

cd /opt
sudo rm master.zip
sudo wget https://github.com/kimchi-project/kimchi/archive/master.zip
sudo unzip master.zip
cd kimchi-master
sudo ./autogen.sh --system
sudo make
sudo make install


Рубрики
KVM

KVM opennebula debian 10 / нафиг

Ссылки:

https://forum.opennebula.org/t/debian-10-buster/7435 - мягко намекнули -)
https://github.com/OpenNebula/packages - инструкция собери пакет сам

Установка необходимых пакетов для сборки из src:

apt-get install -y pbuilder debhelper ubuntu-dev-tools bash-completion bison default-jdk flex javahelper libxmlrpc3-client-java libxmlrpc3-common-java libxml2-dev ruby scons dh-systemd
cd /opt
wget https://downloads.opennebula.org/packages/opennebula-5.4.0/opennebula-5.4.0.tar.gz

Рубрики
KVM

KVM антидетект ВМ \ video

Ссылки:

https://forum.level1techs.com/t/play-games-in-windows-on-linux-pci-passthrough-quick-guide/108981
Is it possible to hide a vm from being detected?
by inlinux_gaming
0) virsh edit VM_NAME

1) Удалить первую строку и заменить ее


2) Теперь пройдите до самого конца прямо перед закрывающим тегом домена (  ) и добавьте:
   


Рубрики
KVM

KVM / centos / libvirt / yum / virt-install / virsh / sysctl

Ссылка:

https://www.dmosk.ru/miniinstruktions.php?mini=kvm-centos7

Установка:

yum -y install epel-release - установка репазитория epel
yum -y install kvm libvirt qemu-kvm- установка kvm и libvirt
yum -y install bridge-utils - установка ПО для bridge
systemctl start libvirtd  - запустить libvirtd 
systemctl enable libvirtd - добавить libvirtd в автозагрузка

Проверка:

lsmod | grep kvm - проверка поддержки kvm
virsh sysinfo - проверка подключения к KVM

Хранилище:

fdisk -l - просмотрим список физических дисков на хост-сервер
fdisk /dev/sdd - редактируем таблицу разделов диска /dev/sdd ( n - new, p - primary, w - write применить)
mkfs.ext4 /dev/sdd1 - создаем файловую систему ext4 для диска /dev/sdd1 
mkdir /mnt/images  - создаем каталог images
chmod 700 /mnt/images - выставляем на него права
mount -t ext4 /dev/sdd1 /mnt/images
ls -la /mnt/images  - 

Sealinux:

yum provides /usr/sbin/semanage - ищем пакет содержащий программу semanage  ( policycoreutils-python-2.5-17.1.el7.x86_64 )
yum -y install policycoreutils-python - 
semanage fcontext -a -t virt_image_t /mnt/images - 

Настройка сети

yum install bridge-utils - установка ПО для bridge
ip a - показать интерфейсы

vi /etc/sysconfig/network-scripts/ifcfg-XXX
-------------------------------------------
ONBOOT="yes"
TYPE="Ethernet"
BOOTPROTO="none"
DEVICE="XXX"
BRIDGE="br0"
--------------------------------------------


vi /etc/sysconfig/network-scripts/ifcfg-br0
--------------------------------------------
DEVICE="br0"
TYPE="Bridge"
ONBOOT="yes"
BOOTPROTO="static"
IPADDR="192.168.1.24"
NETMASK="255.255.255.0"
GATEWAY="192.168.1.1"
DNS1="8.8.8.8"
DNS2="77.88.8.8"
-----------------или-------------------------

DEVICE="br0"
TYPE="Bridge"
ONBOOT="yes"
BOOTPROTO="DHCP"

--------------------------------------------

systemctl restart network - применить изменения


vi /etc/sysctl.conf
-------------------
net.ipv4.ip_forward=1
-------------------
sysctl -p /etc/sysctl.conf - применяем настройки

systemctl restart libvirtd

Создание виртуальной машины

virt-install --os-variant list - смотрим доступные варианты гостевых операционных систем

virt-install -n FirstTest \
--noautoconsole \
--network=bridge:br0 \
--ram 1024 --arch=x86_64 \
--vcpus=1 --cpu host --check-cpu \
--disk path=/kvm/images/FirstTest-disk1.img,size=16 \
--cdrom /kvm/iso/CentOS-7-x86_64-Minimal-1611.iso \
--graphics vnc,listen=0.0.0.0,password=my_password \
--os-type linux --os-variant=rhel7 --boot cdrom,hd,menu=on

 где:

FirstTest — имя создаваемой машины;
noautoconsole — после создания не подключается автоматически к консоли виртуальной машины;
network — тип сети (в нашем примере сетевой мост);
ram — объем оперативной памяти, который будет выделен;
vcpus — количество виртуальных процессоров;
disk — виртуальный диск: path — путь до диска; size — его объем;
cdrom — виртуальный привод с образом системы;
graphics — параметры подключения к виртуальной машины с помощью графической консоли (в данном примере используем vnc); listen — на какой адресе принимает запросы vnc (в нашем примере на всех); password — пароль для подключения при помощи vnc;
os-variant — гостевая операционная система (весь список мы получали командой virt-install --os-variant list, в данном примере устанавливаем Reв Hat 7 / CentOS 7).

Разрешаем автостарт для созданной ВМ:

virsh autostart FirstTest

Подключение к виртуальной машине:

virsh vncdisplay FirstTest
--------------------------
:0 
Это значит, что нужно к 5900 прибавить 0. Если результат команды будет :1 — 5900 + 1 = 5901 и так далее.
--------------------------

firewall-cmd --permanent --add-port=5900-5905/tcp - открываем порт на брандмауэре

Базовые команды управления ВМ:

virsh list --all - получить список созданных машин
virsh start FirstTest - включить виртуальную машину * где FirstTest — имя созданной машины.
virsh shutdown FirstTest - выключить

Управление через веб-интерфейс

0. Для его установки вводим команды:
yum install http://resources.ovirt.org/pub/yum-repo/ovirt-release41.rpm
yum install ovirt-engine

1. После разворачиваем и настраиваем портал:
engine-setup

* после запуска команды система задаст ряд вопросов, на все, кроме ввода пароля, можно ответить по умолчанию (просто нажать Enter).

После окончания установки в браузере вводим https://kvm/ovirt-engine/sso/, где kvm — имя сервера. 
В открывшемся окне вводим логин admin и пароль, который создали при выполнении команды engine-setup. 
После успешного входа можно управлять виртуальными машинами через веб-интерфейс.
Рубрики
KVM

network connect error in kvm

Ошибка:

 
NETWORK CONNECT ERROR IN KVM Dell KVM 1082DS-4322DS

Linux:

1. Open the file /etc/java-7-openjdk/security/java.security as superuser
2. Comment out the line with the key jdk.tls.disabledAlgorithms
3. Add this line below and save the file:
jdk.tls.disabledAlgorithms=SSLv3, EC, ECDHE, ECDH

Windows:

1. Add the KVM IP into the exception site list
Open Control Panel -> Java
In Java Control Panel -> select Security tab -> Edit Site List -> Add the KVM IP “http://X.X.X.X”
Open the file as admin: Windows -> Program Files (x86) -> Java -> jre1.8.0_51 -> lib -> security -> java.security

2. Comment out the line with the key jdk.tls.disabledAlgorithms

3. Add this line below and save the file:

jdk.tls.disabledAlgorithms=SSLv3, EC, ECDHE, ECDH

For other jre/jdk versions it should be similar. Launch jnlp file again and you will be able to see the console.

Рубрики
KVM

esxi, qemu/kvm проброс видеокарт

Источники:

esxi:

Help needed with ESXi 6.0, GTX 960 Passthrough and "Code 43"
byu/vifino inhomelab
https://forums.servethehome.com/index.php?threads/troubleshooting-gpu-passthrough-esxi-6-5.12631/
Проброс видеокарты NVIDIA в VMware ESXi 6.0

Powershell выполнение сторонних скриптов:

Windows PowerShell. Выполнение сценариев отключено в этой системе

Патчи для nvidia:

(Вместо патча для qemu/kvm лутше использовать -cpu host,kvm=off или ) 
https://github.com/sk1080/nvidia-kvm-patcher - патч для драйверов nvidia 
https://github.com/sk1080/nvidia-kvm-patcher/blob/master/README.md - инструкция установки

qemu/kvm:

http://www.linux-kvm.org/page/HOWTO
http://libvirt.org/formatdomain.html
https://forums.linuxmint.com/viewtopic.php?f=231&t=229122
https://forums.linuxmint.com/viewtopic.php?t=212692
https://ycnrg.org/vga-passthrough-with-ovmf-vfio/
http://mirspo.blogspot.ru/2013/05/pci-passthrough-intel.html
http://linuxhub.ru/viewtopic.php?t=609
http://welinux.ru/post/7433/
https://www.howtoforge.com/using-kvm-on-ubuntu-gutsy-gibbon
https://linuxmint.com.ru/viewtopic.php?t=151
http://umvirt.ru/node/141
https://forum.sys-adm.in/?topic=4078.0
https://forum.sys-adm.in/index.php?PHPSESSID=mqhodn16eil9ddj6ut91tmfb41&board=8.0
https://wiki.debian.org/VGAPassthrough
https://habrahabr.ru/post/260791/
https://habrahabr.ru/post/211909/
https://habrahabr.ru/post/120717/
https://help.ubuntu.com/community/KVM/CreateGuests
https://losst.ru/ustanovka-kvm-ubuntu-16-04
KVM Windows XP install
https://www.suse.com/documentation/sles11/book_kvm/data/cha_qemu_running_devices.html https://wiki.archlinux.org/index.php/QEMU https://www.hippolab.ru/kvm-optimizaciya-raboty-s-pamyatyu-pri-pomoshchi-hugepages

drivers virto:

https://fedoraproject.org/wiki/Windows_Virtio_Drivers
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/latest-virtio/virtio-win.iso
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso

esxi для работы NVIDIA

В файл вм *.vmx добавить :
_____________________________
SMBIOS.reflectHost = "TRUE" 
hypervisor.cpuid.v0 = FALSE"
pciHole.start = "1200"
pciHole.end = "2200"
____________________________

В конфиг esx
vi /etc/vmware/esx.conf

Powershell выполнение сторонних скриптов

PowerShell имеет несколько режимов выполнения, которые определяют, какой тип кода разрешается выполнять. 
Существует 5 различных режимов выполнения:
 
■ Ограниченный (Restricted): Значение по умолчанию. 
Блокируется выполнение любых скриптов и разрешается работа интерактивных команд.
 
■ Все подписанные (All Signed): Разрешено выполнение скриптов, имеющих цифровую подпись.
 
■ Удаленные подписанные (Remote Signed):
Локальные скрипты работают без подписи. Все скачанные скрипты должны иметь цифровую подпись.

 ■ Неограниченный (Unrestricted): Разрешено выполнение любых скриптов. 
При запуске не подписанного скрипта, который был загружен из Интернета, программа может потребовать подтверждение.

 ■ Обходной (Bypass): Ничего не блокируется, никакие предупреждения и запросы не появляются.

По умолчанию для PowerShell используется режим «Ограниченный». В этом режиме, 
PowerShell работает как интерактивная оболочка. Если вы ранее не настраивали PowerShell, 
то вместо работы скрипта вы увидите сообщение об ошибке, написанное красным шрифтом как на скриншоте ниже.
Windows PowerShell. 
Выполнение сценариев отключено в этой системе
Самым безопасным способом решения этой проблемы является – изменение политики выполнения на неограниченную, 
запуск скрипта, и затем обратный возврат к ограниченной политике.
Set-ExecutionPolicy Unrestricted  -  изменения политики выполнения на неограниченную
Set-ExecutionPolicy Restricted - вернуть политику выполнения назад в ограниченный режим. Значение по умолчанию.
Set-ExecutionPolicy AllSigned - разрешено выполнение скриптов, имеющих цифровую подпись.
Set-ExecutionPolicy RemoteSigned - скрипты, подготовленные на локальном компьютере, можно запускать без ограничений, 
                                   скрипты загруженные из Интернета - только при наличии цифровой подписи.
Для выполнения выше представленных команд без подтверждения изменения, воспользуйтесь параметром
 -Force, например выполните команду:
Set-ExecutionPolicy Bypass -Force

Инструкция для установки патча на инсталлятор nvidia:

!!!! для QEMU/KVM лучше использовать специальные опции
-cpu host,kvm=off или 
1. Скачиваем драйвер nvidia. 
Запускаем установку и дожидаемся распаковки.
Выходим из установки драйвера.
C:/NVIDIA - тут распакованы драйверы. 
2. Устанавливаем  WDK/DDK на windows 
https://developer.microsoft.com/en-us/windows/hardware/download-kits-windows-hardware-development - WDK/DDK
4. Включить тестовый режим работы для windows
bcdedit.exe -set TESTSIGNING ON
5. Включаем powershell и выполняем скрипт
patcher.ps1 C:/NVIDIA/DisplayDriver/Version/Win10_64/International/Display.Driver
6. Ставим наточенный драйвер  (In C:/NVIDIA/DisplayDriver/Version)

KVM QENU опции запуска для NVIDIA
борьба с ошибкой 43

_______________________________

KVM:
-cpu host,kvm=off

_______________________________

Alternate Workaround (recent libvirt + qemu)

   ...
        
            ...
            
                
            
            ...
            
                ...
                
            
            ...
        
    ...

_______________________________

Включаем поддержку IOMMU в ядре

0)Для этого в файле /etc/default/grub меняю строку
GRUB_CMDLINE_LINUX="" 
на
GRUB_CMDLINE_LINUX="intel_iommu=on" 
или вот так и заодно отключить драйвер nouveau (nvidia)
GRUB_CMDLINE_LINUX_DEFAULT="modprobe.blacklist=nouveau quiet intel_iommu=on"
1)Обновляем загрузчик grub
update-grub 
2) После перезагрузки проверяем
dmesg | grep -i -e iommu -e dmar 

Добавление устройсва в blacklist
отключение драйвера устройства

0) lspci -vvn - выведет список устройств
lspci -vvn | grep nvidia - для NVIDIA
1) редактируем файл 
nano /etc/modprobe.d/blacklist.conf
2) добавим строку
blacklist snd-hda-intel 
blacklist nouveau
blacklist radeon
blacklist amdgpu
3) выполним команду
update-initramfs -u 
4) Убедится какой драйвер используется
lspci -k | grep -i -A 3 vga

Поиск устройств

lspci -k | grep -i -A 3 vga
lspci | grep VGA
lspci -nn | grep 02:00.
lspci -vv | grep -i flreset+
lspci -vv | less 
lspci -k -s 00:1b
find /sys/kernel/iommu_groups/ -type l
for a in /sys/kernel/iommu_groups/*; do find $a -type l; done
lsusb

KVM — добавить жесткий диск в виртуальную машину

    
      
      
      
    

hugepages и swap

Предположим нам нужно запустить виртуальную машину, 
отдав ей 4 гигабайта. 4 гигабайта = 4096 мегабайт.
4096 мегабайт / 2 мегабайта на страницу (размер одной hugepage) = 2048 страниц.
0) Получаем информацию:
cat /proc/meminfo - получаем информацию о настройках памяти
grep "Hugepagesize:" /proc/meminfo - получаем информацию о настройках HUGEPAGES
hugeadm --explain - получаем информацию о настройках HUGEPAGES
2) Проверяем включено ли HUGEPAGES
nano /etc/default/qemu-kvm
---------------
KVM_HUGEPAGES=1
---------------
2.1) Проверяем смонтировано ли  специальное устройство 
mount | grep huge - должны увидеть примерно следующие (( hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime,pagesize=2M) ))
3) Настраиваем hugepages
nano /etc/sysctl.conf
---/etc/sysctl.conf---
vm.swappiness=0
vm.vfs_cache_pressure = 1000
vm.swappiness = 0
vm.nr_hugepages = 1024
kernel.shmmax = 2147483648
vm.hugetlb_shm_group = 0
vm.min_free_kbytes = 11264
---------------------
sysctl -p - применяем изменения без перезагрузки 
---------------------
Команды hugeadm
hugeadm --explain
hugeadm --pool-list
hugeadm --set-recommended-shmmax
hugeadm --pool-pages-min 2M:128M
hugeadm --pool-pages-max 2M:4500M
hugeadm --set-recommended-shmmax
hugeadm --set-recommended-min_free_kbytes 

Настройка сети:

brctl show - посмотреть доступные  бриджи
brctl addif br5 eno1 - добавить сетевую карту eno1 в br5

включаем forward,proxy_arp и отключаем ipv6:
sysctl net.ipv4.conf.all.forwarding=1
sysctl net.ipv4.conf.all.proxy_arp=1
sysctl net.ipv6.conf.all.disable_ipv6=1
sysctl net.ipv6.conf.default.disable_ipv6=1
sysctl net.ipv6.conf.lo.disable_ipv6=1
применяем изменения без перезагрузки
sysctl -p 

nano /etc/network/interfaces - редактируем конфиг сети 
_____________________________ 
auto lo
iface lo inet loopback

auto eno1
iface eno1 inet manual
dns-nameserver 192.168.15.1
dns-nameserver 8.8.8.8

auto br5
iface br5 inet static
address 192.168.15.253
broadcast 192.168.15.255
netmask 255.255.255.0
gateway 192.168.15.1
bridge_ports eno1
bridge_stp off
____________________________

/etc/init.d/networking restart - перезапуск сети

Установка KVM на linuxmint 18

0.Проверка системы
egrep -q '^flags.*(svm|vmx)' /proc/cpuinfo && echo virtualization extensions available
egrep '(vmx|svm)' /proc/cpuinfo
kvm-ok
dmesg | grep -i -e iommu -e dmar 
cat /proc/cpuinfo | grep svm
dmesg | grep AMD-Vi
lsmod | grep kvm
lsmod | grep vfio
dmesg | grep vfio
dmesg | grep VFIO
lspci -k | grep -i -A 3 vga
dmesg | grep -i vfio


1. Редактируем загрузчик
Добавляем поддержку для IOMMU (для АМД указать amd_iommu=on)
GRUB_CMDLINE_LINUX_DEFAULT="modprobe.blacklist=nouveau quiet intel_iommu=on"
update-grub 

2. Включаем vfio (нужно для успешного проброса видеокарт и т.д.)
nano /etc/initramfs-tools/modules
vfio
vfio_iommu_type1
vfio_pci
vfio_virqfd
vhost-net

Применим: 
update-initramfs -u

Добавим видяшку:
nano /etc/modprobe.d/local.conf
options vfio-pci ids=10de:1185,10de:0e0a

3. Установка kvm
apt-get install qemu-kvm qemu  virt-viewer libvirt-bin ovmf  seabios qemu-utils hugepages bridge-utils python-virtinst libosinfo-bin

Для управления вм из GUI можно поставить:
apt-get install virt-manager
apt-get install gir1.2-spice-client-gtk-3.0 gir1.2-spice-client-gtk-2.0
apt-get install spice-client-gtk
apt-get install spice-vdagent

4. Создание виртуального жесткий диск для ВМ
Создадим образ диска размером 25GB.
qemu-img create mint-sarah.img 25G

Другим вариантом является создание образа диска в дефолтном 
для Qemu формате ‘qcow2’ используя следующую команду:
qemu-img create -f qcow2 mint-sarah.img 25G - создать диск на 25G
qemu-img create -f qcow2 hdd.img 10G - создать диск на 10G

Создадим образ диска размером 50GB.
fallocate -l 50G /media/user/win.img

Создать пустой диск 4GB:
dd if=/dev/zero of=disk01.img bs=1G count=4

5. Запуск ВМ 
0)Запуск ВМ QEMU
для 32-х битной системы:
qemu-system-i386 -hda mint-sarah.img -boot d -cdrom /home/chocobo/linuxmint-18-cinnamon-32-bit.iso -m 1024

для 64-х битной системы:
qemu-system-x86_64 -hda mint-sarah.img -boot d -cdrom /home/chocobo/linuxmint-18-cinnamon-64-bit.iso -m 1024

Таким образом мы запускаем ВМ с виртуальным HDD и cd-rom в котором смонтирован образ диска, 
а также 1Gb оперативной памяти на борту

После установки - загрузить VM в дальнейшем можно будет так:
qemu -hda mint-sarah.img -m 640

1) Запуск ВМ KVM
kvm -hda disk01.img -cdrom os.iso -m 512 -boot d -vnc IP:1
kvm -hda disk01.img -m 512 -boot c -net nic,vlan=0,macaddr=00:16:3e:00:00:01 -net tap -nographic -daemonize
kvm -hda disk01.img -m 512 -boot c -net nic,vlan=0,macaddr=00:16:3e:00:00:01,model=rtl8139 -net tap -nographic -daemonize
kvm -m 512 -cdrom /media/Files/ISO/grml32_2011.12.iso
kvm --no-acpi -m 512 -cdrom /media/Files/ISO/grml32_2011.12.iso -soundhw ac97
kvm --no-acpi -m 512 -cdrom /media/Files/ISO/grml32_2011.12.iso -soundhw ac97 -hda hdd.img
kvm --no-acpi -m 512 -cdrom /media/Files/ISO/grml32_2011.12.iso -soundhw ac97 -hda hdd.img -boot d (загрузка с диска hdd.img)

2)  Запуск/настройка  ВМ virsh
Файлы конфигураций:
по умолчанию конфигурации storage хранятся тут /etc/libvirt/storage/
по умолчанию есть default.xml — хранилище на файловой системе в /var/lib/libvirt/images
Все конфигурации виртуальных машин хранятся в /etc/libvirt/qemu/ 


Встроенная помощь по командам:
virsh -c qemu:///system help

Посмотреть все пулы:
virsh pool-list --all

Добавляем свой pool c именем qemu-test-storage:
*-as создает хранилище аналогичное дефолту, т.е. по конфигурации такое же как в default.xml
virsh pool-define-as qemu-test-storage dir --target /home/username/qemu-test-storage/

По умолчанию пул не запущен, стартуем:
virsh pool-start qemu-test-storage

Добавляем созданный пул в автостарт:
virsh pool-autostart qemu-test-storage

Список ВМ:
virsh list -all 

Создание ВМ:
virt-install --connect qemu:///system --arch=x86_64 -n vm4 -r 2048 --vcpus=1 --disk path=/dev/vg0/lv4 -c /mnt/Iso/win_7_professional_amd64.iso --vnc --noautoconsole --os-type windows --os-variant win7 --network=bridge:br0

Создание ВМ:
virt-install --connect qemu:///system --arch=x86_64 -n vm7 -r 2048 --vcpus=1 --disk path=/dev/vg0/lv7,device=disk,bus=virtio -c /mnt/Iso/win_7_professional_amd64.iso --vnc --noautoconsole --os-type windows --os-variant win7 --network=bridge:br0 --disk path=/mnt/Iso/virtio-win-1.1.11-0.iso,device=cdrom,perms=ro

Клонирование настроек vsrv1 в vsrv2: 
virt-clone -o vsrv1 -n vsrv2 -f vsrv2.img --connect=qemu:///system

Редактирование/настройка ВМ:
virsh -c qemu:///system edit vm7

Посмотреть статус установленных ВМ:
virsh -c qemu:///system list --all

Запустить ВМ vsrv1:
virsh -c qemu:///system start vsrv1

Послать команду завершения работы ВМ:
virsh -c qemu:///system shutdown vsrv1

Принудительно завершить работу ВМ:
virsh -c qemu:///system destroy vsrv1

Удалить ВМ:
virsh -c qemu:///system undefine vsrv1

Список сетей:
virsh net-list --all

Узнать параметры подключения к ВМ:
virsh vncdisplay name_VM

Подключится к ВМ:
virt-viewer name_VM 

Добавление пользователя в группу libvirtd :

gpasswd -a ПОЛЬЗОВАТЕЛЬ libvirtd

Варианты устанавливаемых систем:

 
osinfo-query os | less

Создания ВМ:

virt-install -n vsrv1 -r 384 -f vsrv1.img -s 10 -c ubuntu-9.04-server-amd64.iso --accelerate --os-type=linux --os-variant=generic26 -v --vnc -w bridge:br0

где:
-n vsrv1 — имя ВМ;
-r 384 — выделяемый объем ОЗУ для нее;
-f vsrv1.img — файл, являющийся виртуальный жестким диском для гостевой ОС;
-s 10 — объем этого диска в гигабайтах;
-c ubuntu-9.04-server-amd64.iso — образ cd дистрибутива гостевой ОС, подключаемый как виртуальный cdrom;
--accelerate --os-type=linux --os-variant=generic26 -v — ускоряем, оптимизируем ВМ для конкретной гостевой ОС и задействуем аппаратные возможности виртуализации;
--vnc — запускаем для ВМ vnc-сервер;
-w bridge:br0 — указываем использовать сетевой мост.

Создания ВМ:

 
virt-install --virt-type=kvm --name centos7 --ram 2048 --vcpus=2 --os-variant=rhel7 --hvm --cdrom=/var/lib/libvirt/boot/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

где:
sudo virt-install - создание ВМ;
--virt-type=kvm - тип виртуализации, в нашем случае kvm;
--name centos7 - имя новой машины;
--ram 2048 - количество памяти в мегабайтах;
--vcpus=2  - количество ядер процессора;
--os-variant=rhel7 - тип операционной системы;
--hvm - вид контейнера ( Может быть PV или HVM)
--cdrom=/var/lib/libvirt/boot/CentOS-7-x86_64-DVD-1511.iso - установочный образ системы;
--network=bridge=br0,model=virtio - сетевой мост, который мы настроили ранее;
--graphics vnc - способ получения доступа к графическому интерфейсу ( у нас VNC);
--disk path=/var/lib/libvirt/images/centos7.qcow2,size=40,bus=virtio,format=qcow2 - адрес нового жесткого диска для этой виртуальной машины;

Создания ВМ:

$ virt-install --connect qemu:///system -n debian_guest -r 512 --arch=i686 --vcpus=1 --os-type=linux --os-variant=debiansqueeze --disk debian-6.0.1a-i386-netinst.iso,device=cdrom --disk debian_guest.img,bus=virtio,size=2,sparse=false,format=raw --network=default,model=virtio --hvm --accelerate --vnc

Подробно разберём параметры, которые мы указали:

--connect qemu:///system URL, по которому мы подключаемся к KVM. Подключаться можно через ssh.
-n debian_guest Имя гостевой системы.
-r 512 Выделяемый объём оперативной памяти в мегабайтах.
--arch=i686 Архитектура гостевой операционной системы.
--vcpus=1 Количество виртуальных процессоров, доступных гостю.
--os-type=linux --os-variant=debianlenny Специфичные для данной операционной системы параметры.
--disk debian-6.0.1a-i386-netinst.iso,device=cdrom Загружаемся с диска, образ которого указали.
--disk debian_guest.img,bus=virtio,size=2,sparse=false,format=raw Создаём образ системы размером 2Гб, который сразу помещаем на диск (можно создать образ нулевого размера, но тогда возможна фрагментация, что получается несколько медленнее). Формат простой, можно сделать с dd файл. Драйвер диска virtio, использовать лучше virtio, чем ide: производительность их отличается если не на порядок, то в разы.
--network=default,model=virtio Сетевые настройки по умолчанию. В этом случае libvirt создаст мост, сделает dhcp сервер и выдаст через него адрес для доступа виртуальной машины.
--hvm Полная виртуализация — то есть, можно использовать собственные ядра.
--accelerate Работа через /dev/kvm.
--vnc Запускаем VNC, чтобы подключаться к текстовой консоли.

Редактирование конфига:

 
virsh edit name_VM - отредактировать ВМ name_VM (автопроверка конфига ВМ после редактирования)
nano /etc/libvirt/qemu/mywin.xml - (!!!автопроверки нету !!! используй virsh edit) открытие редактором ВМ mywin.xml 
xed /etc/libvirt/qemu/mywin.xml - (!!!автопроверки нету !!! используй virsh edit) открытие графическим  редактором ВМ mywin.xml 

Пример конфига:


  mywin
  c2f9f250-1f0f-4d0e-abc0-2d276da16036
  12521472
  12521472
  8
  
    hvm
    /usr/share/OVMF/OVMF_CODE.fd
    /var/lib/libvirt/qemu/nvram/mywin_VARS.fd
    
  
  
    
    
    
      
    
  
  
    Broadwell
    
  
  
    
    
    
  
  destroy
  restart
  restart
  
    
    
  
  
    /usr/bin/kvm-spice
    
      
      
      
      
      

Антидетект что система виртуальная

0) virsh edit VM_NAME

1) Удалить первую строку и заменить ее


2) Теперь пройдите до самого конца прямо перед закрывающим тегом домена (  ) и добавьте:
   


Рубрики
KVM

KVM / debian / libvirt / egrep / grep / dmesg / apt-get / virsh / sysctl / iptables

Проверка возможности установки KVM:

egrep -c '(vmx|svm)' /proc/cpuinfo - проверка процессора 
egrep '(vmx|svm)' --color /proc/cpuinfo - проверка процессора 
egrep -q '^flags.*(svm|vmx)' /proc/cpuinfo && echo virtualization extensions available - проверка процессора 
kvm-ok - проверка процессора  
egrep -c ' lm ' /proc/cpuinfo - количество потоков
uname -m  - архитектура установленной системы
free -h - количество памяти
fdisk -l - вывести список разделов и дисков
df -h - показать занятое пространство
dmesg | grep -i -e iommu -e dmar 

cat /proc/cpuinfo | grep svm - проверка процессора 
dmesg | grep AMD-Vi - проверка процессора 
lsmod | grep kvm - проверка процессора 

lsmod | grep vfio - устройства vfio (проброс pci, etc..)
dmesg | grep vfio - устройства vfio (проброс pci, etc..)
dmesg | grep VFIO - устройства vfio (проброс pci, etc..)
dmesg | grep -i vfio  - устройства vfio (проброс pci, etc..)

lspci -k | grep -i -A 3 vga - показать видео карту

Файлы:

/etc/libvirt/ - здесь в основном хранятся конфигурационные файлы
/etc/libvirt/qemu.conf - главный конфиг
/var/lib/libvirt/ - здесь будут хранится образы жестких дисков, мгновенные снимки системы и многое другое.
/var/lib/libvirt/qemu/snapshot/ - резервные копии файлов конфигураций снапшотов

Установка:

apt-get install cpu-checker - установить программу для проверки процессора
apt-get install qemu-kvm libvirt-bin bridge-utils - установка
apt-get install virt-manager - установка virt-manager
apt-get install libosinfo-bin - установить информацию об ос 

nano /etc/network/interfaces - конфиг сети

adduser user_name libvirt - добавить user_name в группу libvirtd
adduser user_name kvm - добавить user_name в группу kvm
sudo adduser `id -un` libvirtd - добавить себя в группу libvirtd
groups - группы
cat /etc/group - посмотреть составы групп
cat /etc/passwd - посмотреть пользователей

ls  /etc/libvirt/qemu/ - здесь находятся конфиги ВМ 
virsh --connect qemu:///system version - версия
virsh --connect qemu:///system list - 
virsh -c qemu:///system list - список ВМ
virsh list --all -  вывести список ВМ (вкл/выкл)
virsh pool-list --all - вывести список хранилищ
virsh list --all - вывести список всех виртуалок
virsh net-list --all - вывести список всех виртуальных сетей
virsh sysinfo - все о хосте (cpu,mem,etc..)
virsh capabilities - свойства хоста
dpkg -L ovmf - список каталогов ovmf (bios и т.д.)

Настройка сети static:

nano /etc/network/interfaces
----------------------------------------
auto lo
iface lo inet loopback

auto eno1
iface eno1 inet manual
dns-nameserver 192.168.15.1
dns-nameserver 8.8.8.8

auto br0
iface br0 inet static
address 192.168.15.253
broadcast 192.168.15.255
netmask 255.255.255.0
gateway 192.168.15.1
bridge_ports eno1
bridge_stp off
-------------------------------------

Настройка сети dhcp:

nano /etc/network/interfaces
----------------------------------------
auto lo
iface lo inet loopback

auto eno1
iface eno1 inet manual
dns-nameservers 192.168.15.1
dns-nameservers 8.8.8.8

auto br0
iface br0 inet dhcp
bridge_ports eno1
bridge_stp off
-------------------------------------

Применить настройки сети без перезагрузки:

/etc/init.d/networking restart - перезагрузка сети (пере читается конфигурация сети) 
systemctl stop NetworkManager.service - остановить сеть
systemctl start NetworkManager.service - запустить (пере читается конфигурация сети) 
systemctl restart networking - перезагрузка сети (пере читается конфигурация сети) 

Настройка bridge:

brctl show - посмотреть доступные  бриджи
brctl addif br0 eno1 - добавить сетевую карту eno1 в br0

sysctl настройка

 
включаем forward,proxy_arp и отключаем ipv6:
sysctl net.ipv4.conf.all.forwarding=1
sysctl net.ipv4.conf.all.proxy_arp=1
sysctl net.ipv6.conf.all.disable_ipv6=1
sysctl net.ipv6.conf.default.disable_ipv6=1
sysctl net.ipv6.conf.lo.disable_ipv6=1

можно улучшить быстродействие соединения bridge (хз и так вроде норм 
sysctl net.bridge.bridge-nf-call-ip6tables = 0 
sysctl net.bridge.bridge-nf-call-iptables = 0 
sysctl net.bridge.bridge-nf-call-arptables = 0

nano /etc/sysctl.conf - файл sysctl
sysctl -p  - применяем изменения без перезагрузки

Сеть доп:

При настройки bridge+forward  сеть заработает
На хосте буду создаваться интерфейсы vnet. 
В гостях будет интернет.
Команды для виртуальных сетей:
virsh net-list --all - вывести список всех виртуальных сетей
virsh net-info Network_NAME - подробная информация об ВС Network_NAME
virsh net-destroy default - остановить сеть
virsh net-start default - включить сеть
netstat -nap | grep kvm - определение номер порта VNC для виртуальной машины

Сеть виртуальная. команды:

virsh  net-list --all - список виртуальных  сетей 
virsh  net-edit default - редактирование сети по умолчанию

Отключение сети default:

ip link - посмотреть все линки
virsh net-destroy default - выключить сеть default
virsh net-autostart --disable default - отключение автозагрузки сети default

Включение сети default:

virsh  net-list --all - показать все сети 
virsh net-autostart default - включение автозагрузки сети default

Отключаем firewalld

systemctl stop firewalld
systemctl disable firewalld
rm '/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service'
rm '/etc/systemd/system/basic.target.wants/firewalld.service'

iptables:

----------------------------------------------
iptables -L -n -v - показать все правила (посмотреть текущие правила)
iptables -n -t nat -L - настройки firewall nat
iptables -n -L -v --line-numbers - для просмотра правил с номером строки
iptables -L INPUT -n -v - для просмотра INPUT правил
iptables -L OUTPUT -n -v --line-numbers - для просмотра OUTPUT правил
--------------------------------------------- 
Чтобы отчистить правила iptables его собственными средствами введите:
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
---------------------------------------------
 F: Удаление всех правил (flushing).
 X: Удаление цепочки
 t <таблица>: Выбрать таблицу и удалить правила.
 P: Установить политику по умолчанию (например DROP, REJECT или ACCEPT).
--------------------------------------------- 

Задаем нужный ip для гостя:


Виртуальная сетевая карта:

на хосте:
tunctl -b -u username -t debian_guest - создадим виртуальную сетевую карту и поднимем устройство
ifconfig debian_guest 0.0.0.0 up - включим сетевушку
ip route add 10.10.10.100 dev debian_guest - cсоздадим маршрут на нужное нам устройство с нужного IP-адреса

virsh edit VM_name - редактировать настройки ВМ
---------------------------------------------

    
    
    
    

---------------------------------------------

Настройки на госте 
ifconfig eth0 10.10.10.100 netmask 255.255.255.0 - задаем ip
route add default gw 10.10.10.10 - задаем маршрут

vlan:


  ovs-net
  
  
  
    
  
  
    
    
  
  
    
      
    
  

console:

 
Я получил ошибку, когда пытался запустить консоль своей виртуальной машины:
$ virsh console alice
error: internal error: cannot find character device 
Эта ошибка возникает потому, что вы не определили устройство консоли в XML-файле виртуальной машины. 
Добавьте приведенные ниже строки в раздел "device" XML-файла.

  

VNC:

 
---------------------------------------------
Проверяем вкл VNC:
virsh dumpxml debian8 | grep vnc
видим 
---------------------------------------------
Так выглядит настройка:



---------------------------------------------
virsh vncdisplay VMName_1 - узнаем порт VNC(для подключения используем внешний VNC клиент)
где VMName_1 — имя ВМ, :3 — номер по порядку порта, начиная с 5900, 
то есть подключаться надо на порт 5903, 
но в программе UltraVNC сработает и так 10.110.10.15:3 
---------------------------------------------

Хранилища команды:

virsh pool-list - вывести список хранилищ
mkdir -p /mnt/temp1/datastore1 - создать каталог /mnt/temp1/datastore1 (параметр -p создаст каталог temp1 если его нету)
virsh pool-define-as Имя_пула тип - - - - "/путь"  - создать пул хранилища Имя_пула
virsh pool-define-as storage dir - - - - "/mnt/temp1/datastore1"   - создать пул хранилища storage
virsh pool-build Имя_хранилища - собираем хранилище Имя_хранилища
virsh pool-build storage - собираем хранилище storage
virsh pool-start storage - включаем хранилище storage
virsh pool-autostart storage - включаем авто включение хранилище storage 
virsh pool-info storage - информация о хранилище (емкость и свободное место)
virsh pool-destroy storage - отключить хранилище с именем storage
virsh pool-delete storage - удалить хранилище
virsh pool-undefine storage - удалить определение(настройки) хранилища

Создание хранилища:

0) virsh pool-define-as datastore1 dir - - - - "/mnt/datastore1" - обозначаем хранилище  datastore1
1) virsh pool-build datastore1 - собираем хранилище  datastore1
2) virsh pool-start datastore1 - запускаем хранилище  datastore1
3) virsh pool-autostart datastore1 - включаем авто загрузку хранилища   datastore1

!!! Иногда короткие команды не работают
!!! пример создание пула с именем vagrant, тип директория, точка монтирования (/kvm/500gb/vagrant/)
virsh pool-define-as --name vagrant --type dir --target /kvm/500gb/vagrant/

Создание хранилища(:

0) virsh - входим в virsh
1) pool-create-as iso1 dir - - - - "/mnt/datastore2/iso1/" - создаем настройки для хранилища (XML-конфигурация пула)
2) pool-refresh iso1 - собираем хранилище
ошибка: Не удалось собрать пул iso1
ошибка: Запрошена недопустимая операция: пул «iso1» уже активен
3) pool-refresh iso1 - перечитываем конфигурацию для хранилища iso1
4) virsh pool-autostart iso1 - включаем авто включение хранилища iso1

Отключение хранилища:

0) virsh pool-stop datastore1 - остановка хранилища
1) virsh pool-autostart  --disable datastore1 - отключаем  авто включение хранилища
2) virsh pool-undefine datastore - удалить определение(настройки) хранилища (убирается из автозагрузки)
!!! файлы должны остаться

Установочные файлы:

wget https://mirrors.kernel.org/centos/7.2.1511/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso - CentOS 7.x
wget ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/10.3/FreeBSD-10.3-RELEASE-amd64-disc1.iso - FreeBSD 10
wget ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/11.0/FreeBSD-11.0-RELEASE-amd64-disc1.iso - FreeBSD 11
wget http://mirror.esc7.net/pub/OpenBSD/5.9/amd64/install59.iso - OPENBSD 5.9
wget https://mirrors.kernel.org/debian-cd/current/amd64/iso-dvd/debian-8.5.0-amd64-DVD-1.iso - DEBIAN 8.X
wget https://cdimage.debian.org/debian-cd/current/amd64/iso-cd/debian-9.1.0-amd64-netinst.iso - DEBIAN 9.x

Подключаем диск гостю:

!!! рекомендуется диск подключать по его UUID
!!! использую путь /dev/disk/by-id/UUID_DISK
fdisk -l - показать все диски и разметку
lshw -class disk -class storage - показать все устройства хранения
blkid - программа показывает UUID дисков и разделов
ls -l /dev/disk/by-id/ - показывает UUID дисков и разделов
ls -l /dev/disk/by-id/ |grep sdb - показывает UUID диска/разделов  sdb

Физический  диск virtio:
---------------------------------------------
     - подключаем блочное устройство
       - драйвер,тип данных, кеш
       - источник (наш диск)
       - "буква" диска и шина
      
- контролер --------------------------------------------- Физический диск virtio: ---------------------------------------------
--------------------------------------------- Физический диск virtio: ---------------------------------------------
--------------------------------------------- Виртуальный диск virtio: ---------------------------------------------
контроллер virtio: --------------------------------------------- --------------------------------------------- диск sata: --------------------------------------------- --------------------------------------------- контролер sata: ---------------------------------------------
---------------------------------------------

Управление 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 - отредактировать настройки ВМ

Клонирование ВМ:

virt-clone --help - клонирует существующую виртуалку и изменяет host-sensitive данные, например, mac address
virt-clone -o VM_name -n vm_name_clone --file /mnt/tmp/vm_name_clone.img

Изменение диска:

qemu-img resize /mnt/datastore/name_disk.img -2G - уменьшить размер диска
qemu-img resize /mnt/datastore/name_disk.img +2G - увеличить размер диска
qemu-img info /mnt/datastore/name_disk.img - информация о диске

Еще команды для диска:

qemu-img create -f qcow2 /home/dev/images/alice.img 5G - создание диска qcow2
qemu-img create -o preallocation=metadata -f qcow2 name_disk.qcow2 20G - создание диска qcow2
kvm-img convert -O qcow2 zimbra-000001.vmdk zimbra.qcow2 - конвертация

Команды изменение привода ( CD-ROM DVD ISO):

change-media guest01 vdd --eject - извлечение образа
change-media guest01 vdd /pool/disc.iso - вставка нового образа:
Общий формат команды:
change-media   [] [--eject] [--insert] [--update] [--current] [--live] [--config] [--force]

Снапшоты:

 snapshot-create-as VM_name - создать снимок для VM_name
virsh snapshot-list VM_name - просмотреть снимки 
virsh snapshot-revert VM_name 1360593244 - восстановить из снимка
virsh snapshot-delete VM_name 1360593244 - удалить снимок

Время хоста:

!!!! аппаратные часы идут по UTC !!!
nano /etc/syscomfig/clock - воспринимает только одно значение UTC - это UTC=no или UTC=false, 
                            а его наличие UTC=yes или UTC=true или как таковое отсутствие (это по дефолту) 
                            подразумевает что аппаратные часы выставлены как положено (в UTC)
hwclock -w --localtime - установить время
dpkg-reconfigure tzdata - изменить временную зону
dpkg-reconfigure locales - настроить локали (язык)
dpkg-reconfigure console-data - настройки раскладки клавиатуры

Время гостя:

virsh list -all - список ВМ
virsh dumpxml instance-xxxx | grep clock
virsh edit VM_name - редактирование файла конфигурации
virsh domtime $name_vm --now - синхронизировать время гостя с хоста
----------------------------------------

    
    
    
    
  
----------------------------------------

NTP — сервер времени:

nano /etc/default/ntp
nano /etc/default/ntpdate

Миграция ВМ:

virsh migrate --live vm_NAME qemu+ssh://host2.com/system - миграция
virsh qemu+ssh://host2.com/system list - проверка результата 

Backup VM с остановкой:

0) virsh list --all - узнаем имена всех машин
1) virsh dumpxml имя_машины > имя_машины.xml - сохраняем конфигурацию VM
2) virsh shutdown имя_машины - останавливаем нужную виртуальную машину
3) Сжимаем файл имя_машины.img при помощи Lzop. 
lzop -c -1
4) Запускаем виртуальную машину
virsh start имя_машины
5) Копируем файл имя_машины.img.lzo любым удобным образом на сервер бекапов.

Распаковка Lzo:

lzop -dc disk1.lzo > /new/path/disk1.img
lzop -dc disk1.lzo > /dev/vg_name/vm_disk1

Агент QEMU установка (Tools) \ qemu guest agent:

-------------------------------------------
Установка на госте:
# в 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

Backup VM без остановки:

В клиенте устанавливаем Агент QEMU!
-------------------------------------------
Информация:
virsh domblklist vm-name -  узнаем имена дисков виртуальной машины
virsh list --all - вывести список всех виртуалок
vm-name	- имя виртуальной машины
backup-snapshot	- название снэпшота, может быть любым
vda -имя диска, для которого указываем адрес снепшота
/snapshot/vm-name-backup.qcow2	- путь и имя файла для снепшота
-------------------------------------------
На сервере:
0) virsh snapshot-create-as --domain vm-name backup-snapshot -diskspec vda,file=/snapshot/vm-name-backup.qcow2 --disk-only --atomic --quiesce --no-metadata - выполняем снимок виртуалки
1) pigz -c /virt/vm-name.qcow2 > /backup-vm/vm-name.qcow2.gz - архивируем основной файл виртуальной машины
2) virsh blockcommit vm-name vda --active --verbose --pivot - выполняем слияние снапшота + диск
3) rm /snapshot/vm-name-backup.qcow2 - удаляем снапшот
4) virsh dumpxml vm-name > /backup-vm/vm-name.xml - бэкапим настройки виртуалки

Скрипт бэкапа:

#!/bin/bash

# Дата год-месяц-день
data=`date +%Y-%m-%d`
# Папка для бэкапов
backup_dir=/backup-vm
# Список работающих VM
vm_list=`virsh list | grep running | awk '{print $2}'`
# Список VM, заданных вручную, через пробел
#vm_list=(vm-1 vm-2)
# Лог файл
logfile="/var/log/kvmbackup.log"

# Использовать это условие, если список VM задается вручную
#for activevm in "${vm_list[@]}";
# Использовать это условие, если список работающих VM берется автоматически
for activevm in $vm_list
    do
        mkdir -p $backup_dir/$activevm
        # Записываем информацию в лог с секундами
        echo "`date +"%Y-%m-%d_%H-%M-%S"` Start backup $activevm" >> $logfile
        # Бэкапим конфигурацию
        virsh dumpxml $activevm > $backup_dir/$activevm/$activevm-$data.xml
        echo "`date +"%Y-%m-%d_%H-%M-%S"` Create snapshots $activevm" >> $logfile
        # Список дисков VM
        disk_list=`virsh domblklist $activevm | grep vd | awk '{print $1}'`
        # Адрес дисков VM
        disk_path=`virsh domblklist $activevm | grep vd | awk '{print $2}'`
        # Делаем снепшот диcков
        virsh snapshot-create-as --domain $activevm snapshot --disk-only --atomic --quiesce --no-metadata
        sleep 2
        for path in $disk_path
            do
                echo "`date +"%Y-%m-%d_%H-%M-%S"` Create backup $activevm $path" >> $logfile
                # Вычленяем имя файла из пути
                filename=`basename $path`
                # Бэкапим диск
                pigz -c $path > $backup_dir/$activevm/$filename.gz
                sleep 2
            done
        for disk in $disk_list
            do
                # Определяем путь до снепшота
                snap_path=`virsh domblklist $activevm | grep $disk | awk '{print $2}'`
                echo "`date +"%Y-%m-%d_%H-%M-%S"` Commit snapshot $activevm $snap_path" >> $logfile
                # Объединяем снепшот
                virsh blockcommit $activevm $disk --active --verbose --pivot
                sleep 2
                echo "`date +"%Y-%m-%d_%H-%M-%S"` Delete snapshot $activevm $snap_path" >> $logfile
                # Удаляем снепшот
                rm $snap_path
            done
        echo "`date +"%Y-%m-%d_%H-%M-%S"` End backup $activevm" >> $logfile
    done

Очистка папки с бэкапами:

Данная команда удалит все файлы старше 90 дней:
/usr/bin/find /backup-vm/*/ -type f -mtime +90 -exec rm -rf {} \;

Установка и настройка ВМ:

!!! Перед выполнением этих команд убедитесь, что вы создали образ диска.
-------------------------------------------
virt-install \
--name debian8 \
--ram 1024 \
--disk path=./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 \
--name centos7 \
--ram 1024 \
--disk path=./centos7.qcow2,size=8 \
--vcpus 1 \
--os-type linux \
--os-variant centos7 \
--network bridge=virbr0 \
--graphics none \
--console pty,target_type=serial \
--location 'http://mirror.i3d.net/pub/centos/7/os/x86_64/' \
--extra-args 'console=ttyS0,115200n8 serial'
-------------------------------------------
virt-install \
--name ubuntu1404 \
--ram 1024 \
--disk path=./ubuntu1404.qcow2,size=8 \
--vcpus 1 \
--os-type linux \
--os-variant generic \
--network bridge=virbr0 \
--graphics none \
--console pty,target_type=serial \
--location 'http://archive.ubuntu.com/ubuntu/dists/trusty/main/installer-amd64/' \
--extra-args 'console=ttyS0,115200n8 serial'
-------------------------------------------
wget http://ftp.freebsd.org/pub/FreeBSD/releases/ISO-IMAGES/10.1/FreeBSD-10.1-RELEASE-amd64-dvd1.iso
virt-install \
--name freebsd10 \
--ram 1024 \
--disk path=./freebsd10.qcow2,size=8 \
--vcpus 1 \
--os-type generic \
--os-variant generic \
--network bridge=virbr0 \
--graphics vnc,port=5999 \
--console pty,target_type=serial \
--cdrom ./FreeBSD-10.1-RELEASE-amd64-dvd1.iso \
-------------------------------------------

Источники:

https://fedoraproject.org/wiki/Windows_Virtio_Drivers - драйверы для windows 
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/stable-virtio/virtio-win.iso - драйверы для windows iso
http://goodigy.ru/kvm_na_ubuntu_server_14.04
http://goodigy.ru/ustanovka_mashin_virt-install
https://help.ubuntu.com/community/KVM/Networking
http://www.linux-kvm.org/page/Main_Page
http://xgu.ru/wiki/Linux_Bridge
https://habrahabr.ru/post/168791/
https://linux.die.net/man/1/virt-install
https://khashtamov.com/ru/kvm-setup-server/
https://davidyat.es/2016/09/08/gpu-passthrough/
https://ycnrg.org/vga-passthrough-with-ovmf-vfio/
http://libvirt.org/formatdomain.html#elementsTime
https://www.cyberciti.biz/faq/installing-kvm-on-ubuntu-16-04-lts-server/
https://serveradmin.ru/kvm-backup/
http://wiki.libvirt.org/page/Live-disk-backup-with-active-blockcommit
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Virtualization_Deployment_and_Administration_Guide/chap-QEMU_Guest_Agent.html
http://rus-linux.net/MyLDP/vm/kvm-v-debian.html
Рубрики
KVM

KVM qcow2 to vhdx

источники:

https://blogs.msdn.microsoft.com/virtual_pc_guy/2015/06/22/handy-tool-for-converting-kvm-vmware-images-to-hyper-v/
qemu-img for Windows
http://jidckii.ru/%D0%BA%D0%BE%D0%BD%D0%B2%D0%B5%D1%80%D1%82%D0%B0%D1%86%D0%B8%D1%8F-%D0%BE%D0%B1%D1%80%D0%B0%D0%B7%D0%BE%D0%B2-vm-%D0%BF%D1%80%D0%B8-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8-qemu-img-%D0%B2-%D0%BB%D1%8E/

возможные форматы:

VMDK (VMware) — vmdk
QCOW2 (KVM, Xen) — qcow2
VHD (Hyper-V) — vpc
VHDX (Hyper-V) — vhdx
RAW —  raw
VDI (VirtualBox)  — vdi

основные команды:

qemu-img convert -f qcow2 “SourceDisk.img” -O vhdx -o subformat=dynamic “Destination.vhdx” - конвертация qcow2 в vhdx
qemu-img.exe convert -f qcow2 "f:\old_disk1\dc.qcow2" -O vpc  g:\vhd\dc.vhd - конвертация  qcow2 в vhd
qemu-img.exe check source.qcow2 - проверка образа
qemu-img.exe info image.qcow2 - информация об образе

приступил :(

qemu-img.exe convert -f qcow2 "f:\old_disk1\dc.qcow2" -O vhdx -o subformat=dynamic g:\vhd\dc.vhdx
qemu-img.exe convert -f qcow2 "f:\old_disk1\linux.qcow2" -O vhdx -o subformat=dynamic g:\vhd\linux.vhdx
qemu-img.exe convert -f qcow2 "f:\old_disk1\mail.qcow2" -O vhdx -o subformat=dynamic g:\vhd\mail.vhdx
qemu-img.exe convert -f qcow2 "f:\old_disk1\sonya.qcow2" -O vhdx -o subformat=dynamic g:\vhd\sonya.vhdx
qemu-img.exe convert -f qcow2 "f:\old_disk1\terminal-datastore.qcow2" -O vhdx -o subformat=dynamic g:\vhd\terminal-datastore.vhdx

Облом с windows vhdx:)

В qemu-img версий 2.0 есть баг, из за которого при конвертации в vhdx не поддерживается динамический диск, по этому опция o subformat=dynamic работать не будет.
По этому, для поддержания динамического диска, нужно конвертировать его в vhd(vpc), и уже после в самом hyper-v преобразовывать в vhdx.

Продолжил :)

qemu-img.exe convert -f qcow2 "f:\old_disk1\dc.qcow2" -O vpc  g:\vhd\dc.vhd

облом 2 :(

Ну и снова облом =) все сконвертировалось. при запуске вм vhd 0xc03a001a
Средствами hyper-v преобразовал  vhdx ничего не получилось ошибка ...

получилось так (велосипедно):

0) qemu-img.exe convert -f qcow2 "f:\old_disk1\dc.qcow2" -O vpc  g:\vhd\dc.vhd - сконвертировал
1) в hyper-v создал пустой диск g:\vhd\dcz.vhd
2) с помощью Paragon2015  проверил а монтируются ли диски (все ок )
3) с помощью paragon2015 сделал клон с  g:\vhd\dc.vhd на g:\vhd\dcz.vhd
4) проверил виртуалка запустилась все работает
5) средствами hyper-v конвертировал vhdx

ну а потом попробовал вот так:

имею 3 диска. 
на 1 клоны. 
на 2 я конвертирую vhd
на 3 я создаю vhdx с помощью hyper-v
Используя paragon делаю клон c vhd на vhdx

!!!

Для linux нужно будет переписать загрузчик и fstab