Zakládáme KVM virtuální stroj s virt-install

vim | 11. března 2025 23:05

Tímto článkem bych rád navázal na článek VFIO GPU passthrough česky, ze kterého převezmu premisu se založením virtuálního stroje (dále jen VM), kterému přiřadíme grafickou kartu v hostitelském systému. V tomto článku na rozdíl od předchozího použiji k založení VM příkaz virt-install.

1. Úvod

Před dalším postupem je třeba projít výše uvedený článek a provést potřebná nastavení tak jak jsou popsána v bodech 1-5.

Co se týče instalace potřebných balíčků, jediná změna oproti výchozímu článku (konkrétně bodu 3) je, že není třeba instalovat virt-manager, místo něj je třeba nainstalovat virt-install.

apt-get install qemu-system-x86 qemu-system-gui ovmf swtpm-tools \
libvirt-daemon-system libvirt-clients bridge-utils virt-install

2. Založení VM s Windows 11 a GPU passthrough pomocí virt-install

sudo virt-install \
  --name Windows-11 \
  --memory 16384 \
  --vcpu 4 \
  --cpu host-passthrough,topology.cores=4,topology.dies=1,topology.sockets=1,topology.threads=1 \
  --cputune vcpupin0.vcpu=0,vcpupin0.cpuset=2,vcpupin1.vcpu=1,vcpupin1.cpuset=3,vcpupin2.vcpu=2,vcpupin2.cpuset=4,vcpupin3.vcpu=3,vcpupin3.cpuset=5 \
  --machine q35 \
  --features kvm_hidden=on,smm=on,hyperv.relaxed.state=on,vmport.state=off \
  --os-variant=win11 \
--disk pool=nazev_poolu,size=64,cache=none,bus=virtio \
--cdrom /cesta/k/Win11_24H2_Czech_x64.iso \
--disk path=/cesta/k/virtio-win-0.1.262.iso,device=cdrom \
  --graphics none \
  --sound default \
  --network bridge=br0,model=virtio \
  --host-device 0000:01:00.0,address.type=pci,address.multifunction=on \
  --host-device 0000:01:00.1 \
  --host-device 0000:00:1a.0 \
  --tpm backend.type=emulator,backend.version=2.0,model=tpm-tis \
  --boot uefi \
--input type=evdev,source.dev=/dev/input/by-id/usb-XXXX-event-mouse \
--input type=evdev,source.dev=/dev/input/by-id/usb-XXXX_Keyboard-event-kbd,source.grab=all,source.grabToggle=ctrl-ctrl,source.repeat=yes

3. Význam jednotlivých parametrů virt-installu

  • --name - název VM
  • --memory - velikost RAM VM v mebibytech
  • --vcpu - počet virtuálních CPU, které VM dostane
  • --cpu - slouží ke specifikaci vlastností CPU, které budou reportovány VM
    • host-passthrough - VM budou reportovány všechny vlastnosti (features) hostitelova CPU, místo host-passthrough je možné uvést konkrétní model CPU (např. Haswell, seznam systémem podporovaných modelů a vlastností lze vypsat příkazem qemu-system-x86_64 -cpu help)
    • topology.cores - počet jader, která budou reportována VM
    • topology.dies - počet čipů CPU, které budou reportovány VM
    • topology.socket - počet patic CPU, které budou reportovány VM
    • topology.threads - počet HW vláken CPU (SMT/hyperthreading->2), která budou reportována VM
  • --cputune - slouží k výkonostnímu ladění emulace
    • CPU pinning (tedy svázaní vCPU s jádry fyzického CPU hostitele)
      nejprve se sváže vcpupin s vcpu (vcpupin0.vcpu=0) a  poté se vcpupin sváže s konkrétním(i) CPU jádrem/jádry hostitele (vcpupin0.cpuset=2); zde jsme svázali vcpu0 s cpu jádrem číslo 2
    • Stejnětak je možné s konkrétním CPU jádrem/jádry svázat vlákno/vlákna ve kterých běží I/O operace
    • Dále je možné svázat vlákno emulátoru s konkrétním CPU jádrem/jádry
  • --machine - volba emulovaného chipsetu, na platformě AMD64/x86-64 jsou definovány 2 aliasy: q35 a pc, které ukazují na nejnovější specifikace emulací těchto chipsetů (např. pc-q35-7.2 a pc-i440fx-7.2), kompletní seznam virtuálních chipsetů, které QEMU podporuje lze vypsat příkazem: qemu-system-x86_64 -machine help 
  • --features - slouží k nastavení vlastností emulované platformy
    • kvm_hidden=on - skryje signaturu KVM hypervizoru před hostovaným operačním systémem
    • smm=on - zapne emulaci System Management Mode (některé UEFI firmwary ji mohou vyžadovat; QEMU podporuje SMM jen na emulovaném chipsetu q35)
    • hyperv.relaxed.state=on - Simuluje vlastnost "Relaxed Timing" v Microsoft Hyper-V. Pomáhá zlepšit stabilitu a výkon běhu Windows jako hostovaného OS v KVM/QEMU.
    • vmport.state=off - zakáže VMware IO port, zlepšuje kompatibilitu.
  • --os-variant - jaký operační systém chceme v hostovi provozovat, kompletní seznam podporovaných profilů OS vypíšeme příkazem: virt-install --os-variant list.
  • --disk - disková zařízení (tato volba má velký počet možných parametrů, viz. virt-install --disk help)
    • path - cesta k souboru obrazu nebo blokovému zařízení disku
    • pool - storage pool definovaný v rámci libvirt
    • size - velikost zakládaného "disku" v GiB
    • device - typ zařízení výchozí hodnota je disk, možné hodnoty: floppy, disk, cdrom, lun
    • cache - vyrovnávací paměť, možné hodnoty: default, none, writethrough, writeback, directsync, unsafe
    • bus - virtuální sběrnice, možné hodnoty: ide, scsi, virtio, xen, usb, sata. Výchozí hodnota je závislá na hypervizoru.
    • format - formát image/disku: raw nebo qcow2
  • --graphics - využijeme výstup grafické karty přiřazené VM, proto none
  • --sound - pokud využijeme zvukový výstup v rámci grafické karty (např. přes HDMI výstup), možno vynechat
  • --network - síťové adaptéry
    • bridge=br0 - připojí síťový adaptér VM do síťového mostu (bridge) br0 hostitele
    • network=sit0 - připojí síťový adaptér VM do virtuální sítě sit0, ve výchozím nastavení je v rámci instalace libvirt definována virtuální síť default
    • model - model síťové karty, tak jak bude reportován hostovi, možné hodnoty: e1000e, virtio
  • --host-device - hostitelovo zařízení přiřadí VM
  • --tpm - Trusted Platform Module
    • backend.type=emulator - TPM bude emulováno pomocí swtpm
    • backend.version=2.0 - bude emulováno TPM verze 2.0
    • model=tpm-tis - možné hodnoty: tpm-tis, tpm-crb
  • --input type=evdev - sdílení myši a klávesnice s hostitelem, popsáno ve výchozím článku v bodě 6.3

4. Zdroje

  1. man virt-install
  2. https://www.enlinux.com/linux-command-line/virt-install-command-examples/
  3. https://libvirt.org/formatdomain.html
  4. https://manuelcortez.net/2023/12/creating-vm-windows11-libvirt/
  5. https://www.reddit.com/r/kvm/comments/dnyx5i/virtinstall_gpu_passthrough_command/
  6. https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/7/html/virtualization_deployment_and_administration_guide/sect-guest_virtual_machine_installation_overview-creating_guests_with_virt_install

Vložit komentář




Diskuze jsou moderované - po odeslání komentář čeká na schválení.

2022 - 2025 vim