Тази тема не е от сложните, но пък е интересна и си заслужава внимание. Има много видове hypervisor-и но смятам да се спрезм на QEMU и KVM. Самия емулатор е QEMU, а KVM е ускорител за QEMU. Тези два модула са взаимно свързани и примерно KVM не може да работи без QEMU. За да се разбере по ясно QEMU е софтуер създаващ виртуализация. Той е сравнително бавен, макар, че емулира много среди. KVM прави връзка между хардуерната поддръжка на виртуализация и QEMU. По-точно KVM е апаратна поддръжка на виртуализация. Примерно пускате поддръжката на виртуализация на процесора и KVM прави връзката с QEMU за да може да се ускори работата. Също така на видеото от QEMU, KVM дава 3D ускорение и така нататък. Обяснението е много грубо но да се има долу горе представа кое за какво отговаря. За начало трябва да се убедите, че вашия компютър поддържа виртуализация. Грубо казано процесора който ползвате поддържа виртуализация и в BIOS-a е включена тази опция. В Linux можете да проверите чрез командата:
lscpu | grep Virtual Virtualization: VT-x Virtualization type: full
Още една проверка дали процесора поддържа виртуализация.
egrep --color=auto 'vmx|svm|0xc0f' /proc/cpuinfo
Ако в отговора има vmx оцветен в червено, значи процесора поддържа виртуализация. Модула KVM е динамичен и той се зарежда допълнително. Първо да открием модула между всички модули на ядрото.
find /lib/modules/ -type f -name "*kvm*" /lib/modules/6.18.3-zen1-1-zen/kernel/arch/x86/kvm/kvm.ko.zst /lib/modules/6.18.3-zen1-1-zen/kernel/arch/x86/kvm/kvm-amd.ko.zst /lib/modules/6.18.3-zen1-1-zen/kernel/arch/x86/kvm/kvm-intel.ko.zst /lib/modules/6.18.3-zen1-1-zen/kernel/drivers/gpu/drm/i915/kvmgt.ko.zst /lib/modules/6.18.3-zen1-1-zen/kernel/drivers/ptp/ptp_kvm.ko.zst
Имаме такъв модул, който може да се зареди. Да проверим дали модула KVM е зареден в ядрото.
lsmod |grep kvm kvm_intel 520192 0 kvm 1421312 1 kvm_intel irqbypass 16384 1 kvm
Процесора ми е Intel затова модула е kvm_intel. За процесори AMD, модула ще е kvm_amd. Може да проверим как системата ще възприеме този модул.
modinfo kvm modinfo kvm-intel
Получаваме информация за модулите.
Избързвам и ще покажа пълната инсталация и ще можете да си създавате и управлявате различни виртуални машини, а за тези които се интересуват от темата препоръчвам да прочетете статията докрай. Инсталираме всички необходими пакети.
sudo pacman -Syu sudo pacman -S qemu libvirt virt-manager dnsmasq bridge-utils spice-protocol spice-vdagent :: Има 3 източници достъпни за qemu: :: Хранилище extra 1) qemu-base 2) qemu-desktop 3) qemu-full Въведете номер (default=1): 2
qemu - програма за емулиране на компютъра libvirt - програма имаща графичен интерфейс за управление на виртуалната машина virt-manager - надстройка на quemu и libvirt dnsmasq - програма за настройка на мрежата bridge-utils - оше една програма за настройка на мрежата spice-protocol - по-напреднал протокол за връзка с вашата виртуална машина spice-vdagent - още един по-напреднал протокол за връзка с вашата виртуална машина, подобни на протоколите vnc, rdp и т.н. qemu-base - минимални услуги на емулатора, тук няма поддръжка на spice-protocol, само vnc, qemu-desktop - оптимален набор от функции, поддържа spice-protocol и 3D функции, qemu-full - пълна поддръжка на функции но става по-тежка системата. След инсталацията пускаме Virtual Machine Manager (Мениджър на виртуални машини). Появява се екран Unable to connect to libvirt qemu:///system. Ако натиснем на линка Детайли ще видим, че не може да се свръже с libvirt qemu:///system. Предлага ни да проверим дали услугата libvirt е стартирана като демон. За целта:
sudo systemctl enable libvirtd sudo systemctl start libvirtd
Сега програмата се стартира но изисква права. За целта:
sudo usermod -aG libvirt cccp
Казахме, че потребителя cccp ще е член на групата libvirt
Наново стартираме Virtual Machine Manager. Сега не ни иска парола за удостоверение. Вече може да се създават виртуални машини.
В зависимост от инсталацията стъпките ще са различни. Първото нещо обаче е да проверите дали имате създаден Connection. Ако нямате такъв то тогава: File >> Add Connection.... Това ще позволи виртуалната машина да се свърже мрежово. След тази стъпка можете да изграждате виртуални машини, да ги свързвате помежду си и т.н.
За да добиете пълна представа от виртуализацията последвайте стъпките които ще се изпълнят.
sudo pacman -S qemu :: There are 3 providers available for qemu: :: Repository extra 1) qemu-base 2) qemu-desktop 3) qemu-full Enter a number (default=1): 2
qemu - мощна програма за софтуерно емулиране на компютъра. Qemu на практика може да емулира всичко, от различни видове процесори, видеокарти, USB портове и т.н. Обаче е софтуерна емулация и е сравнително бавна. qemu-base - минимални услуги на емулатора, тук няма поддръжка на spice-protocol, само vnc, qemu-desktop - оптимален набор от функции, поддържа spice-protocol и 3D функции, qemu-full - пълна поддръжка на функции но става по-тежка системата. За пълноценна работа с виртуалната машина ни трябва диск където ще се инсталира файловата система Дисковете ще се имитират като истински работещи под протоколите SCISI или Serial ATA. Когато инсталирахме пакета qemu вътре имаше програмата qemu-img. Тя отговаря за имитирането на типа диск. Нас ни интерисуват най-вече форматите на дискове raw и qcow2. Формата raw имитира файл който ще е голям колкото размера на диска. Примерно искаме да имаме диск 20GB то при този случай ще се създаде файл с размер 20GB. За по-рационално ползване на дисковото пространство ще ползваме формата qcow2. Дискове създадени по този начин първоначално имат размер 0. В последствие размера ще се увеличава в зависимост от това какво ще слагате по диска като информация (програми, архивни файлове, логове и т.н.)
sudo pacman -S libvirt
libvirt - програма имаща графичен интерфейс за управление на виртуалната машина След инсталацията ще можем да поддържаме протоколите iSCSI, Gluster storage backend и RDB. Това ни показва какви контролери можем да ползваме за включването на дискове. Освен това се поддържа и технологията LVM. Това е допълнителен сървис който включва възможности които липсват в QEMU или в модулите на ядрото. Този сървис не свързан да работи само с KVM. Може да го видите в VMware, VirtualBOX, Xen и т.н. За да определим какви драйвери и модули има в нашата версия на libvirt
sudo libvirtd -V libvirtd (libvirt) 11.10.0
Освен сървиса libvirt ще ползваме и още една помощна програма, а именно virt-install. Тази помощна програма не е задължителна, но дава удобство в работата и ще ни икономиса много време.
sudo pacman -S virt-install
Още една група от помощни програми, които допълнително ще улеснят работата ни.
sudo pacman -S ebtables dnsmasq dmidecode virt-viewer
dnsmasq: проста DNS услуга, работеща като кеширащ и пренаправляващ DNS за виртуалната машина. virt-viewer: ще позволи да се включим във виртуалната системата през конзола. Ако нямаме пусната услуга SSH то остава да се свържем само през конзола.
Инсталирахме почти всичко. Време да пунем услугата libvirt и да накараме автоматично да се стартира при рестартиране на системата.
sudo systemctl enable libvirtd sudo systemctl start libvirtd sudo systemctl status libvirtd ● libvirtd.service - libvirt legacy monolithic daemon Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; preset: disabled) Active: active (running) since Fri 2026-01-09 20:42:33 EET; 6s ago Invocation: 5ed406d7ef6b44e3aa5c29be38ab07ae TriggeredBy: ● libvirtd-ro.socket ● libvirtd-admin.socket ● libvirtd.socket Docs: man:libvirtd(8) https://libvirt.org/ Main PID: 1308 (libvirtd) Tasks: 21 (limit: 32768) Memory: 21.7M (peak: 22.4M) CPU: 141ms CGroup: /system.slice/libvirtd.service └─1308 /usr/bin/libvirtd --timeout 120 Jan 09 20:42:33 Arch systemd[1]: Starting libvirt legacy monolithic daemon... Jan 09 20:42:33 Arch systemd[1]: Started libvirt legacy monolithic daemon.
Да проверим дали системата е опредлелила и автоматично заредила модула в ядрото KVM.
sudo lsmod | grep kvm kvm_intel 532480 0 kvm 1531904 1 kvm_intel irqbypass 16384 1 kvm
До тук всичко е наред.
Всеки потребител в зависимост от правата си може да работи само с тези параметри на libvirt които са му позволени. За да може потребителя на системата да има достъп до libvirt трябва да се добави към групата libvirt.
sudo usermod -a -G libvirt cccp
Така добавихме потребителя cccp към групата libvirt. По принцип потребителя root има право да определя мрежовите настройки. Обикновения потребител няма такива права. Услугата е готова за работа. Трябва ни само клиент който да се свърже с libvirt или по мрежата или по локален сокет. Клиента може да стартира машини създадени не на машината на която е инсталиран клиента. Грубо казано може отдалечено да управлява виртуални машини. Клиента се пуска под root. Пищем командата:
virsh virsh # net-list --all Name State Autostart Persistent ---------------------------------------- help Grouped commands: Domain Management (help keyword 'domain'): attach-device attach device from an XML file attach-disk attach disk device attach-interface attach network interface autostart autostart a domain blkdeviotune Set or query a block device I/O tuning parameters. domthrottlegroupset Add or update a throttling group. domthrottlegroupdel Delete a throttling group. domthrottlegroupinfo Get a throttling group. ............................ ............................ ............................
Показва какви мрежи имаме. По принцип има налични над 200 команди които може да се използват.
Малко силно казано последни пакети. Вариантите на инсталация са толкова различни в зависимост от работата която ще се върши, че да кажем последни пакети е леко казано невярно. Но за първоначална работа тези са последните пакети с които може да се правят най-често срещаните виртуални машини.
sudo pacman -S virt-manager bridge-utils spice-protocol spice-vdagent
virt-manager - надстройка на quemu и libvirt bridge-utils - оше една програма за настройка на мрежата spice-protocol - по-напреднал протокол за връзка с вашата виртуална машина spice-vdagent - още един по-напреднал протокол за връзка с вашата виртуална машина, подобни на протоколите vnc, rdp и т.н.