# Libvirt Libvirt — это программное обеспечение для управления StratoVirt, которое позволяет запускать и управлять StratoVirt с помощью команд в командной строке. В настоящее время существует пять основных команд virsh для управления StratoVirt: * `virsh create`, * `virsh destroy`, * `virsh suspend`, * `virsh resume` и * `virsh console`. ## Конфигурация Конфигурирование StratoVirt осуществляется следующим образом: - **Память**: ``` <memory unit='GiB'>8</memory> or <memory unit='MiB'>8192</memory> ``` - **CPU**: В настоящее время поддержка топологии CPU отсутствует, поэтому можно настроить только количество виртуальных процессоров (VCPU): ``` <vcpu>4</vcpu> ``` - **Архитектура**: Для параметра `arch` доступны значения `aarch64` и `x86_64`. На платформе X86 поддерживается модель `q35`, а на платформе aarch64 — `virt`. ``` <os> <type arch='x86_64' machine='q35'>hvm</type> </os> ``` - **Ядро и командная строка**: `/path/to/standard_vm_kernel` — путь к стандартному ядру виртуальной машины. ``` <kernel>/path/to/standard_vm_kernel</kernel> <cmdline>console=ttyS0 root=/dev/vda reboot=k panic=1 rw</cmdline> ``` - **Особенности**: Поскольку в стандартной виртуальной машине используется ACPI, необходимо настроить параметр `acpi`. Для платформы aarch66 также следует добавить `gic` в список параметров. ``` <features> <acpi/> </features> ``` Для платформы aarch64: ``` <features> <acpi/> <gic version='3'/> </features> ``` - **Эмулятор**: Чтобы установить эмулятор для libvirt, `/path/to/StratoVirt_binary_file` — это путь к файлу двоичного файла StratoVirt. ``` <devices> <emulator>/path/to/StratoVirt_binary_file</emulator> </devices> ``` - **Устройство balloon**: ``` <controller type='pci' index='4' model='pcie-root-port' /> <memballoon model='virtio'> <alias name='balloon0'/> <address type='pci' domain='0x000' bus='0x04' slot='0x00' function='0x00'/> </memballoon> ``` - **Устройство pflash**: Можно добавить устройство pflash с помощью следующей конфигурации. `/path/to/pflash` — это путь к файлу устройства pflash. ``` <loader readonly='yes' type='pflash'>/path/to/pflash</loader> <nvram template='/path/to/OVMF_VARS'>/path/to/OVMF_VARS</nvram> ``` - **Количество потоков ввода-вывода**: ``` <iothreads>1</iothreads> ``` - **Дисковое устройство**: ``` <controller type='pci' index='1' model='pcie-root-port' /> <disk type='file' device='disk'> <driver name='qemu' type='raw' iothread='1'/> <source file='/path/to/rootfs'/> <target dev='hda' bus='virtio'/> <iotune> <total_iops_sec>1000</total_iops_sec> </iotune> <address type='pci' domain='0x000' bus='0x01' slot='0x00' function='0x00'/> </disk> ``` - **Сетевое устройство**: ``` <controller type='pci' index='2' model='pcie-root-port' /> <interface type='ethernet'> <mac address='de:ad:be:ef:00:01'/> <source bridge='qbr0'/> <target dev='tap0'/> <model type='virtio'/> <address type='pci' domain='0x000' bus='0x02' slot='0x00' function='0x00'/> </interface> ``` - **Последовательное устройство**: Чтобы использовать команду `virsh console`, можно настроить virtio последовательное устройство с перенаправлением `pty`. ``` <controller type='pci' index='3' model='pcie-root-port' /> <controller type='virtio-serial' index='0'> <alias name='virt-serial0'/> <address type='pci' domain='0x000' bus='0x03' slot='0x00' function='0x00'/> </controller> <console type='pty'> <target type='virtio' port='0'/> <alias name='console0'/> </console> ``` - **Vhost-vsock устройство**: ``` <controller type='pci' index='6' model='pcie-root-port' /> <vsock model='virtio'> <cid auto='no' address='3'/> <address type='pci' domain='0x000' bus='0x00' slot='0x06' function='0x00'/> </vsock> ``` - **Случайное числовое устройство**: ``` <controller type='pci' index='5' model='pcie-root-port' /> <rng model='virtio'> <rate period='1000' bytes='1234'/> <backend model='random'>/path/to/random_file</backend> <address type='pci' domain='0x000' bus='0x05' slot='0x00' function='0x00'/> </rng> ``` - **Прямое устройство**: ``` <controller type='pci' index='7' model='pcie-root-port' /> <hostdev mode='subsystem' type='pci' managed='yes'> <driver name='vfio'/> <source> <address domain='0x0000' bus='0x03' slot='0x00' function='0x0'/> </source> </hostdev>