패스스루 그래픽이 포함된 가상 머신을 설정하려고 합니다. UEFI 셸에 대한 패스스루가 제대로 작동하도록 할 수 있었지만공식 Windows 설치 프로그램. Windows 설치 프로그램을 실행할 수 있지만 에뮬레이트된 그래픽만 사용할 수 있습니다.
그러면 QEMU 창에서 Windows 설치 프로그램이 시작됩니다.
sudo qemu-system-x86_64 --enable-kvm \
-name TESTVM,process=TESTVM \
-cdrom /media/big-tank-8TB/OSISOS/Windows/WindowsOct2018.iso \
-smp 4 \
-cpu core2duo \
-m 4096 \
-vga qxl
또한 QEMU 창에서 Windows 설치 프로그램이 시작됩니다(여전히 패스스루 없음).
sudo qemu-system-x86_64 --enable-kvm \
-name TESTVM,process=TESTVM \
-cdrom /media/big-tank-8TB/OSISOS/Windows/WindowsOct2018.iso \
-smp 4 \
-cpu core2duo \
-m 4096 \
-device vfio-pci,host=43:00.0,multifunction=on \
-device vfio-pci,host=43:00.1
그런데 UEFI 펌웨어 경로를 지정하면 패스스루 그래픽 카드와 QEMU 창에 연결된 모니터에 Tiano slpash 화면이 나타난 다음 UEFI 셸이 나타납니다.
sudo qemu-system-x86_64 --enable-kvm \
-name TESTVM,process=TESTVM \
-cdrom /media/big-tank-8TB/OSISOS/Windows/WindowsOct2018.iso \
-smp 4 \
-cpu core2duo \
-m 4096 \
-device vfio-pci,host=43:00.0,multifunction=on \
-device vfio-pci,host=43:00.1 \
-drive if=pflash,format=raw,readonly,file=/usr/share/OVMF/OVMF_CODE.fd \
-drive if=pflash,format=raw,file=/usr/share/OVMF/OVMF_VARS.fd
통과가 UEFI 파일 없이만 작동하는 이유는 무엇입니까? 또는 UEFI 파일을 지정하면 Windows가 부팅되지 않는 이유는 무엇입니까?
편집: 다른 버전의 Windows(2018년 10월 버전 대신 2018년 4월)를 다운로드해 보았으나 동일한 문제가 발생했습니다.
편집: OVMF를 지우고 다시 설치해 보았으나 성공하지 못했습니다.
편집: 셸에 "exit"를 입력하여 부팅 관리자에 들어갈 수 있지만 사용 가능한 DVD 드라이브(다른 모든 옵션과 함께)를 선택하면 즉시 부팅 관리자로 돌아갑니다.
편집: 이것을 실행했습니다:
-name TESTVM,process=TESTVM \
-drive file=/media/big-tank-8TB/OSISOS/Windows/Win10_1803_English_x64.iso,index=1,media=cdrom \
-drive file=/media/big-tank-8TB/OSISOS/Windows/virtio-win-0.1.160.iso,index=2,media=cdrom \
-smp 4 \
-cpu core2duo \
-m 4096 \
-device vfio-pci,host=43:00.0,multifunction=on \
-device vfio-pci,host=43:00.1 \
-drive if=pflash,format=raw,readonly,file=/usr/share/OVMF/OVMF_CODE.fd \
-drive if=pflash,format=raw,file=/usr/share/OVMF/OVMF_VARS.fd
UEFI 셸을 얻은 후 "exit"를 입력하여 부팅 관리자로 들어갔습니다. 부팅 관리자에서 사용 가능한 DVD 드라이브를 선택하면 즉시 부팅 관리자로 돌아갑니다.
그런 다음 시작 유지 관리 관리자 > 시작 옵션 > 시작 옵션 추가를 통해 다른 DVD 드라이브를 추가하고 시작 관리자 메뉴에서 드라이브를 선택했습니다. .
이것은 나에게 매우 간단한 "CD에서 부팅하려면 아무 키나 누르십시오"를 제공했습니다. 충분히 빠르면 Windows 설치 프로그램으로 부팅되지만 QEMU 창으로만 부팅됩니다. 패스스루 카드에 연결된 화면은 UEFI/부팅 관리자 이미지와 달리 단순한 커서로 검은색으로 표시됩니다.
편집: NVIDIA GTX1070으로 이것을 시도하고 있습니다. 마더보드는 ASRock x399 Taichi이고 CPU는 Threadripper 1950X입니다. 운영 체제는 XFCE가 설치된 Ubuntu Server입니다.
편집: 설치를 계속해도 QEMU 창에는 여전히 Windows가 있고 통과 카드에는 TianoCore 스플래시 화면만 있습니다. 장치 관리자에 가면 Windows에 카드가 표시되지만 어떤 이유로 중지되었습니다.
편집 : 나는 사용해 보았습니다.이 지침코드 43을 제거해도 도움이 되지 않습니다. 이를 시도하기 위해 qemu-system 대신 virt-install을 사용했는데, 이 작업을 수행했을 때 TianoCore 스플래시 화면이 없었습니다. 하지만 Windows에 들어가면 여전히 코드 43입니다.
편집: 언급된 대로 dmesg를 사용하여 메모리 예약 오류를 확인하세요.여기.그것을 찾을 수 없었습니다. 편집: 또한 위 링크에서 ROM 파서를 사용하여 "Type 3(EFI)"이 있는지 확인하세요.
답변1
당신은 이미 올바른 길을 가고 있습니다. GPU 패스스루는 완벽하지 않습니다. 특히 NVidia 카드인 경우(NVidia 또는 AMD는 언급하지 않았습니다). Qemu 창에서 설정을 완료합니다. Windows 컴퓨터가 인터넷에 연결되어 있는지 확인하고 Windows Update에서 그래픽 드라이버를 설치하도록 하십시오. 돌아오면 두 번째 모니터가 표시되어야 합니다. 그렇지 않은 경우 재부팅하세요. 그런 다음 보통 SPICE/VNC 콘솔을 제거하고 GPU 모니터만 연결합니다. GPU 패스스루가 작동하려면 시행착오가 필요합니다.
기타 시도해 볼 사항:
- GPU 패스스루 없이 Windows를 설치한 다음 GPU 패스스루를 시도해 보세요.
- NVidia_drivers.exe를 통해 드라이버 설치
- Windows 업데이트를 통해 드라이버 설치
- 바이오스와 UEFI
- Q35와 i440fx
참고: 코드 43은 NVidia의 알려진 버그이며 NVidia 드라이버가 가상 머신에서 실행 중인지 확인하는 것과 관련이 있습니다. NVidia는 VM 환경에서 실행되도록 설계된 카드를 판매하며 소비자급 카드용 드라이버가 VM에 설치되는 것을 방지하려고 시도합니다. domain.xml에서 다음을 사용해야 합니다.
<kvm>
<hidden state='on'/>
</kvm>
바라보다https://passthroughpo.st/apply-error-43-workaround/그리고 다른 자원의 예.
내 구성의 스크린샷은 다음과 같습니다.
이것은 내 domain.xml의 "관련" 부분입니다. 원하시면 전체 내용을 공유할 수 있지만 여기에는 불필요한 내용이 많이 있습니다.
<os>
<type arch='x86_64' machine='pc-i440fx-2.10'>hvm</type>
<loader readonly='yes' type='pflash'>/usr/share/edk2/ovmf/OVMF_CODE.fd</loader>
<nvram>/var/lib/libvirt/qemu/nvram/Windows10_VARS.fd</nvram>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
<kvm>
<hidden state='on'/>
</kvm>
<vmport state='off'/>
</features>
<clock offset='localtime'>
<timer name='rtc' tickpolicy='catchup'/>
<timer name='pit' tickpolicy='delay'/>
<timer name='hpet' present='no'/>
</clock>
답변2
나는 이것을 사용하여 그것을했습니다 :
sudo qemu-system-x86_64 --enable-kvm \
-name TESTVM,process=TESTVM \
-drive id=disk0,if=virtio,cache=none,format=raw,file=/dev/nvme-tank/ntfs-zvol,index=2 \
-smp 4 \
-cpu core2duo,kvm=off \
-m 4096 \
-device vfio-pci,host=43:00.0,multifunction=on \
-device vfio-pci,host=43:00.1 \
-drive if=pflash,format=raw,readonly,file=/usr/share/OVMF/OVMF_CODE.fd \
-drive if=pflash,format=raw,file=/usr/share/OVMF/OVMF_VARS.fd
그런 다음 장치 관리자의 GTX 1070 항목으로 이동하여 드라이버를 업데이트하십시오. 지난번에(virt-install 사용) NVIDIA 웹사이트에서 업데이트를 설치했습니다. 이제 편집 가능한 도메인 XML을 가질 수 있도록 virt-install을 사용하여 이 작업을 수행하겠습니다.
편집: 지금까지 virt-install을 사용할 때 Tiano 화면이 다시 표시되지만 이번에는 위와 같이 드라이버를 설치하는 것만으로는 충분하지 않으며 virt-install을 사용하여 위의 설치를 가져올 수도 없습니다(참고로, 기존 설치에서 virt-install 작업을 수행하려면 부팅 ISO를 포함하여 설치에서 오류 없이 부팅할 수 있도록 하기만 하면 된다는 사실을 깨닫는 데 시간이 좀 걸렸습니다.
편집: 이제 사용할 수 있을 것 같습니다.
- 초기 설치에는 위의 qemu-system-x86_64를 사용하십시오.
- 장치 관리자를 사용하여 드라이버 업데이트
그런 다음 virt-install을 실행합니다(그러나 오류 43이 다시 발생함).
virt-install \ --name myWINVM1 \ --boot uefi \ --ram 4096 \ --features kvm_hidden=on \ --hostdev 43:00.0,address.type=pci,address.multifunction=on \ --hostdev 43: 00.1,address.type=pci \ --disk 경로=/dev/nvme-tank/ntfs-zvol-part2 \ --cpu core2duo \ --vcpus 4 \ --os-type windows \ --os-variant win10 \ --networkbridge=virbr0 \ --console pty, target_type=serial \ --disk /media/big-tank-8TB/OSISOS/Windows/WindowsOct2018.iso, device=cdrom \ --disk /media/big-tank-8TB /OSISOS/Windows/virtio-win-0.1.160.iso,device=cdrom
myWINVM1 XML에서 SPICE 그래픽 장치를 제거했습니다. 아직도 TianoCore를 지나칠 수 없습니다.
내 XML에 가짜 공급업체 ID 줄을 추가했습니다.
- 내 USB 장치를 추가했습니다.
내 최종 XML:
<domain type='kvm' id='24'>
<name>myWINVM1</name>
<uuid>43e052b3-b3da-4025-92d8-ec7c8ff96ae9</uuid>
<memory unit='KiB'>4194304</memory>
<currentMemory unit='KiB'>4194304</currentMemory>
<vcpu placement='static'>4</vcpu>
<resource>
<partition>/machine</partition>
</resource>
<os>
<type arch='x86_64' machine='pc-i440fx-bionic'>hvm</type>
<loader readonly='yes' type='pflash'>/usr/share/OVMF/OVMF_CODE.fd</loader>
<nvram>/var/lib/libvirt/qemu/nvram/myWINVM1_VARS.fd</nvram>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
<hyperv>
<relaxed state='on'/>
<vapic state='on'/>
<spinlocks state='on' retries='8191'/>
<vendor_id state='on' value='1234567890ab'/>
</hyperv>
<kvm>
<hidden state='on'/>
</kvm>
<vmport state='off'/>
</features>
<cpu mode='custom' match='exact' check='full'>
<model fallback='forbid'>core2duo</model>
<feature policy='disable' name='ss'/>
<feature policy='disable' name='monitor'/>
<feature policy='require' name='cx16'/>
<feature policy='require' name='x2apic'/>
<feature policy='require' name='hypervisor'/>
<feature policy='require' name='lahf_lm'/>
</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/kvm-spice</emulator>
<disk type='file' device='disk'>
<driver name='qemu' type='raw'/>
<source file='/dev/nvme-tank/ntfs-zvol-part2'/>
<backingStore/>
<target dev='hda' bus='ide'/>
<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='/media/big-tank-8TB/OSISOS/Windows/WindowsOct2018.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='cdrom'>
<driver name='qemu' type='raw'/>
<source file='/media/big-tank-8TB/OSISOS/Windows/virtio-win-0.1.160.iso'/>
<backingStore/>
<target dev='hdc' bus='ide'/>
<readonly/>
<alias name='ide0-1-0'/>
<address type='drive' controller='0' bus='1' target='0' unit='0'/>
</disk>
<controller type='usb' index='0' model='ich9-ehci1'>
<alias name='usb'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x7'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci1'>
<alias name='usb'/>
<master startport='0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0' multifunction='on'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci2'>
<alias name='usb'/>
<master startport='2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x1'/>
</controller>
<controller type='usb' index='0' model='ich9-uhci3'>
<alias name='usb'/>
<master startport='4'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x2'/>
</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>
<controller type='virtio-serial' index='0'>
<alias name='virtio-serial0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</controller>
<interface type='bridge'>
<mac address='52:54:00:36:1d:c4'/>
<source bridge='virbr0'/>
<target dev='vnet0'/>
<model type='rtl8139'/>
<alias name='net0'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<serial type='pty'>
<source path='/dev/pts/4'/>
<target type='isa-serial' port='0'>
<model name='isa-serial'/>
</target>
<alias name='serial0'/>
</serial>
<console type='pty' tty='/dev/pts/4'>
<source path='/dev/pts/4'/>
<target type='serial' port='0'/>
<alias name='serial0'/>
</console>
<channel type='spicevmc'>
<target type='virtio' name='com.redhat.spice.0' state='disconnected'/>
<alias name='channel0'/>
<address type='virtio-serial' controller='0' bus='0' port='1'/>
</channel>
<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>
<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='usb' managed='no'>
<source>
<vendor id='0x046d'/>
<product id='0xc33b'/>
<address bus='5' device='3'/>
</source>
<alias name='hostdev0'/>
<address type='usb' bus='0' port='4'/>
</hostdev>
<hostdev mode='subsystem' type='usb' managed='no'>
<source>
<vendor id='0x046d'/>
<product id='0xc52b'/>
<address bus='5' device='4'/>
</source>
<alias name='hostdev1'/>
<address type='usb' bus='0' port='5'/>
</hostdev>
<hostdev mode='subsystem' type='pci' managed='yes'>
<driver name='vfio'/>
<source>
<address domain='0x0000' bus='0x43' slot='0x00' function='0x0'/>
</source>
<alias name='hostdev2'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</hostdev>
<hostdev mode='subsystem' type='pci' managed='yes'>
<driver name='vfio'/>
<source>
<address domain='0x0000' bus='0x43' slot='0x00' function='0x1'/>
</source>
<alias name='hostdev3'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x08' 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='0x09' function='0x0'/>
</memballoon>
</devices>
<seclabel type='dynamic' model='apparmor' relabel='yes'>
<label>libvirt-43e052b3-b3da-4025-92d8-ec7c8ff96ae9</label>
<imagelabel>libvirt-43e052b3-b3da-4025-92d8-ec7c8ff96ae9</imagelabel>
</seclabel>
<seclabel type='dynamic' model='dac' relabel='yes'>
<label>+64055:+120</label>
<imagelabel>+64055:+120</imagelabel>
</seclabel>
</domain>
답변3
오랜 투쟁 끝에 이것이 나에게 도움이 되었습니다.
먼저 다음과 같이 qemu VM 구성 파일을 편집합니다.
cd /etc/libvirt/qemu sudo virsh define win10_GPU.xml sudo virsh edit win10_GPU
여기서 "win10_GPU"는 물론 가상 머신 이름이고 추가
<qemu:commandline> <qemu:arg value='-cpu'/> <qemu:arg value='host,hv_time,kvm=off,hv_vendor_id=null,-hypervisor'/> </qemu:commandline>
</devices>
파일이 거의 끝나면
ctrl+O(저장), ctrl+X(종료)를 누르고sudo virsh define win10_GPU.xml
다시 Enter를 누르세요.Windows 설치를 시작하기 전에 가상 머신에서 다른 모든 디스플레이 인터페이스(예: SPICE, Video Cirrus 등)를 제거하십시오.
- Windows 10의 18xx 버전을 설치하지 마세요. 16xx 버전을 설치했는데 전체 업데이트 후에도 잘 작동합니다.
이것은 내 개인적인 경험입니다. 다른 시도를 하면 오류 코드 43이 발생합니다.