Virtual-Machine

為什麼在我指定 q35 時會創建 i440fx 類型的機器,我如何讓 q35 工作?

  • March 1, 2019

我需要創建一個具有 Q35 機器類型的 Windows VM。然而,儘管指定了 q35,還是創建了 i440fx 機器。

創建與:

sudo virt-install \
--name wintest \
--boot uefi \
--ram 32768 \
--graphics spice \
--machine q35 \
--features kvm_hidden=on \
--hostdev 0a:00.0,address.type=pci,address.multifunction=on \
--machine pc \
--vcpus 4 \
--os-type windows \
--os-variant win10 \
--network bridge=br0 \
--console pty,target_type=serial \
--disk /home/boss/Downloads/Win10_1809Oct_English_x64.iso,device=cdrom \
--disk /home/boss/Downloads/virtio-win-0.1.164.iso,device=cdrom \
--disk path=/home/boss/testVM/wintest.img,bus=virtio,size=60 

生成的域 XML:

<domain type='kvm' id='5'>
 <name>wintest</name>
 <uuid>02288584-0660-4478-99b0-0189cc4567ff</uuid>
 <metadata>
   <libosinfo:libosinfo xmlns:libosinfo="http://libosinfo.org/xmlns/libvirt/domain/1.0">
     <libosinfo:os id="http://microsoft.com/win/10"/>
   </libosinfo:libosinfo>
 </metadata>
 <memory unit='KiB'>33554432</memory>
 <currentMemory unit='KiB'>33554432</currentMemory>
 <vcpu placement='static'>4</vcpu>
 <resource>
   <partition>/machine</partition>
 </resource>
 <os>
   <type arch='x86_64' machine='pc-i440fx-3.1'>hvm</type>
   <loader readonly='yes' type='pflash'>/usr/share/ovmf/x64/OVMF_CODE.fd</loader>
   <nvram>/var/lib/libvirt/qemu/nvram/wintest_VARS.fd</nvram>
   <boot dev='cdrom'/>
   <boot dev='hd'/>
 </os>
 <features>
   <acpi/>
   <apic/>
   <hyperv>
     <relaxed state='on'/>
     <vapic state='on'/>
     <spinlocks state='on' retries='8191'/>
   </hyperv>
   <kvm>
     <hidden state='on'/>
   </kvm>
   <vmport state='off'/>
 </features>
 <cpu mode='custom' match='exact' check='full'>
   <model fallback='forbid'>EPYC-IBPB</model>
   <vendor>AMD</vendor>
   <feature policy='require' name='x2apic'/>
   <feature policy='require' name='tsc-deadline'/>
   <feature policy='require' name='hypervisor'/>
   <feature policy='require' name='tsc_adjust'/>
   <feature policy='require' name='cmp_legacy'/>
   <feature policy='require' name='perfctr_core'/>
   <feature policy='require' name='virt-ssbd'/>
   <feature policy='disable' name='monitor'/>
   <feature policy='disable' name='svm'/>
   <feature policy='require' name='topoext'/>
 </cpu>
 <clock offset='localtime'>
   <timer name='rtc' tickpolicy='catchup'/>
   <timer name='pit' tickpolicy='delay'/>
   <timer name='hpet' present='no'/>
   <timer name='hypervclock' present='yes'/>
 </clock>
 <on_poweroff>destroy</on_poweroff>
 <on_reboot>restart</on_reboot>
 <on_crash>destroy</on_crash>
 <pm>
   <suspend-to-mem enabled='no'/>
   <suspend-to-disk enabled='no'/>
 </pm>
 <devices>
   <emulator>/usr/bin/qemu-system-x86_64</emulator>
   <disk type='file' device='cdrom'>
     <driver name='qemu' type='raw'/>
     <source file='/home/boss/Downloads/Win10_1809Oct_English_x64.iso'/>
     <backingStore/>
     <target dev='hda' bus='ide'/>
     <readonly/>
     <alias name='ide0-0-0'/>
     <address type='drive' controller='0' bus='0' target='0' unit='0'/>
   </disk>
   <disk type='file' device='cdrom'>
     <driver name='qemu' type='raw'/>
     <source file='/home/boss/Downloads/virtio-win-0.1.164.iso'/>
     <backingStore/>
     <target dev='hdb' bus='ide'/>
     <readonly/>
     <alias name='ide0-0-1'/>
     <address type='drive' controller='0' bus='0' target='0' unit='1'/>
   </disk>
   <disk type='file' device='disk'>
     <driver name='qemu' type='qcow2'/>
     <source file='/home/boss/testVM/wintest.img'/>
     <backingStore/>
     <target dev='vda' bus='virtio'/>
     <alias name='virtio-disk0'/>
     <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
   </disk>
   <controller type='usb' index='0' model='qemu-xhci' ports='15'>
     <alias name='usb'/>
     <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
   </controller>
   <controller type='pci' index='0' model='pci-root'>
     <alias name='pci.0'/>
   </controller>
   <controller type='ide' index='0'>
     <alias name='ide'/>
     <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
   </controller>
   <interface type='bridge'>
     <mac address='52:54:00:52:9a:ef'/>
     <source bridge='br0'/>
     <target dev='vnet1'/>
     <model type='e1000'/>
     <alias name='net0'/>
     <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
   </interface>
   <serial type='pty'>
     <source path='/dev/pts/1'/>
     <target type='isa-serial' port='0'>
       <model name='isa-serial'/>
     </target>
     <alias name='serial0'/>
   </serial>
   <console type='pty' tty='/dev/pts/1'>
     <source path='/dev/pts/1'/>
     <target type='serial' port='0'/>
     <alias name='serial0'/>
   </console>
   <input type='tablet' bus='usb'>
     <alias name='input0'/>
     <address type='usb' bus='0' port='1'/>
   </input>
   <input type='mouse' bus='ps2'>
     <alias name='input1'/>
   </input>
   <input type='keyboard' bus='ps2'>
     <alias name='input2'/>
   </input>
   <graphics type='spice' port='5900' autoport='yes' listen='127.0.0.1'>
     <listen type='address' address='127.0.0.1'/>
     <image compression='off'/>
   </graphics>
   <sound model='ich6'>
     <alias name='sound0'/>
     <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
   </sound>
   <video>
     <model type='qxl' ram='65536' vram='65536' vgamem='16384' heads='1' primary='yes'/>
     <alias name='video0'/>
     <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
   </video>
   <hostdev mode='subsystem' type='pci' managed='yes'>
     <driver name='vfio'/>
     <source>
       <address domain='0x0000' bus='0x0a' slot='0x00' function='0x0'/>
     </source>
     <alias name='hostdev0'/>
     <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
   </hostdev>
   <redirdev bus='usb' type='spicevmc'>
     <alias name='redir0'/>
     <address type='usb' bus='0' port='2'/>
   </redirdev>
   <redirdev bus='usb' type='spicevmc'>
     <alias name='redir1'/>
     <address type='usb' bus='0' port='3'/>
   </redirdev>
   <memballoon model='virtio'>
     <alias name='balloon0'/>
     <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
   </memballoon>
 </devices>
 <seclabel type='dynamic' model='dac' relabel='yes'>
   <label>+1000:+1000</label>
   <imagelabel>+1000:+1000</imagelabel>
 </seclabel>
</domain>

在創建過程中命令行出現了一些錯誤,但我認為它們可能無關緊要,但在這裡它們是:

Starting install...
Allocating 'wintest.img'                                    |  60 GB  00:00     

(virt-viewer:23811): GSpice-WARNING **: 03:02:45.002: PulseAudio context failed Connection refused

(virt-viewer:23811): GSpice-WARNING **: 03:02:45.002: pa_context_connect() failed: Connection refused

(virt-viewer:23811): GSpice-WARNING **: 03:02:45.126: Could not create org.gnome.SessionManager dbus proxy: Error spawning command line “dbus-launch --autolaunch=53385a97d6e04bd9aa29b8b8cb510ddb --binary-syntax --close-stderr”: Child process exited with code 1

(virt-viewer:23811): GSpice-WARNING **: 03:02:45.126: Warning no automount-inhibiting implementation available
Domain creation completed.

因為你不小心指定--machine了兩次。

--machine q35 \
--features kvm_hidden=on \
--hostdev 0a:00.0,address.type=pci,address.multifunction=on \
--machine pc \

刪除包含--machine pc \.

引用自:https://unix.stackexchange.com/questions/503712